From b7481e4de66072356b6096e8dfa6ae4341ef6207 Mon Sep 17 00:00:00 2001
From: Seth L <81644108+sethAmazon@users.noreply.github.com>
Date: Tue, 23 Apr 2024 16:03:59 -0400
Subject: [PATCH] Merge in Contrib version v0.98.0 (#203)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
* [chore] Remove use of deprecated configtls structs (#31814)
* fix(deps): update module google.golang.org/api to v0.170.0 (#31834)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://togithub.com/googleapis/google-api-go-client)
| `v0.167.0` -> `v0.170.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.167.0/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.167.0/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[google.golang.org/api](https://togithub.com/googleapis/google-api-go-client)
| `v0.166.0` -> `v0.170.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.166.0/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.166.0/v0.170.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
googleapis/google-api-go-client
(google.golang.org/api)
###
[`v0.170.0`](https://togithub.com/googleapis/google-api-go-client/releases/tag/v0.170.0)
[Compare
Source](https://togithub.com/googleapis/google-api-go-client/compare/v0.169.0...v0.170.0)
##### Features
- **all:** Auto-regenerate discovery clients
([#2458](https://togithub.com/googleapis/google-api-go-client/issues/2458))
([fb2b816](https://togithub.com/googleapis/google-api-go-client/commit/fb2b816b756c5b8bc80f5485ad93d710fdfdb6ea))
- **all:** Auto-regenerate discovery clients
([#2460](https://togithub.com/googleapis/google-api-go-client/issues/2460))
([dc4811a](https://togithub.com/googleapis/google-api-go-client/commit/dc4811aa3cfdf120544f3e2eddd1962a56794a08))
- **all:** Auto-regenerate discovery clients
([#2461](https://togithub.com/googleapis/google-api-go-client/issues/2461))
([e938bf1](https://togithub.com/googleapis/google-api-go-client/commit/e938bf17ecd2b8430d95b7adb066f9a35f03dceb))
- **all:** Auto-regenerate discovery clients
([#2464](https://togithub.com/googleapis/google-api-go-client/issues/2464))
([c3a2f34](https://togithub.com/googleapis/google-api-go-client/commit/c3a2f34ee8091bf1aab9f9a44d38a42f40d5a81d))
- **all:** Auto-regenerate discovery clients
([#2466](https://togithub.com/googleapis/google-api-go-client/issues/2466))
([de61eb7](https://togithub.com/googleapis/google-api-go-client/commit/de61eb772c1f4b91bf46934101331953c82f3d96))
- **all:** Auto-regenerate discovery clients
([#2468](https://togithub.com/googleapis/google-api-go-client/issues/2468))
([67f16b6](https://togithub.com/googleapis/google-api-go-client/commit/67f16b6ada0cd92d94d98bb32f3bec61ca3472c6))
- **all:** Auto-regenerate discovery clients
([#2471](https://togithub.com/googleapis/google-api-go-client/issues/2471))
([5537676](https://togithub.com/googleapis/google-api-go-client/commit/5537676cf7a165ff492701a368b94c11511d2929))
###
[`v0.169.0`](https://togithub.com/googleapis/google-api-go-client/releases/tag/v0.169.0)
[Compare
Source](https://togithub.com/googleapis/google-api-go-client/compare/v0.168.0...v0.169.0)
##### Features
- **all:** Auto-regenerate discovery clients
([#2450](https://togithub.com/googleapis/google-api-go-client/issues/2450))
([d22da18](https://togithub.com/googleapis/google-api-go-client/commit/d22da1806db891da12d7290ef4334e18fbaf0ca2))
- **all:** Auto-regenerate discovery clients
([#2454](https://togithub.com/googleapis/google-api-go-client/issues/2454))
([2675c0a](https://togithub.com/googleapis/google-api-go-client/commit/2675c0abf9e442bb3ac35e18ecc196aaaa4facd3))
- **all:** Auto-regenerate discovery clients
([#2457](https://togithub.com/googleapis/google-api-go-client/issues/2457))
([a488112](https://togithub.com/googleapis/google-api-go-client/commit/a488112cd111b883dfaffa7e4ab67e99a6ea9b90))
###
[`v0.168.0`](https://togithub.com/googleapis/google-api-go-client/releases/tag/v0.168.0)
[Compare
Source](https://togithub.com/googleapis/google-api-go-client/compare/v0.167.0...v0.168.0)
##### Features
- **all:** Auto-regenerate discovery clients
([#2431](https://togithub.com/googleapis/google-api-go-client/issues/2431))
([e635a5e](https://togithub.com/googleapis/google-api-go-client/commit/e635a5e61572ec4a7dbad19a9e32ab7918cde9f0))
- **all:** Auto-regenerate discovery clients
([#2433](https://togithub.com/googleapis/google-api-go-client/issues/2433))
([0c30ecc](https://togithub.com/googleapis/google-api-go-client/commit/0c30ecca06ff770fafce74743b0a038122e31813))
- **all:** Auto-regenerate discovery clients
([#2436](https://togithub.com/googleapis/google-api-go-client/issues/2436))
([4dc71d4](https://togithub.com/googleapis/google-api-go-client/commit/4dc71d4531deeb116af23cd13245ca644f0be991))
- **all:** Auto-regenerate discovery clients
([#2438](https://togithub.com/googleapis/google-api-go-client/issues/2438))
([d290e18](https://togithub.com/googleapis/google-api-go-client/commit/d290e1861655087f52294c6e4994688cbfb3098a))
- **all:** Auto-regenerate discovery clients
([#2442](https://togithub.com/googleapis/google-api-go-client/issues/2442))
([9f9c0cf](https://togithub.com/googleapis/google-api-go-client/commit/9f9c0cf59e864281bd8b04319e4ce4c3914e147c))
- **all:** Auto-regenerate discovery clients
([#2443](https://togithub.com/googleapis/google-api-go-client/issues/2443))
([ced0c09](https://togithub.com/googleapis/google-api-go-client/commit/ced0c099be7b1bfa2802567f2a6e57b69b29285e))
- **all:** Auto-regenerate discovery clients
([#2445](https://togithub.com/googleapis/google-api-go-client/issues/2445))
([4fa90c9](https://togithub.com/googleapis/google-api-go-client/commit/4fa90c93dd04c64c6e1a35b358a23cb014be0e7a))
- **all:** Auto-regenerate discovery clients
([#2447](https://togithub.com/googleapis/google-api-go-client/issues/2447))
([022c85c](https://togithub.com/googleapis/google-api-go-client/commit/022c85c3d443e58228ea3eb51ee621f2a20d3a45))
- **all:** Auto-regenerate discovery clients
([#2448](https://togithub.com/googleapis/google-api-go-client/issues/2448))
([af383c7](https://togithub.com/googleapis/google-api-go-client/commit/af383c78468f5129b2333ad7222fb361873a4cd4))
- **all:** Auto-regenerate discovery clients
([#2449](https://togithub.com/googleapis/google-api-go-client/issues/2449))
([b438981](https://togithub.com/googleapis/google-api-go-client/commit/b43898129eca3b710c3573c48672b73a46ea9cdc))
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/sijms/go-ora/v2 to v2.8.10 (#31826)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/sijms/go-ora/v2](https://togithub.com/sijms/go-ora) |
`v2.8.9` -> `v2.8.10` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.9/v2.8.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.9/v2.8.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
sijms/go-ora (github.com/sijms/go-ora/v2)
### [`v2.8.10`](https://togithub.com/sijms/go-ora/releases/tag/v2.8.10):
: fix issues related to numbers and select for update
[Compare
Source](https://togithub.com/sijms/go-ora/compare/v2.8.9...v2.8.10)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module cloud.google.com/go/spanner to v1.60.0 (#31827)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/spanner](https://togithub.com/googleapis/google-cloud-go)
| `v1.58.0` -> `v1.60.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fspanner/v1.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fspanner/v1.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fspanner/v1.58.0/v1.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fspanner/v1.58.0/v1.60.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [chore][connector/datadogconnector] Fix connector traceToMetrics lifecycle (#31811)
**Description:**
Currently, calling `Shutdown` on the `traceToMetricConnector` requires
on `Start` being called before, as the `Shutdown` relies on goroutines
which are spawned during `Start`. This causes the connector to hang if a
call to `Shutdown` is made without a call to `Start`. This PR adds a
`isStarted` field to the `traceToMetricConnector` struct, which tracks
whether `Start` was called. If it was not, it makes the call to
`Shutdown` a no-op.
**Link to tracking Issue:** #30487
**Testing:**
**Documentation:**
---------
Co-authored-by: Antoine Toulme
* [chore] Remove use of deprecated scraperhelper structs/funcs (#31816)
* [exporter/file] add encoding extension support (#31774)
**Description:**
This adds support to set an encoding extension on the file exporter,
overriding the format type.
* fix(deps): update module github.com/coreos/go-oidc/v3 to v3.10.0 (#31840)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/coreos/go-oidc/v3](https://togithub.com/coreos/go-oidc) |
`v3.9.0` -> `v3.10.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fcoreos%2fgo-oidc%2fv3/v3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fcoreos%2fgo-oidc%2fv3/v3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fcoreos%2fgo-oidc%2fv3/v3.9.0/v3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fcoreos%2fgo-oidc%2fv3/v3.9.0/v3.10.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
coreos/go-oidc (github.com/coreos/go-oidc/v3)
###
[`v3.10.0`](https://togithub.com/coreos/go-oidc/releases/tag/v3.10.0)
[Compare
Source](https://togithub.com/coreos/go-oidc/compare/v3.9.0...v3.10.0)
#### What's Changed
- fix minor typo by [@bgerrity](https://togithub.com/bgerrity) in
[https://github.com/coreos/go-oidc/pull/414](https://togithub.com/coreos/go-oidc/pull/414)
- updated github actions by
[@ericchiang](https://togithub.com/ericchiang) in
[https://github.com/coreos/go-oidc/pull/419](https://togithub.com/coreos/go-oidc/pull/419)
- add staticcheck to github actions by
[@ericchiang](https://togithub.com/ericchiang) in
[https://github.com/coreos/go-oidc/pull/420](https://togithub.com/coreos/go-oidc/pull/420)
- update go-jose to v4 by
[@ericchiang](https://togithub.com/ericchiang) in
[https://github.com/coreos/go-oidc/pull/421](https://togithub.com/coreos/go-oidc/pull/421)
#### New Contributors
- [@bgerrity](https://togithub.com/bgerrity) made their first
contribution in
[https://github.com/coreos/go-oidc/pull/414](https://togithub.com/coreos/go-oidc/pull/414)
**Full Changelog**:
https://github.com/coreos/go-oidc/compare/v3.9.0...v3.10.0
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* chore(deps): update wandalen/wretry.action action to v1.4.10 (#31823)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [Wandalen/wretry.action](https://togithub.com/Wandalen/wretry.action)
| action | patch | `v1.4.9` -> `v1.4.10` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
Wandalen/wretry.action (Wandalen/wretry.action)
###
[`v1.4.10`](https://togithub.com/Wandalen/wretry.action/compare/v1.4.9...v1.4.10)
[Compare
Source](https://togithub.com/Wandalen/wretry.action/compare/v1.4.9...v1.4.10)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update module github.com/clickhouse/clickhouse-go/v2 to v2.22.2 (#31828)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/ClickHouse/clickhouse-go/v2](https://togithub.com/ClickHouse/clickhouse-go)
| `v2.21.1` -> `v2.22.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.21.1/v2.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.21.1/v2.22.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
ClickHouse/clickhouse-go
(github.com/ClickHouse/clickhouse-go/v2)
###
[`v2.22.2`](https://togithub.com/ClickHouse/clickhouse-go/blob/HEAD/CHANGELOG.md#v2222-2024-03-18----Release-notes-generated-using-configuration-in-githubreleaseyml-at-main---)
[Compare
Source](https://togithub.com/ClickHouse/clickhouse-go/compare/v2.22.1...v2.22.2)
#### What's Changed
##### Fixes 🐛
- Fix for Map columns with Enums by
[@leklund](https://togithub.com/leklund) in
[https://github.com/ClickHouse/clickhouse-go/pull/1236](https://togithub.com/ClickHouse/clickhouse-go/pull/1236)
#### New Contributors
- [@leklund](https://togithub.com/leklund) made their first
contribution in
[https://github.com/ClickHouse/clickhouse-go/pull/1236](https://togithub.com/ClickHouse/clickhouse-go/pull/1236)
**Full Changelog**:
https://github.com/ClickHouse/clickhouse-go/compare/v2.22.1...v2.22.2
###
[`v2.22.1`](https://togithub.com/ClickHouse/clickhouse-go/blob/HEAD/CHANGELOG.md#v2221-2024-03-18----Release-notes-generated-using-configuration-in-githubreleaseyml-at-main---)
[Compare
Source](https://togithub.com/ClickHouse/clickhouse-go/compare/v2.22.0...v2.22.1)
#### What's Changed
##### Fixes 🐛
- Make errors channel buffered inside query() by
[@threadedstream](https://togithub.com/threadedstream) in
[https://github.com/ClickHouse/clickhouse-go/pull/1237](https://togithub.com/ClickHouse/clickhouse-go/pull/1237)
**Full Changelog**:
https://github.com/ClickHouse/clickhouse-go/compare/v2.22.0...v2.22.1
###
[`v2.22.0`](https://togithub.com/ClickHouse/clickhouse-go/releases/tag/v2.22.0)
[Compare
Source](https://togithub.com/ClickHouse/clickhouse-go/compare/v2.21.1...v2.22.0)
#### What's Changed
##### Enhancements 🎉
- Experimental streaming SELECT results into batch insert by
[@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1233](https://togithub.com/ClickHouse/clickhouse-go/pull/1233)
##### Fixes 🐛
- Ignore materialized and alias cols infered during HTTP prepare batch
by [@iyuroch](https://togithub.com/iyuroch) in
[https://github.com/ClickHouse/clickhouse-go/pull/1214](https://togithub.com/ClickHouse/clickhouse-go/pull/1214)
#### New Contributors
- [@iyuroch](https://togithub.com/iyuroch) made their first
contribution in
[https://github.com/ClickHouse/clickhouse-go/pull/1214](https://togithub.com/ClickHouse/clickhouse-go/pull/1214)
**Full Changelog**:
https://github.com/ClickHouse/clickhouse-go/compare/v2.21.1...v2.22.0
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* chore(deps): update prom/prometheus docker tag to v2.51.0 (#31836)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| prom/prometheus | minor | `v2.50.1` -> `v2.51.0` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update module gonum.org/v1/gonum to v0.15.0 (#31831)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| gonum.org/v1/gonum | `v0.14.0` -> `v0.15.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/gonum.org%2fv1%2fgonum/v0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/gonum.org%2fv1%2fgonum/v0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/gonum.org%2fv1%2fgonum/v0.14.0/v0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/gonum.org%2fv1%2fgonum/v0.14.0/v0.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/daixiang0/gci to v0.13.1 (#31829)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/daixiang0/gci](https://togithub.com/daixiang0/gci) |
`v0.12.3` -> `v0.13.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fdaixiang0%2fgci/v0.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fdaixiang0%2fgci/v0.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fdaixiang0%2fgci/v0.12.3/v0.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fdaixiang0%2fgci/v0.12.3/v0.13.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
daixiang0/gci (github.com/daixiang0/gci)
### [`v0.13.1`](https://togithub.com/daixiang0/gci/releases/tag/v0.13.1)
[Compare
Source](https://togithub.com/daixiang0/gci/compare/v0.13.0...v0.13.1)
#### What's Changed
- Enhance LocalModule when no go sources found in project root by
[@petr-korobeinikov](https://togithub.com/petr-korobeinikov) in
[https://github.com/daixiang0/gci/pull/192](https://togithub.com/daixiang0/gci/pull/192)
#### New Contributors
- [@petr-korobeinikov](https://togithub.com/petr-korobeinikov)
made their first contribution in
[https://github.com/daixiang0/gci/pull/192](https://togithub.com/daixiang0/gci/pull/192)
**Full Changelog**:
https://github.com/daixiang0/gci/compare/v0.13...v0.13.1
### [`v0.13.0`](https://togithub.com/daixiang0/gci/releases/tag/v0.13.0)
[Compare
Source](https://togithub.com/daixiang0/gci/compare/v0.12.3...v0.13.0)
#### What's Changed
- Add basic attempt at local module handling by
[@matthewhughes934](https://togithub.com/matthewhughes934) in
[https://github.com/daixiang0/gci/pull/179](https://togithub.com/daixiang0/gci/pull/179)
- Bump up to 0.13 by [@daixiang0](https://togithub.com/daixiang0)
in
[https://github.com/daixiang0/gci/pull/190](https://togithub.com/daixiang0/gci/pull/190)
#### New Contributors
- [@matthewhughes934](https://togithub.com/matthewhughes934) made
their first contribution in
[https://github.com/daixiang0/gci/pull/179](https://togithub.com/daixiang0/gci/pull/179)
**Full Changelog**:
https://github.com/daixiang0/gci/compare/v0.12.3...v0.13
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [exporter/datadog] Fix data race in metrics exporter shutdown (#31838)
**Description:**
Fix data race in metrics exporter shutdown.
If we do not do `f.wg.Wait()` before closing `statsToAgent`, there can
be a race condition when the goroutine still tries to write to
`statsToAgent` after it is closed.
Fixes
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31663
* [connector/datadog] Add container tags (#31642)
**Description:**
Customers can now set container tags on stats payload computed in DD
connector.
sample collector config:
```
datadog/connector:
traces:
resource_attributes_as_container_tags:
- "k8s.pod.name"
- "cloud.availability_zone"
```
* feat(sumologicextension): enable Sumo Logic Extension (#31478)
**Description:**
Add Sumo Logic Extension to contrib executable. Fixes #29601
**Link to tracking Issue:** #29601
**Testing:** N/A
**Documentation:**
`metadata.yaml`
---------
Signed-off-by: Dominik Rosiek
Co-authored-by: Andrzej Stencel
* [receiver/opencensus] refactor the code for maintenance and lifecycle tests (#31648)
**Description:**
Simplify the code of the opencensus receiver to make it more
maintainable, reduce leaks and pass lifecycle tests.
**Link to tracking Issue:**
Fixes #31643
* Promote the OpAMP extension to alpha stability (#31616)
* Update all dd agent pkgs (#31893)
**Description:**
This PR updates all DD packages to pseudoversion from the
[mackjmr/otel/backport](https://github.com/DataDog/datadog-agent/commits/mackjmr/otel/backport/)
branch.
**Link to tracking Issue:**
**Testing:**
**Documentation:**
* [chore][awscloudwatchlogsexporter] Enable goleak check (#31891)
Description:
Enables `goleak` checking on the `awscloudwatchlogsexporter` package.
Link to tracking Issue:
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30438
Signed-off-by: Israel Blancas
* feat(dockerstats): add online cpu and memory failcnt metrics (#31481)
**Description:** two new metrics have been added, they were already
being scraped but not emitted
**Link to tracking Issue:** #31366
**Testing:** added new metrics to `TestScrapeV2`
**Documentation:** generated by mdatagen
* [extension/ackextension] Implement in-memory ack extension (#31651)
**Description:**
Adding the in-memory implementation of the Ack extension proposed in
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/26376.
**Link to tracking Issue:** https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/26376
* [exporter/clickhouse] Update integration tests+readme (#31896)
**Description:** Fixed code review nits leftover from #30209
**Testing:**
- Added `clickhouse/clickhouse-server:24-alpine` to integration tests
**Documentation:**
- Added example command for running integration tests
* fix(deps): update all github.com/aws packages (#31557)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/aws/aws-sdk-go](https://togithub.com/aws/aws-sdk-go) |
`v1.50.27` -> `v1.51.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go/v1.51.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go/v1.51.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go/v1.50.27/v1.51.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go/v1.50.27/v1.51.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [github.com/aws/aws-sdk-go-v2](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.25.2` -> `v1.26.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2/v1.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2/v1.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2/v1.25.2/v1.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2/v1.25.2/v1.26.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/config](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.27.4` -> `v1.27.8` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.4/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.4/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/config](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.27.7` -> `v1.27.8` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.7/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.7/v1.27.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/credentials](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.17.4` -> `v1.17.8` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.4/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.4/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/kinesis](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.27.1` -> `v1.27.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.1/v1.27.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.1/v1.27.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/s3](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.51.1` -> `v1.53.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.51.1/v1.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.51.1/v1.53.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/secretsmanager](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.28.1` -> `v1.28.4` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.1/v1.28.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.1/v1.28.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/servicediscovery](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.29.2` -> `v1.29.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.2/v1.29.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.2/v1.29.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/sts](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.28.1` -> `v1.28.5` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.1/v1.28.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.1/v1.28.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
aws/aws-sdk-go (github.com/aws/aws-sdk-go)
###
[`v1.51.3`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1513-2024-03-19)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.2...v1.51.3)
\===
##### Service Client Updates
- `service/cloudformation`: Updates service documentation
- Documentation update, March 2024. Corrects some formatting.
- `service/ec2`: Updates service API, documentation, and paginators
- This release adds the new DescribeMacHosts API operation for getting
information about EC2 Mac Dedicated Hosts. Users can now see the latest
macOS versions that their underlying Apple Mac can support without
needing to be updated.
- `service/finspace`: Updates service API and documentation
- `service/logs`: Updates service API and documentation
- Update LogSamples field in Anomaly model to be a list of LogEvent
- `service/managedblockchain-query`: Updates service API, documentation,
and paginators
###
[`v1.51.2`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1512-2024-03-18)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.1...v1.51.2)
\===
##### Service Client Updates
- `service/cloudformation`: Updates service API and documentation
- This release supports for a new API ListStackSetAutoDeploymentTargets,
which provider auto-deployment configuration as a describable resource.
Customers can now view the specific combinations of regions and OUs that
are being auto-deployed.
- `service/kms`: Updates service API and documentation
- Adds the ability to use the default policy name by omitting the
policyName parameter in calls to PutKeyPolicy and GetKeyPolicy
- `service/mediatailor`: Updates service API and documentation
- `service/rds`: Updates service API, documentation, waiters,
paginators, and examples
- This release launches the ModifyIntegration API and support for data
filtering for zero-ETL Integrations.
- `service/s3`: Updates service API and examples
- Fix two issues with response root node names.
- `service/timestream-query`: Updates service documentation
###
[`v1.51.1`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1511-2024-03-15)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.0...v1.51.1)
\===
##### Service Client Updates
- `service/backup`: Updates service API and documentation
- `service/codebuild`: Updates service API and documentation
- AWS CodeBuild now supports overflow behavior on Reserved Capacity.
- `service/connect`: Updates service API and documentation
- `service/ec2`: Updates service API and documentation
- Add media accelerator and neuron device information on the describe
instance types API.
- `service/kinesisanalyticsv2`: Updates service API and documentation
- `service/s3`: Updates service documentation and examples
- Documentation updates for Amazon S3.
- `service/sagemaker`: Updates service API and documentation
- Adds m6i, m6id, m7i, c6i, c6id, c7i, r6i r6id, r7i, p5 instance type
support to Sagemaker Notebook Instances and miscellaneous wording fixes
for previous Sagemaker documentation.
- `service/workspaces-thin-client`: Updates service API and
documentation
###
[`v1.51.0`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1510-2024-03-14)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.38...v1.51.0)
\===
##### Service Client Updates
- `service/amplify`: Updates service documentation
- `service/ec2-instance-connect`: Updates service API and documentation
- `service/elasticloadbalancingv2`: Updates service documentation
- `service/fis`: Updates service API and documentation
- `service/rds`: Updates service API, documentation, waiters,
paginators, and examples
- Updates Amazon RDS documentation for EBCDIC collation for RDS for Db2.
- `service/secretsmanager`: Updates service documentation
- Doc only update for Secrets Manager
- `service/timestream-influxdb`: Adds new service
##### SDK Features
- `service/iotroborunner`: Remove Iotroborunner
- This change removes the iotroborunner service, since it is deprecated.
###
[`v1.50.38`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15038-2024-03-13)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.37...v1.50.38)
\===
##### Service Client Updates
- `service/ivs-realtime`: Updates service API and documentation
- `service/kinesisanalyticsv2`: Updates service API and documentation
- `service/s3`: Updates service examples
- This release makes the default option for S3 on Outposts request
signing to use the SigV4A algorithm when using AWS Common Runtime (CRT).
###
[`v1.50.37`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15037-2024-03-12)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.36...v1.50.37)
\===
##### Service Client Updates
- `service/cloudformation`: Updates service documentation
- CloudFormation documentation update for March, 2024
- `service/connect`: Updates service API and documentation
- `service/ec2`: Updates service documentation
- Documentation updates for Amazon EC2.
- `service/kafka`: Updates service API and documentation
- `service/ssm`: Updates service documentation
- March 2024 doc-only updates for Systems Manager.
###
[`v1.50.36`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15036-2024-03-11)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.35...v1.50.36)
\===
##### Service Client Updates
- `service/codestar-connections`: Updates service API and documentation
- `service/elasticache`: Updates service documentation
- Revisions to API text that are now to be carried over to SDK text,
changing usages of "SFO" in code examples to "us-west-1", and some other
typos.
- `service/mediapackagev2`: Updates service API and documentation
###
[`v1.50.35`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15035-2024-03-08)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.34...v1.50.35)
\===
##### Service Client Updates
- `service/batch`: Updates service API and documentation
- This release adds JobStateTimeLimitActions setting to the Job Queue
API. It allows you to configure an action Batch can take for a blocking
job in front of the queue after the defined period of time. The new
parameter applies for ECS, EKS, and FARGATE Job Queues.
- `service/bedrock-agent-runtime`: Updates service API and documentation
- `service/cloudtrail`: Updates service API and documentation
- Added exceptions to CreateTrail, DescribeTrails, and
ListImportFailures APIs.
- `service/codebuild`: Updates service documentation
- This release adds support for a new webhook event:
PULL_REQUEST_CLOSED.
- `service/cognito-idp`: Updates service API and documentation
- `service/guardduty`: Updates service API and documentation
- Add RDS Provisioned and Serverless Usage types
- `service/transfer`: Updates service API and documentation
- Added DES_EDE3\_CBC to the list of supported encryption algorithms for
messages sent with an AS2 connector.
###
[`v1.50.34`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15034-2024-03-07)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.33...v1.50.34)
\===
##### Service Client Updates
- `service/appconfig`: Updates service API and documentation
- `service/ec2`: Updates service API and documentation
- This release adds an optional parameter to RegisterImage and CopyImage
APIs to support tagging AMIs at the time of creation.
- `service/grafana`: Updates service API and documentation
- `service/lambda`: Updates service documentation
- Documentation updates for AWS Lambda
- `service/payment-cryptography-data`: Updates service API and
documentation
- `service/rds`: Updates service API, documentation, waiters,
paginators, and examples
- Updates Amazon RDS documentation for io2 storage for Multi-AZ DB
clusters
- `service/snowball`: Updates service documentation
- Doc-only update for change to EKS-Anywhere ordering.
- `service/wafv2`: Updates service API and documentation
- `service/workspaces`: Updates service documentation
- Added note for user decoupling
###
[`v1.50.33`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15033-2024-03-06)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.32...v1.50.33)
\===
##### Service Client Updates
- `service/dynamodb`: Updates service API, documentation, waiters,
paginators, and examples
- Doc only updates for DynamoDB documentation
- `service/imagebuilder`: Updates service API and documentation
- `service/mwaa`: Updates service documentation
- `service/rds`: Updates service API, documentation, waiters,
paginators, and examples
- Updated the input of CreateDBCluster and ModifyDBCluster to support
setting CA certificates. Updated the output of DescribeDBCluster to show
current CA certificate setting value.
- `service/redshift`: Updates service documentation
- Update for documentation only. Covers port ranges, definition updates
for data sharing, and definition updates to cluster-snapshot
documentation.
- `service/verifiedpermissions`: Updates service API and documentation
###
[`v1.50.32`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15032-2024-03-05)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.31...v1.50.32)
\===
##### Service Client Updates
- `service/apigateway`: Updates service documentation
- Documentation updates for Amazon API Gateway
- `service/chatbot`: Updates service API
- `service/organizations`: Adds new service
- This release contains an endpoint addition
- `service/sesv2`: Updates service API and documentation
###
[`v1.50.31`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15031-2024-03-04)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.30...v1.50.31)
\===
##### Service Client Updates
- `service/cloudformation`: Updates service API and documentation
- Add DetailedStatus field to DescribeStackEvents and DescribeStacks
APIs
- `service/fsx`: Updates service API and documentation
- `service/organizations`: Updates service API and documentation
- Documentation update for AWS Organizations
###
[`v1.50.30`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15030-2024-03-01)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.29...v1.50.30)
\===
##### Service Client Updates
- `service/accessanalyzer`: Updates service documentation
- `service/autoscaling`: Updates service documentation
- With this release, Amazon EC2 Auto Scaling groups, EC2 Fleet, and Spot
Fleet improve the default price protection behavior of attribute-based
instance type selection of Spot Instances, to consistently select from a
wide range of instance types.
- `service/ec2`: Updates service documentation
- With this release, Amazon EC2 Auto Scaling groups, EC2 Fleet, and Spot
Fleet improve the default price protection behavior of attribute-based
instance type selection of Spot Instances, to consistently select from a
wide range of instance types.
###
[`v1.50.29`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15029-2024-02-29)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.28...v1.50.29)
\===
##### Service Client Updates
- `service/docdb-elastic`: Updates service API and documentation
- `service/eks`: Updates service API
- `service/migrationhuborchestrator`: Updates service API and
documentation
- `service/models.lex.v2`: Updates service API and documentation
- `service/quicksight`: Updates service API and documentation
- TooltipTarget for Combo chart visuals; ColumnConfiguration limit
increase to 2000; Documentation Update
- `service/sagemaker`: Updates service API and documentation
- Adds support for ModelDataSource in Model Packages to support unzipped
models. Adds support to specify SourceUri for models which allows
registration of models without mandating a container for hosting. Using
SourceUri, customers can decouple the model from hosting information
during registration.
- `service/securitylake`: Updates service API and documentation
###
[`v1.50.28`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15028-2024-02-28)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.50.27...v1.50.28)
\===
##### Service Client Updates
- `service/batch`: Updates service API and documentation
- This release adds Batch support for configuration of multicontainer
jobs in ECS, Fargate, and EKS. This support is available for all types
of jobs, including both array jobs and multi-node parallel jobs.
- `service/bedrock-agent-runtime`: Updates service API and documentation
- `service/ce`: Updates service API and documentation
- `service/ec2`: Updates service API and documentation
- This release increases the range of MaxResults for
GetNetworkInsightsAccessScopeAnalysisFindings to 1,000.
- `service/iot`: Updates service API and documentation
- This release reduces the maximum results returned per query invocation
from 500 to 100 for the SearchIndex API. This change has no implications
as long as the API is invoked until the nextToken is NULL.
- `service/wafv2`: Updates service API and documentation
aws/aws-sdk-go-v2 (github.com/aws/aws-sdk-go-v2)
###
[`v1.26.0`](https://togithub.com/aws/aws-sdk-go-v2/compare/v1.25.1...v1.26.0)
[Compare
Source](https://togithub.com/aws/aws-sdk-go-v2/compare/v1.25.3...v1.26.0)
###
[`v1.25.3`](https://togithub.com/aws/aws-sdk-go-v2/compare/v1.25.2...v1.25.3)
[Compare
Source](https://togithub.com/aws/aws-sdk-go-v2/compare/v1.25.2...v1.25.3)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [chore] [network scraper] Bound flaky test (#31898)
For some reason github runners occasionally see 13 instead of 12 metrics
See
[31001](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31001)
* [chore] Updates docker api to version v25 from v24, testcontainers-go from v0.20.0 to v0.29.1 (#31632)
**Description:**
I don't have permissions to directly add commits to the update PR so
running it here
-
[PR](https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31345)
-
[Issue](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31087)
* [fileexporter] Fix wrong marshaler type judgment (#31902)
**Description:** Fix wrong marshaler type judgment for `logs` and
`metrics` marshaler
Signed-off-by: Jared Tan
* [cmd/telemetrygen] Fix logs telemetry attributes key mapping (#31309)
**Description:**
This PR addresses a bug in the telemetry attribute key mapping for the
logs. Previously, the attribute key was incorrectly mapped to the value
property, leading to incorrect data representation on the exported logs.
**Changes:**
Corrected the attribute key mapping logic to ensure the key is mapped to
the key, not the value.
**Testing:**
The changes have been thoroughly tested under various scenarios to
ensure the bug has been fixed.
---------
Co-authored-by: Pablo Baeyens
* [carbonreceiver]: Do not report fatal error when closed normally (#31913)
Signed-off-by: Bogdan Drutu
* [chore][receiver/k8sevent] Enable goleak check (#31917)
**Description:**
Enable goleak check to help ensure no goroutines are being leaked. This
is a test only change, a test was missing a shutdown call.
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30438
**Testing:**
Existing tests are passing, as well as added goleak check.
* [exporter/clickhouse] ClickHouse replication / engine configuration (#31920)
## Originally submitted by @alex1704 in #26599.
Their original PR was closed as stale, so I have updated it to the
latest branch and made some improvements to code + tests.
**Description:**
- Add config option for setting `ON CLUSTER` on tables.
- Add config option for setting the table `ENGINE`.
These changes add the ability to set up [replication for fault
tolerance](https://clickhouse.com/docs/en/architecture/replication).
**Testing:**
Tests for data replication were added to:
- `exporter_logs_test.go` (`TestLogsTableCreationOnCluster`)
- `exporter_metrics_test.go` (`TestMetricsTablesCreationOnCluster`)
- `exporter_traces_test.go` (`TestTracesTablesCreationOnCluster`)
Additional tests were added for checking how `TableEngine` is parsed in
`config_test.go` (`TestTableEngineConfigParsing`)
**Documentation:**
Two new fields were added to the config:
```go
TableEngine TableEngine `mapstructure:"table_engine"`
ClusterName string `mapstructure:"cluster_name"`
```
TableEngine definition
```go
type TableEngine struct {
Name string `mapstructure:"name"`
Params string `mapstructure:"params"`
}
```
`table_engine` allows overriding the `ENGINE` in the table creation SQL.
Defaults to `MergeTree()`.
`ClusterName` allows optionally adding `ON CLUSTER` in the table
creation SQL. Disabled by default.
Example config for enabling [replication for fault
tolerance](https://clickhouse.com/docs/en/architecture/replication):
```yml
exporters:
clickhouse:
endpoint: tcp://127.0.0.1:9000
cluster_name: cluster_1
table_engine:
name: ReplicatedMergeTree
```
Link to tracking Issue:
Resolves
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/24649
* [connector/grafanacloud] add new connector component (#31726)
**Description:**
This adds a new connector for generating metrics from traces for use in
Grafana Cloud.
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31647
**Testing:** unit testing
**Documentation:** README.md with example configuration.
---------
Signed-off-by: Robbie Lankford
Co-authored-by: Curtis Robert
Co-authored-by: Juraci Paixão Kröhling
* [connector/datadog] Fix data race (#31921)
**Description:**
Fixes data race issue introduced in the prior PR for container Tags.
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31642
**Link to tracking Issue:**
**Testing:**
**Documentation:**
* [chore] lint fixes in cmd/telemetrygen & cmd/opampsupervisor (#31932)
**Description:**
- Linting Errors:
[https://productionresultssa5.blob.core.windows.net/actions-results/44e4093a-f4c1-4e35-af4f-d630ea9b8d68/workflow-job-run-071cf28a-9760-544e-287f-c0f9ae5a03a4/logs/job/job-logs.txt?rsct=text%2Fplain&se=2024-03-25T12%3A45%3A21Z&sig=fRzhKwEpzDQDQZyUYwvEY%2BhkcFWOD3IY0EeCOE47AeU%3D&sp=r&spr=https&sr=b&st=2024-03-25T12%3A35%3A16Z&sv=2021-12-02](url)
- some linting errors will be fixed by
#30237
**Link to tracking Issue:**
- #31240
**Testing:**
**Documentation:**
* [exporter/signalfx] Fix memory leaks (#31772)
**Description:**
Changes in PR:
1. Add correlation client Shutdown function that blocks on the
waitgroup. This is the main fix of this PR that should fix the leaking
goroutines.
2. Re-organize the shutdown process of the apm client correlation test
suite to properly synchronize the shutting down process.
3. Fix typo
4. Only block request sender until context is cancelled. The request
processor is shutdown when the context is cancelled, so this would
result in `Shutdown` waiting forever, since the request would never be
processed.
5. Enable goleak in some more packages.
**Note**: This is contains the exact same contents as
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/30887,
but change number 4 is new, and should resolve the test issue the
original PR was causing.
**Link to tracking Issue:**
Resolves
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30864
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30438
**Testing:**
All existing tests are passing, as well as added goleak checks. I'm
going to run this a number of times to try to help ensure it's not flaky
anymore.
* [elasticsearchexporter] When timestamp is not set, use observedTimestamp overwrites the timestamp (#31844)
**Description:**
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11752
---------
Signed-off-by: Jared Tan
Co-authored-by: Andrzej Stencel
* [chore] Update otel (#31937)
Signed-off-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
* [fileexporter] clean up unused changlog (#31903)
**Description:** follow up
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31902
and resolve
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31902#discussion_r1535037293
Signed-off-by: Jared Tan
* [chore] fix lint in cmd/opampsupervisor (#31939)
**Description:** should be the last one
**Link to tracking Issue:**
- #31240
* Update prometheus to v0.50.1 and remove enable_protobuf_negotiation (#30934)
Fixes
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30883
Prometheus PR we need to adapt to:
https://github.com/prometheus/prometheus/pull/12738
The configuration option we were using to enable protobuf has been
removed, so this PR removes the `enable_protobuf_negotiation`
configuration on the prometheus receiver. In its place, the prometheus
server now has a config option, `scrape_protocols`, which specifies
which protocols it uses, including protobuf. Use
`config.global.scrape_protocols = [ PrometheusProto,
OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText0.0.4 ]` to
enable protobuf scraping instead of using our option.
Prometheus PR we need to adapt to:
https://github.com/prometheus/prometheus/pull/12958
We now need to pass a prometheus.Registerer to the scrape manager to
collect metrics about scrapes. This PR disables the collection of these
scrape metrics from the prometheus server. We did not use the default
registry, so we were previously collecting these metrics and never
exposing them. This PR passes a no-op registerer to prevent using memory
to store those metrics. In the future, we can consider using the
prometheus -> OTel bridge to export these with the self-observability
pipeline.
* [receiver/awss3receiver] Introduce the AWS S3 Receiver (#31710)
**Description:** Initial skeleton implementation of the AWS S3 receiver
described in issue #30750.
Full implementation will follow in future PRs.
**Link to tracking Issue:** #30750
**Testing:** -
**Documentation:** Initial README added.
* [receiver/postgresql] Bump postgresqlreceiver.preciselagmetrics gate to beta (#31220)
* [chore][exporter/prometheusexporter] Enable goleak check (#30965)
**Description:**
This enables the `goleak` package for testing the Prometheus exporter.
This helps to ensure no goroutines are leaked by this component. This is
a test only change, the only updates are making sure all tests close the
response body of `Get` calls.
**Link to tracking Issue:**
#30438
**Testing:**
All tests are passing, including added `goleak` test.
* Fixed bug with batch's creation parameters (#31657)
Description:
When a new Batch is created, it's slice capacity for the number of
records should be set to the maximum number of records, not the max
record size, an error that can cause memory to be allocated frequently.
[awskinesisexporter/internal/batch/batch.go#L76-L82](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/41b5f81343828a37f709acf7788b08eb2c66730e/exporter/awskinesisexporter/internal/batch/batch.go#L76-L82)
[awskinesisexporter/internal/batch/batch.go#L28-L29](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/41b5f81343828a37f709acf7788b08eb2c66730e/exporter/awskinesisexporter/internal/batch/batch.go#L28-L29)
This is a copy of the original PR with the same fix found here:
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/20862
I've simply made the change to the tests that was requested in the
original PR.
Link to tracking Issue:
Fixes
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/20914
* [chore] Update dependencies to fix the build (#31942)
Follow-up to merge
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31710
* Update module github.com/ClickHouse/clickhouse-go/v2 to v2.22.4 (#31949)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/ClickHouse/clickhouse-go/v2](https://togithub.com/ClickHouse/clickhouse-go)
| `v2.22.2` -> `v2.22.4` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.2/v2.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.2/v2.22.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
ClickHouse/clickhouse-go
(github.com/ClickHouse/clickhouse-go/v2)
###
[`v2.22.4`](https://togithub.com/ClickHouse/clickhouse-go/blob/HEAD/CHANGELOG.md#v2224-2024-03-25----Release-notes-generated-using-configuration-in-githubreleaseyml-at-main---)
[Compare
Source](https://togithub.com/ClickHouse/clickhouse-go/compare/v2.22.3...v2.22.4)
#### What's Changed
##### Fixes 🐛
- Fix column name with parantheses handle in prepare batch by
[@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1252](https://togithub.com/ClickHouse/clickhouse-go/pull/1252)
##### Other Changes 🛠
- Fix TestBatchAppendRows work different on cloud by
[@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1251](https://togithub.com/ClickHouse/clickhouse-go/pull/1251)
**Full Changelog**:
https://github.com/ClickHouse/clickhouse-go/compare/v2.22.3...v2.22.4
###
[`v2.22.3`](https://togithub.com/ClickHouse/clickhouse-go/blob/HEAD/CHANGELOG.md#v2223-2024-03-25----Release-notes-generated-using-configuration-in-githubreleaseyml-at-main---)
[Compare
Source](https://togithub.com/ClickHouse/clickhouse-go/compare/v2.22.2...v2.22.3)
#### What's Changed
##### Fixes 🐛
- Fix panic on tuple scan on \[]any by
[@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1249](https://togithub.com/ClickHouse/clickhouse-go/pull/1249)
##### Other Changes 🛠
- Error channel deadlock fix test case by
[@threadedstream](https://togithub.com/threadedstream) in
[https://github.com/ClickHouse/clickhouse-go/pull/1239](https://togithub.com/ClickHouse/clickhouse-go/pull/1239)
- Add a test case for
[#1127](https://togithub.com/ClickHouse/clickhouse-go/issues/1127)
by [@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1242](https://togithub.com/ClickHouse/clickhouse-go/pull/1242)
- Run cloud/head jobs when label by
[@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1250](https://togithub.com/ClickHouse/clickhouse-go/pull/1250)
**Full Changelog**:
https://github.com/ClickHouse/clickhouse-go/compare/v2.22.2...v2.22.3
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update All github.com/aws packages (#31948)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/aws/aws-sdk-go](https://togithub.com/aws/aws-sdk-go) |
`v1.51.3` -> `v1.51.7` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go/v1.51.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go/v1.51.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go/v1.51.3/v1.51.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go/v1.51.3/v1.51.7?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/config](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.27.8` -> `v1.27.9` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.8/v1.27.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.8/v1.27.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/credentials](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.17.8` -> `v1.17.9` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.8/v1.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.8/v1.17.9?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
aws/aws-sdk-go (github.com/aws/aws-sdk-go)
###
[`v1.51.7`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1517-2024-03-25)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.6...v1.51.7)
\===
##### Service Client Updates
- `service/codebuild`: Updates service API and documentation
- Supporting GitLab and GitLab Self Managed as source types in AWS
CodeBuild.
- `service/ec2`: Updates service API and documentation
- Added support for ModifyInstanceMetadataDefaults and
GetInstanceMetadataDefaults to set Instance Metadata Service account
defaults
- `service/ecs`: Updates service documentation
- Documentation only update for Amazon ECS.
- `service/emr-containers`: Updates service API
- `service/globalaccelerator`: Updates service API and documentation
- `service/medialive`: Updates service API and documentation
- Exposing TileMedia H265 options
- `service/sagemaker`: Updates service API
- Introduced support for the following new instance types on SageMaker
Studio for JupyterLab and CodeEditor applications: m6i, m6id, m7i, c6i,
c6id, c7i, r6i, r6id, r7i, and p5
###
[`v1.51.6`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1516-2024-03-22)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.5...v1.51.6)
\===
##### Service Client Updates
- `service/firehose`: Updates service documentation
- Updates Amazon Firehose documentation for message regarding Enforcing
Tags IAM Policy.
- `service/kendra`: Updates service documentation
- Documentation update, March 2024. Corrects some docs for Amazon
Kendra.
- `service/pricing`: Updates service API and documentation
- `service/rolesanywhere`: Updates service API and documentation
- `service/securityhub`: Updates service API and documentation
###
[`v1.51.5`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1515-2024-03-21)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.4...v1.51.5)
\===
##### Service Client Updates
- `service/codeartifact`: Updates service API, documentation, and
paginators
###
[`v1.51.4`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1514-2024-03-20)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.3...v1.51.4)
\===
##### Service Client Updates
- `service/accessanalyzer`: Updates service API and documentation
- `service/codebuild`: Updates service documentation
- This release adds support for new webhook events (RELEASED and
PRERELEASED) and filter types (TAG_NAME and RELEASE_NAME).
- `service/connect`: Updates service API and documentation
- `service/dynamodb`: Updates service API, documentation, waiters,
paginators, and examples
- This release introduces 3 new APIs ('GetResourcePolicy',
'PutResourcePolicy' and 'DeleteResourcePolicy') and modifies the
existing 'CreateTable' API for the resource-based policy support. It
also modifies several APIs to accept a 'TableArn' for the 'TableName'
parameter.
- `service/managedblockchain-query`: Updates service API and
documentation
- `service/savingsplans`: Updates service API and documentation
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common to v1.0.884 (#31952)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common](https://togithub.com/tencentcloud/tencentcloud-sdk-go)
| `v1.0.857` -> `v1.0.884` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.884?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.884?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.857/v1.0.884?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.857/v1.0.884?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
tencentcloud/tencentcloud-sdk-go
(github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common)
###
[`v1.0.884`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10884)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.883...v1.0.884)
#### 主机安全(cwp) 版本:2018-02-28
##### 第 110 次发布
发布时间:2024-03-25 01:12:24
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[AssetMachineBaseInfo](https://cloud.tencent.com/document/api/296/19867#AssetMachineBaseInfo)
- 新增成员:CpuLoadNum
- **修改成员**:Quuid, Uuid, MachineIp,
MachineName, OsInfo, Cpu, MemSize, MemLoad, DiskSize, DiskLoad,
PartitionCount, MachineWanIp, ProjectId, CpuSize, CpuLoad, Tag,
UpdateTime, IsNew, FirstTime, MachineExtraInfo
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 158 次发布
发布时间:2024-03-25 01:16:14
本次发布包含了以下内容:
改善已有的文档。
新增数据结构:
-
[CreateResultPageConfig](https://cloud.tencent.com/document/api/1323/70369#CreateResultPageConfig)
修改数据结构:
-
[ApproverOption](https://cloud.tencent.com/document/api/1323/70369#ApproverOption)
- 新增成员:CanEditApprover
-
[CreateFlowOption](https://cloud.tencent.com/document/api/1323/70369#CreateFlowOption)
- 新增成员:ForbidAddApprover, ForbidEditFlowProperties, HideComponentTypes,
ShowComponentTypes, ResultPageConfig
#### 人脸核身(faceid) 版本:2018-03-01
##### 第 71 次发布
发布时间:2024-03-25 01:16:50
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[GetEidTokenConfig](https://cloud.tencent.com/document/api/1007/41958#GetEidTokenConfig)
- 新增成员:MouthOpenRecognition
#### 全球应用加速(gaap) 版本:2018-05-29
##### 第 43 次发布
发布时间:2024-03-25 01:16:59
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[HTTPSListener](https://cloud.tencent.com/document/api/608/37023#HTTPSListener)
- 新增成员:TLSSupportVersion, TLSCiphers
-
[ProxyGroupDetail](https://cloud.tencent.com/document/api/608/37023#ProxyGroupDetail)
- 新增成员:IsSupportTLSChoice
-
[ProxyInfo](https://cloud.tencent.com/document/api/608/37023#ProxyInfo)
- 新增成员:IsSupportTLSChoice
###
[`v1.0.883`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10883)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.882...v1.0.883)
#### 主机安全(cwp) 版本:2018-02-28
##### 第 109 次发布
发布时间:2024-03-22 01:11:57
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [DescribeBanStatus](https://cloud.tencent.com/document/api/296/60944)
- 新增出参:OpenSmartMode
- [ModifyBanStatus](https://cloud.tencent.com/document/api/296/60942)
- 新增入参:OpenSmartMode
修改数据结构:
-
[BruteAttackInfo](https://cloud.tencent.com/document/api/296/19867#BruteAttackInfo)
- 新增成员:AttackStatusDesc, BanExpiredTime
#### 高性能应用服务(hai) 版本:2023-08-12
##### 第 7 次发布
发布时间:2024-03-22 01:16:13
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[Instance](https://cloud.tencent.com/document/api/1721/101518#Instance)
- 新增成员:OSType
#### 实时音视频(trtc) 版本:2019-07-22
##### 第 67 次发布
发布时间:2024-03-22 01:25:05
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [DescribeWebRecord](https://cloud.tencent.com/document/api/647/104542)
- [StartWebRecord](https://cloud.tencent.com/document/api/647/104541)
- [StopWebRecord](https://cloud.tencent.com/document/api/647/104540)
新增数据结构:
-
[WebRecordVideoParams](https://cloud.tencent.com/document/api/647/44055#WebRecordVideoParams)
###
[`v1.0.882`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10882)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.881...v1.0.882)
#### 云硬盘(cbs) 版本:2017-03-12
##### 第 54 次发布
发布时间:2024-03-21 01:09:20
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[ModifyDisksRenewFlag](https://cloud.tencent.com/document/api/362/15668)
- 新增入参:AutoRenewPeriod
#### 数据湖计算 DLC(dlc) 版本:2021-01-25
##### 第 82 次发布
发布时间:2024-03-21 01:14:28
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[DataEngineInfo](https://cloud.tencent.com/document/api/1342/53778#DataEngineInfo)
- 新增成员:EngineNetworkId
#### 实时互动-教育版(lcic) 版本:2022-08-17
##### 第 54 次发布
发布时间:2024-03-21 01:19:23
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateRoom](https://cloud.tencent.com/document/api/1639/80942)
- [ModifyRoom](https://cloud.tencent.com/document/api/1639/86030)
修改数据结构:
- [RoomInfo](https://cloud.tencent.com/document/api/1639/81423#RoomInfo)
#### 云直播CSS(live) 版本:2018-08-01
##### 第 121 次发布
发布时间:2024-03-21 01:19:47
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeLiveWatermarks](https://cloud.tencent.com/document/api/267/30152)
- 新增入参:Name, PageNo, PageSize
#### 微服务引擎(tse) 版本:2020-12-07
##### 第 62 次发布
发布时间:2024-03-21 01:28:04
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeGovernanceServiceContracts](https://cloud.tencent.com/document/api/1364/104402)
- **修改入参**:Offset, Limit
###
[`v1.0.881`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10881)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.880...v1.0.881)
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 157 次发布
发布时间:2024-03-19 11:18:23
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeCancelFlowsTask](https://cloud.tencent.com/document/api/1323/104494)
修改接口:
-
[CreateIntegrationEmployees](https://cloud.tencent.com/document/api/1323/81117)
- 新增入参:Endpoint
-
[UpdateIntegrationEmployees](https://cloud.tencent.com/document/api/1323/89457)
- 新增入参:Endpoint
新增数据结构:
-
[CancelFailureFlow](https://cloud.tencent.com/document/api/1323/70369#CancelFailureFlow)
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 160 次发布
发布时间:2024-03-20 01:16:49
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeCancelFlowsTask](https://cloud.tencent.com/document/api/1420/104511)
新增数据结构:
-
[CancelFailureFlow](https://cloud.tencent.com/document/api/1420/61525#CancelFailureFlow)
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 腾讯云可观测平台(monitor) 版本:2018-07-24
##### 第 108 次发布
发布时间:2024-03-20 01:20:37
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeAlarmSmsQuota](https://cloud.tencent.com/document/api/248/104513)
-
[DescribeMonitorResourceInfo](https://cloud.tencent.com/document/api/248/104515)
-
[DescribePhoneAlarmFlowTotalCount](https://cloud.tencent.com/document/api/248/104512)
新增数据结构:
-
[DescribeAlarmSmsQuotaQuota](https://cloud.tencent.com/document/api/248/30354#DescribeAlarmSmsQuotaQuota)
#### 容器服务(tke) 版本:2022-05-01
#### 容器服务(tke) 版本:2018-05-25
##### 第 169 次发布
发布时间:2024-03-20 01:27:36
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[PodLimitsByType](https://cloud.tencent.com/document/api/457/31866#PodLimitsByType)
- 新增成员:TKESubENI
#### Web 应用防火墙(waf) 版本:2018-01-25
##### 第 82 次发布
发布时间:2024-03-20 01:31:28
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[AddSpartaProtection](https://cloud.tencent.com/document/api/627/72689)
- 新增入参:ProxyBuffer
- **修改入参**:Ports, IsKeepAlive, InstanceID
-
[DescribeAttackOverview](https://cloud.tencent.com/document/api/627/87744)
- 新增出参:ApiRiskEventCircleCount
-
[DescribeIpAccessControl](https://cloud.tencent.com/document/api/627/72645)
- 新增入参:RuleId
- 新增出参:UsedTotal
- [ModifyAccessPeriod](https://cloud.tencent.com/document/api/627/59005)
- **修改入参**:TopicId
-
[ModifySpartaProtection](https://cloud.tencent.com/document/api/627/94309)
- 新增入参:ProxyBuffer
- **修改入参**:DomainId, InstanceID
修改数据结构:
-
[BatchIpAccessControlItem](https://cloud.tencent.com/document/api/627/53609#BatchIpAccessControlItem)
- 新增成员:RuleId, IpList
-
[DomainInfo](https://cloud.tencent.com/document/api/627/53609#DomainInfo)
- 新增成员:AccessStatus
-
[DomainsPartInfo](https://cloud.tencent.com/document/api/627/53609#DomainsPartInfo)
- 新增成员:ProxyBuffer
-
[IpAccessControlItem](https://cloud.tencent.com/document/api/627/53609#IpAccessControlItem)
- 新增成员:RuleId, IpList
###
[`v1.0.880`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10880)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.879...v1.0.880)
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 156 次发布
发布时间:2024-03-19 01:14:56
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateBatchCancelFlowUrl](https://cloud.tencent.com/document/api/1323/78262)
- 新增出参:TaskId
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 159 次发布
发布时间:2024-03-19 01:15:14
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[ChannelBatchCancelFlows](https://cloud.tencent.com/document/api/1420/80391)
- 新增出参:TaskId
-
[ChannelCreateBatchCancelFlowUrl](https://cloud.tencent.com/document/api/1420/78264)
- 新增出参:TaskId
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 云直播CSS(live) 版本:2018-08-01
##### 第 120 次发布
发布时间:2024-03-19 01:18:08
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateLiveTranscodeRule](https://cloud.tencent.com/document/api/267/32647)
- 新增入参:StreamName
###
[`v1.0.879`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10879)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.878...v1.0.879)
#### 云直播CSS(live) 版本:2018-08-01
##### 第 119 次发布
发布时间:2024-03-18 01:17:44
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateLiveTranscodeRule](https://cloud.tencent.com/document/api/267/32647)
- **删除入参**:StreamName
#### 云数据库 MongoDB(mongodb) 版本:2019-07-25
##### 第 37 次发布
发布时间:2024-03-18 01:18:19
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[ModifyDBInstanceNetworkAddress](https://cloud.tencent.com/document/api/240/71918)
- 新增出参:FlowId
#### 云数据库 MongoDB(mongodb) 版本:2018-04-08
#### 微服务引擎(tse) 版本:2020-12-07
##### 第 61 次发布
发布时间:2024-03-15 14:54:19
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [CreateConfigFile](https://cloud.tencent.com/document/api/1364/104363)
-
[CreateConfigFileGroup](https://cloud.tencent.com/document/api/1364/104368)
-
[CreateGovernanceAlias](https://cloud.tencent.com/document/api/1364/104385)
-
[CreateGovernanceNamespaces](https://cloud.tencent.com/document/api/1364/104408)
-
[CreateGovernanceServices](https://cloud.tencent.com/document/api/1364/104384)
-
[CreateOrUpdateConfigFileAndRelease](https://cloud.tencent.com/document/api/1364/104362)
-
[DeleteConfigFileGroup](https://cloud.tencent.com/document/api/1364/104367)
-
[DeleteConfigFileReleases](https://cloud.tencent.com/document/api/1364/104361)
-
[DeleteConfigFiles](https://cloud.tencent.com/document/api/1364/104360)
-
[DeleteGovernanceAliases](https://cloud.tencent.com/document/api/1364/104383)
-
[DeleteGovernanceInstancesByHost](https://cloud.tencent.com/document/api/1364/104400)
-
[DeleteGovernanceNamespaces](https://cloud.tencent.com/document/api/1364/104407)
-
[DeleteGovernanceServices](https://cloud.tencent.com/document/api/1364/104382)
-
[DescribeAllConfigFileTemplates](https://cloud.tencent.com/document/api/1364/104348)
-
[DescribeConfigFile](https://cloud.tencent.com/document/api/1364/104359)
-
[DescribeConfigFileGroups](https://cloud.tencent.com/document/api/1364/104366)
-
[DescribeConfigFileRelease](https://cloud.tencent.com/document/api/1364/104358)
-
[DescribeConfigFileReleaseHistories](https://cloud.tencent.com/document/api/1364/104357)
-
[DescribeConfigFileReleaseVersions](https://cloud.tencent.com/document/api/1364/104356)
-
[DescribeConfigFileReleases](https://cloud.tencent.com/document/api/1364/104355)
-
[DescribeConfigFiles](https://cloud.tencent.com/document/api/1364/104354)
-
[DescribeConfigFilesByGroup](https://cloud.tencent.com/document/api/1364/104353)
-
[DescribeGovernanceAliases](https://cloud.tencent.com/document/api/1364/104381)
-
[DescribeGovernanceNamespaces](https://cloud.tencent.com/document/api/1364/104406)
-
[DescribeGovernanceServiceContractVersions](https://cloud.tencent.com/document/api/1364/104403)
-
[DescribeGovernanceServiceContracts](https://cloud.tencent.com/document/api/1364/104402)
-
[DescribeGovernanceServices](https://cloud.tencent.com/document/api/1364/104380)
-
[ModifyConfigFileGroup](https://cloud.tencent.com/document/api/1364/104365)
-
[ModifyConfigFiles](https://cloud.tencent.com/document/api/1364/104352)
-
[ModifyGovernanceAlias](https://cloud.tencent.com/document/api/1364/104379)
-
[ModifyGovernanceNamespaces](https://cloud.tencent.com/document/api/1364/104405)
-
[ModifyGovernanceServices](https://cloud.tencent.com/document/api/1364/104378)
-
[PublishConfigFiles](https://cloud.tencent.com/document/api/1364/104351)
-
[RollbackConfigFileReleases](https://cloud.tencent.com/document/api/1364/104350)
新增数据结构:
-
[ConfigFile](https://cloud.tencent.com/document/api/1364/54942#ConfigFile)
-
[ConfigFileGroup](https://cloud.tencent.com/document/api/1364/54942#ConfigFileGroup)
-
[ConfigFileGroupTag](https://cloud.tencent.com/document/api/1364/54942#ConfigFileGroupTag)
-
[ConfigFilePublishInfo](https://cloud.tencent.com/document/api/1364/54942#ConfigFilePublishInfo)
-
[ConfigFileRelease](https://cloud.tencent.com/document/api/1364/54942#ConfigFileRelease)
-
[ConfigFileReleaseDeletion](https://cloud.tencent.com/document/api/1364/54942#ConfigFileReleaseDeletion)
-
[ConfigFileReleaseHistory](https://cloud.tencent.com/document/api/1364/54942#ConfigFileReleaseHistory)
-
[ConfigFileTag](https://cloud.tencent.com/document/api/1364/54942#ConfigFileTag)
-
[ConfigFileTemplate](https://cloud.tencent.com/document/api/1364/54942#ConfigFileTemplate)
-
[GovernanceAlias](https://cloud.tencent.com/document/api/1364/54942#GovernanceAlias)
-
[GovernanceInterfaceDescription](https://cloud.tencent.com/document/api/1364/54942#GovernanceInterfaceDescription)
-
[GovernanceNamespace](https://cloud.tencent.com/document/api/1364/54942#GovernanceNamespace)
-
[GovernanceNamespaceInput](https://cloud.tencent.com/document/api/1364/54942#GovernanceNamespaceInput)
-
[GovernanceService](https://cloud.tencent.com/document/api/1364/54942#GovernanceService)
-
[GovernanceServiceContract](https://cloud.tencent.com/document/api/1364/54942#GovernanceServiceContract)
-
[GovernanceServiceContractVersion](https://cloud.tencent.com/document/api/1364/54942#GovernanceServiceContractVersion)
-
[GovernanceServiceInput](https://cloud.tencent.com/document/api/1364/54942#GovernanceServiceInput)
-
[ReleaseVersion](https://cloud.tencent.com/document/api/1364/54942#ReleaseVersion)
修改数据结构:
-
[GovernanceInstance](https://cloud.tencent.com/document/api/1364/54942#GovernanceInstance)
- 新增成员:InstanceVersion, HealthStatus, Comment
#### Web 应用防火墙(waf) 版本:2018-01-25
##### 第 81 次发布
发布时间:2024-03-18 01:26:30
本次发布包含了以下内容:
改善已有的文档。
**删除接口**:
- DescribeWafInfo
**删除数据结构**:
- ClbHostResult
- ClbHostsParams
###
[`v1.0.878`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10878)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.877...v1.0.878)
#### 日志服务(cls) 版本:2020-10-16
##### 第 86 次发布
发布时间:2024-03-15 01:10:50
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateKafkaRecharge](https://cloud.tencent.com/document/api/614/94448)
- **修改入参**:LogRechargeRule
#### TDSQL-C MySQL 版(cynosdb) 版本:2019-01-07
##### 第 81 次发布
发布时间:2024-03-15 01:12:26
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [AddInstances](https://cloud.tencent.com/document/api/1003/48088)
- 新增入参:UpgradeProxy
- [UpgradeInstance](https://cloud.tencent.com/document/api/1003/48077)
- 新增入参:UpgradeProxy
新增数据结构:
-
[UpgradeProxy](https://cloud.tencent.com/document/api/1003/48097#UpgradeProxy)
#### 弹性 MapReduce(emr) 版本:2019-01-03
##### 第 62 次发布
发布时间:2024-03-15 01:14:37
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[StartStopServiceOrMonitor](https://cloud.tencent.com/document/api/589/90011)
- 新增入参:StopParams
新增数据结构:
- [Arg](https://cloud.tencent.com/document/api/589/33981#Arg)
-
[StopParams](https://cloud.tencent.com/document/api/589/33981#StopParams)
修改数据结构:
-
[StrategyConfig](https://cloud.tencent.com/document/api/589/33981#StrategyConfig)
- 新增成员:Args
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 155 次发布
发布时间:2024-03-15 01:14:52
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[RenewAutoSignLicense](https://cloud.tencent.com/document/api/1323/104346)
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 158 次发布
发布时间:2024-03-15 01:15:07
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[ChannelRenewAutoSignLicense](https://cloud.tencent.com/document/api/1420/104347)
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 实时互动-教育版(lcic) 版本:2022-08-17
##### 第 53 次发布
发布时间:2024-03-15 01:17:42
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateRoom](https://cloud.tencent.com/document/api/1639/80942)
- 新增入参:RecordScene, RecordLang
- [DescribeRoom](https://cloud.tencent.com/document/api/1639/80941)
- 新增出参:RecordScene, RecordLang
- [ModifyRoom](https://cloud.tencent.com/document/api/1639/86030)
- 新增入参:RecordScene, RecordLang
修改数据结构:
- [RoomInfo](https://cloud.tencent.com/document/api/1639/81423#RoomInfo)
- 新增成员:RecordScene, RecordLang
- [RoomItem](https://cloud.tencent.com/document/api/1639/81423#RoomItem)
- 新增成员:RecordScene, RecordLang
#### 云数据库 SQL Server(sqlserver) 版本:2018-03-28
##### 第 59 次发布
发布时间:2024-03-15 01:20:49
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeCollationTimeZone](https://cloud.tencent.com/document/api/238/101735)
- 新增入参:DBVersion
#### T-Sec-安心平台(RP)(trp) 版本:2021-05-15
##### 第 33 次发布
发布时间:2024-03-15 01:24:38
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
- [Quota](https://cloud.tencent.com/document/api/1458/75030#Quota)
- 新增成员:AigcTextQuota, AigcImageQuota
###
[`v1.0.877`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10877)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.876...v1.0.877)
#### 日志服务(cls) 版本:2020-10-16
##### 第 85 次发布
发布时间:2024-03-14 01:11:38
本次发布包含了以下内容:
改善已有的文档。
**删除接口**:
- DescribeKafkaUser
#### DNSPod(dnspod) 版本:2021-03-23
##### 第 30 次发布
发布时间:2024-03-14 01:14:21
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeRecordLineCategoryList](https://cloud.tencent.com/document/api/1427/104320)
修改接口:
- [CreateRecord](https://cloud.tencent.com/document/api/1427/56180)
- 新增入参:DnssecConflictMode
- [ModifyRecord](https://cloud.tencent.com/document/api/1427/56157)
- 新增入参:DnssecConflictMode
新增数据结构:
- [LineItem](https://cloud.tencent.com/document/api/1427/56185#LineItem)
#### 数据传输服务(dts) 版本:2021-12-06
##### 第 25 次发布
发布时间:2024-03-14 01:15:02
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
- [DBInfo](https://cloud.tencent.com/document/api/571/82108#DBInfo)
- 新增成员:SetId
#### 数据传输服务(dts) 版本:2018-03-30
#### 弹性 MapReduce(emr) 版本:2019-01-03
##### 第 61 次发布
发布时间:2024-03-14 01:15:43
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeHiveQueries](https://cloud.tencent.com/document/api/589/94487)
- 新增入参:State, EndTimeGte, EndTimeLte
-
[DescribeImpalaQueries](https://cloud.tencent.com/document/api/589/94486)
- 新增入参:State, EndTimeGte, EndTimeLte
#### Elasticsearch Service(es) 版本:2018-04-16
##### 第 54 次发布
发布时间:2024-03-14 01:15:53
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CheckMigrateIndexMetaData](https://cloud.tencent.com/document/api/845/104323)
-
[CreateCosMigrateToServerlessInstance](https://cloud.tencent.com/document/api/845/104322)
-
[DescribeUserCosSnapshotList](https://cloud.tencent.com/document/api/845/104321)
新增数据结构:
-
[CommonIndexInfo](https://cloud.tencent.com/document/api/845/30634#CommonIndexInfo)
-
[CosSnapShotInfo](https://cloud.tencent.com/document/api/845/30634#CosSnapShotInfo)
-
[DataStreamInfo](https://cloud.tencent.com/document/api/845/30634#DataStreamInfo)
#### 物联网开发平台(iotexplorer) 版本:2019-04-23
##### 第 57 次发布
发布时间:2024-03-14 01:17:47
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[InstanceDetail](https://cloud.tencent.com/document/api/1081/34988#InstanceDetail)
- 新增成员:UpDownTPS, UpDownCurrentTPS, ForwardTPS, ForwardCurrentTPS,
CellNum, BillingTag, EverydayFreeMessageCount, MaxDeviceOnlineCount
#### 云直播CSS(live) 版本:2018-08-01
##### 第 118 次发布
发布时间:2024-03-14 01:19:23
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribePullTransformPushInfo](https://cloud.tencent.com/document/api/267/104324)
新增数据结构:
-
[TaskDurationInfo](https://cloud.tencent.com/document/api/267/20474#TaskDurationInfo)
#### TI-ONE 训练平台(tione) 版本:2021-11-11
##### 第 53 次发布
发布时间:2024-03-14 01:25:59
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeBuildInImages](https://cloud.tencent.com/document/api/851/104325)
#### TI-ONE 训练平台(tione) 版本:2019-10-22
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 79 次发布
发布时间:2024-03-14 01:29:38
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[TableLineageInfo](https://cloud.tencent.com/document/api/1267/76336#TableLineageInfo)
- 新增成员:DatasourceName, DatabaseName, DatabaseId
-
[TableMeta](https://cloud.tencent.com/document/api/1267/76336#TableMeta)
- 新增成员:IsPartitionTable, PartitionColumns, PartitionExpireDays
###
[`v1.0.876`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10876)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.875...v1.0.876)
#### 日志服务(cls) 版本:2020-10-16
##### 第 85 次发布
发布时间:2024-03-14 01:11:38
本次发布包含了以下内容:
改善已有的文档。
**删除接口**:
- DescribeKafkaUser
#### DNSPod(dnspod) 版本:2021-03-23
##### 第 30 次发布
发布时间:2024-03-14 01:14:21
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeRecordLineCategoryList](https://cloud.tencent.com/document/api/1427/104320)
修改接口:
- [CreateRecord](https://cloud.tencent.com/document/api/1427/56180)
- 新增入参:DnssecConflictMode
- [ModifyRecord](https://cloud.tencent.com/document/api/1427/56157)
- 新增入参:DnssecConflictMode
新增数据结构:
- [LineItem](https://cloud.tencent.com/document/api/1427/56185#LineItem)
#### 数据传输服务(dts) 版本:2021-12-06
##### 第 25 次发布
发布时间:2024-03-14 01:15:02
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
- [DBInfo](https://cloud.tencent.com/document/api/571/82108#DBInfo)
- 新增成员:SetId
#### 数据传输服务(dts) 版本:2018-03-30
#### 弹性 MapReduce(emr) 版本:2019-01-03
##### 第 61 次发布
发布时间:2024-03-14 01:15:43
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeHiveQueries](https://cloud.tencent.com/document/api/589/94487)
- 新增入参:State, EndTimeGte, EndTimeLte
-
[DescribeImpalaQueries](https://cloud.tencent.com/document/api/589/94486)
- 新增入参:State, EndTimeGte, EndTimeLte
#### Elasticsearch Service(es) 版本:2018-04-16
##### 第 54 次发布
发布时间:2024-03-14 01:15:53
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CheckMigrateIndexMetaData](https://cloud.tencent.com/document/api/845/104323)
-
[CreateCosMigrateToServerlessInstance](https://cloud.tencent.com/document/api/845/104322)
-
[DescribeUserCosSnapshotList](https://cloud.tencent.com/document/api/845/104321)
新增数据结构:
-
[CommonIndexInfo](https://cloud.tencent.com/document/api/845/30634#CommonIndexInfo)
-
[CosSnapShotInfo](https://cloud.tencent.com/document/api/845/30634#CosSnapShotInfo)
-
[DataStreamInfo](https://cloud.tencent.com/document/api/845/30634#DataStreamInfo)
#### 物联网开发平台(iotexplorer) 版本:2019-04-23
##### 第 57 次发布
发布时间:2024-03-14 01:17:47
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[InstanceDetail](https://cloud.tencent.com/document/api/1081/34988#InstanceDetail)
- 新增成员:UpDownTPS, UpDownCurrentTPS, ForwardTPS, ForwardCurrentTPS,
CellNum, BillingTag, EverydayFreeMessageCount, MaxDeviceOnlineCount
#### 云直播CSS(live) 版本:2018-08-01
##### 第 118 次发布
发布时间:2024-03-14 01:19:23
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribePullTransformPushInfo](https://cloud.tencent.com/document/api/267/104324)
新增数据结构:
-
[TaskDurationInfo](https://cloud.tencent.com/document/api/267/20474#TaskDurationInfo)
#### TI-ONE 训练平台(tione) 版本:2021-11-11
##### 第 53 次发布
发布时间:2024-03-14 01:25:59
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeBuildInImages](https://cloud.tencent.com/document/api/851/104325)
#### TI-ONE 训练平台(tione) 版本:2019-10-22
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 79 次发布
发布时间:2024-03-14 01:29:38
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[TableLineageInfo](https://cloud.tencent.com/document/api/1267/76336#TableLineageInfo)
- 新增成员:DatasourceName, DatabaseName, DatabaseId
-
[TableMeta](https://cloud.tencent.com/document/api/1267/76336#TableMeta)
- 新增成员:IsPartitionTable, PartitionColumns, PartitionExpireDays
###
[`v1.0.875`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10875)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.874...v1.0.875)
#### Elasticsearch Service(es) 版本:2018-04-16
##### 第 53 次发布
发布时间:2024-03-13 16:49:04
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CreateServerlessInstance](https://cloud.tencent.com/document/api/845/104318)
-
[CreateServerlessSpaceV2](https://cloud.tencent.com/document/api/845/104317)
-
[DeleteServerlessInstance](https://cloud.tencent.com/document/api/845/104316)
-
[DeleteServerlessSpaceUser](https://cloud.tencent.com/document/api/845/104315)
-
[DescribeServerlessSpaceUser](https://cloud.tencent.com/document/api/845/104314)
-
[DescribeServerlessSpaces](https://cloud.tencent.com/document/api/845/104313)
-
[UpdateServerlessInstance](https://cloud.tencent.com/document/api/845/104312)
-
[UpdateServerlessSpace](https://cloud.tencent.com/document/api/845/104311)
新增数据结构:
- [DiData](https://cloud.tencent.com/document/api/845/30634#DiData)
-
[DiDataSinkServerless](https://cloud.tencent.com/document/api/845/30634#DiDataSinkServerless)
-
[DiDataSourceCvm](https://cloud.tencent.com/document/api/845/30634#DiDataSourceCvm)
-
[DiDataSourceCvmInstance](https://cloud.tencent.com/document/api/845/30634#DiDataSourceCvmInstance)
-
[DiDataSourceTke](https://cloud.tencent.com/document/api/845/30634#DiDataSourceTke)
-
[DiSourceCvm](https://cloud.tencent.com/document/api/845/30634#DiSourceCvm)
-
[DiSourceTke](https://cloud.tencent.com/document/api/845/30634#DiSourceTke)
-
[DiSourceTkePodLabel](https://cloud.tencent.com/document/api/845/30634#DiSourceTkePodLabel)
-
[KibanaPublicAcl](https://cloud.tencent.com/document/api/845/30634#KibanaPublicAcl)
-
[ServerlessDi](https://cloud.tencent.com/document/api/845/30634#ServerlessDi)
-
[ServerlessSpace](https://cloud.tencent.com/document/api/845/30634#ServerlessSpace)
-
[ServerlessSpaceUser](https://cloud.tencent.com/document/api/845/30634#ServerlessSpaceUser)
- [VpcInfo](https://cloud.tencent.com/document/api/845/30634#VpcInfo)
###
[`v1.0.874`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10874)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.873...v1.0.874)
#### 访问管理(cam) 版本:2019-01-16
##### 第 57 次发布
发布时间:2024-03-12 19:49:56
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[LoginActionFlag](https://cloud.tencent.com/document/api/598/33167#LoginActionFlag)
- 新增成员:U2FToken
-
[LoginActionFlagIntl](https://cloud.tencent.com/document/api/598/33167#LoginActionFlagIntl)
- 新增成员:U2FToken
#### 云联络中心(ccc) 版本:2020-02-10
##### 第 62 次发布
发布时间:2024-03-13 01:09:37
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[SdkAppIdBuyInfo](https://cloud.tencent.com/document/api/679/47715#SdkAppIdBuyInfo)
- **修改成员**:SipBuyNum
-
[ServeParticipant](https://cloud.tencent.com/document/api/679/47715#ServeParticipant)
- **修改成员**:TransferFromType
-
[SkillGroupInfoItem](https://cloud.tencent.com/document/api/679/47715#SkillGroupInfoItem)
- **修改成员**:SkillGroupId, SkillGroupName,
Type, RoutePolicy, UsingLastSeat, MaxConcurrency, LastModifyTimestamp,
SkillGroupType
-
[StaffBuyInfo](https://cloud.tencent.com/document/api/679/47715#StaffBuyInfo)
- **修改成员**:SipNum
-
[StaffStatusMetrics](https://cloud.tencent.com/document/api/679/47715#StaffStatusMetrics)
- **修改成员**:LastOnlineTimestamp,
LastStatusTimestamp
#### 日志服务(cls) 版本:2020-10-16
##### 第 84 次发布
发布时间:2024-03-13 01:11:37
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateConfigExtra](https://cloud.tencent.com/document/api/614/71166)
- 新增入参:CollectInfos
#### 数据库智能管家 DBbrain(dbbrain) 版本:2021-05-27
#### 数据库智能管家 DBbrain(dbbrain) 版本:2019-10-16
##### 第 15 次发布
发布时间:2024-03-12 19:50:52
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[SlowLogTopSqlItem](https://cloud.tencent.com/document/api/1130/39561#SlowLogTopSqlItem)
- **修改成员**:Md5
#### 域名注册(domain) 版本:2018-08-08
##### 第 32 次发布
发布时间:2024-03-13 01:14:31
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribePreDomainList](https://cloud.tencent.com/document/api/242/103889)
- 新增入参:UpTime
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 157 次发布
发布时间:2024-03-13 01:15:56
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreatePartnerAutoSignAuthUrl](https://cloud.tencent.com/document/api/1420/102515)
- 新增入参:PlatformAppAuthorization
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 云数据库 MongoDB(mongodb) 版本:2019-07-25
##### 第 36 次发布
发布时间:2024-03-13 01:19:31
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[SetInstanceMaintenance](https://cloud.tencent.com/document/api/240/104304)
#### 云数据库 MongoDB(mongodb) 版本:2018-04-08
#### 文字识别(ocr) 版本:2018-11-19
##### 第 131 次发布
发布时间:2024-03-13 01:20:34
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[VatInvoiceVerifyNew](https://cloud.tencent.com/document/api/866/73674)
- 新增入参:EnableTodayInvoice
#### 边缘安全加速平台(teo) 版本:2022-09-01
##### 第 76 次发布
发布时间:2024-03-13 01:24:49
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeSecurityIPGroupInfo](https://cloud.tencent.com/document/api/1552/104305)
#### 边缘安全加速平台(teo) 版本:2022-01-06
#### TI-ONE 训练平台(tione) 版本:2021-11-11
##### 第 52 次发布
发布时间:2024-03-13 01:25:17
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CreatePresignedNotebookUrl](https://cloud.tencent.com/document/api/851/104306)
#### TI-ONE 训练平台(tione) 版本:2019-10-22
#### 容器服务(tke) 版本:2022-05-01
#### 容器服务(tke) 版本:2018-05-25
##### 第 168 次发布
发布时间:2024-03-13 01:25:40
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[GetClusterLevelPrice](https://cloud.tencent.com/document/api/457/72004)
- 新增出参:Policy
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 78 次发布
发布时间:2024-03-13 01:28:24
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[InstanceLifeCycleOpsDto](https://cloud.tencent.com/document/api/1267/76336#InstanceLifeCycleOpsDto)
- 新增成员:InstanceState
- **修改成员**:TaskId, CurRunDate, LifeRound,
RunType, Tries, InstanceLifeDetailDtoList, RunnerState, ErrorDesc,
ErrorCodeLevel, InstanceLogListOpsDto
-
[InstanceLifeDetailDto](https://cloud.tencent.com/document/api/1267/76336#InstanceLifeDetailDto)
- 新增成员:DetailState, EndTime
- **修改成员**:State, StartTime
###
[`v1.0.873`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10873)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.872...v1.0.873)
#### 本地专用集群(cdc) 版本:2020-12-14
##### 第 9 次发布
发布时间:2024-03-12 01:14:14
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeDedicatedClusterCbsStatistics](https://cloud.tencent.com/document/api/1346/104267)
新增数据结构:
- [SetInfo](https://cloud.tencent.com/document/api/1346/73770#SetInfo)
#### 数据安全治理中心(dsgc) 版本:2019-07-23
##### 第 8 次发布
发布时间:2024-03-12 01:27:10
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeDSPASupportedMetas](https://cloud.tencent.com/document/api/1087/97175)
- 新增出参:MaxDBInstanceLimit
#### 云数据库 MongoDB(mongodb) 版本:2019-07-25
#### 云数据库 MongoDB(mongodb) 版本:2018-04-08
##### 第 6 次发布
发布时间:2024-03-11 15:09:36
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeClientConnections](https://cloud.tencent.com/document/api/240/37233)
- 新增出参:TotalCount
#### 云数据库Redis(redis) 版本:2018-04-12
##### 第 72 次发布
发布时间:2024-03-12 01:45:03
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
- [Account](https://cloud.tencent.com/document/api/239/20022#Account)
- 新增成员:CreateTime
#### 微服务引擎(tse) 版本:2020-12-07
##### 第 60 次发布
发布时间:2024-03-12 01:59:06
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[GovernanceInstanceUpdate](https://cloud.tencent.com/document/api/1364/54942#GovernanceInstanceUpdate)
- **修改成员**:Id
###
[`v1.0.872`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10872)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.871...v1.0.872)
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 154 次发布
发布时间:2024-03-11 01:15:16
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[FillApproverInfo](https://cloud.tencent.com/document/api/1323/70369#FillApproverInfo)
- 新增成员:ApproverIdCardType, ApproverIdCardNumber
##### 第 153 次发布
发布时间:2024-03-08 19:37:32
本次发布包含了以下内容:
改善已有的文档。
新增数据结构:
-
[UserFlowType](https://cloud.tencent.com/document/api/1323/70369#UserFlowType)
修改数据结构:
-
[TemplateInfo](https://cloud.tencent.com/document/api/1323/70369#TemplateInfo)
- 新增成员:UserFlowType
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 156 次发布
发布时间:2024-03-11 01:15:31
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[FillApproverInfo](https://cloud.tencent.com/document/api/1420/61525#FillApproverInfo)
- 新增成员:ApproverIdCardType, ApproverIdCardNumber
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 轻量应用服务器(lighthouse) 版本:2020-03-24
##### 第 59 次发布
发布时间:2024-03-11 01:18:22
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateInstances](https://cloud.tencent.com/document/api/1207/69573)
- 新增入参:InitCommand
新增数据结构:
- [Command](https://cloud.tencent.com/document/api/1207/47576#Command)
修改数据结构:
- [Instance](https://cloud.tencent.com/document/api/1207/47576#Instance)
- 新增成员:InitInvocationId
#### 云数据库 SQL Server(sqlserver) 版本:2018-03-28
##### 第 58 次发布
发布时间:2024-03-11 01:21:49
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [ModifyDReadable](https://cloud.tencent.com/document/api/238/104234)
#### 消息队列 TDMQ(tdmq) 版本:2020-02-17
##### 第 105 次发布
发布时间:2024-03-11 01:24:01
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeRocketMQMsgTrace](https://cloud.tencent.com/document/api/1179/97760)
- 新增入参:QueryDeadLetterMessage
###
[`v1.0.871`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10871)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.870...v1.0.871)
#### 费用中心(billing) 版本:2018-07-09
##### 第 57 次发布
发布时间:2024-03-08 11:57:13
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeAllocateConditions](https://cloud.tencent.com/document/api/555/104186)
-
[DescribeAllocationBillConditions](https://cloud.tencent.com/document/api/555/104185)
-
[DescribeAllocationBillDetail](https://cloud.tencent.com/document/api/555/104184)
-
[DescribeAllocationMonthOverview](https://cloud.tencent.com/document/api/555/104183)
-
[DescribeAllocationOverview](https://cloud.tencent.com/document/api/555/104182)
-
[DescribeAllocationSummaryByBusiness](https://cloud.tencent.com/document/api/555/104181)
-
[DescribeAllocationSummaryByItem](https://cloud.tencent.com/document/api/555/104180)
-
[DescribeAllocationSummaryByResource](https://cloud.tencent.com/document/api/555/104179)
-
[DescribeAllocationTrendByMonth](https://cloud.tencent.com/document/api/555/104178)
-
[DescribeGatherResource](https://cloud.tencent.com/document/api/555/104177)
新增数据结构:
-
[AllocationAverageData](https://cloud.tencent.com/document/api/555/19183#AllocationAverageData)
-
[AllocationBillTrendDetail](https://cloud.tencent.com/document/api/555/19183#AllocationBillTrendDetail)
-
[AllocationDetail](https://cloud.tencent.com/document/api/555/19183#AllocationDetail)
-
[AllocationMonthOverviewDetail](https://cloud.tencent.com/document/api/555/19183#AllocationMonthOverviewDetail)
-
[AllocationOverviewDetail](https://cloud.tencent.com/document/api/555/19183#AllocationOverviewDetail)
-
[AllocationOverviewNode](https://cloud.tencent.com/document/api/555/19183#AllocationOverviewNode)
-
[AllocationOverviewTotal](https://cloud.tencent.com/document/api/555/19183#AllocationOverviewTotal)
-
[AllocationRule](https://cloud.tencent.com/document/api/555/19183#AllocationRule)
-
[AllocationStat](https://cloud.tencent.com/document/api/555/19183#AllocationStat)
-
[AllocationSummaryByBusiness](https://cloud.tencent.com/document/api/555/19183#AllocationSummaryByBusiness)
-
[AllocationSummaryByItem](https://cloud.tencent.com/document/api/555/19183#AllocationSummaryByItem)
-
[AllocationSummaryByResource](https://cloud.tencent.com/document/api/555/19183#AllocationSummaryByResource)
-
[AllocationTreeNode](https://cloud.tencent.com/document/api/555/19183#AllocationTreeNode)
-
[BillActionType](https://cloud.tencent.com/document/api/555/19183#BillActionType)
-
[BillBusiness](https://cloud.tencent.com/document/api/555/19183#BillBusiness)
-
[BillBusinessLink](https://cloud.tencent.com/document/api/555/19183#BillBusinessLink)
-
[BillComponent](https://cloud.tencent.com/document/api/555/19183#BillComponent)
- [BillDays](https://cloud.tencent.com/document/api/555/19183#BillDays)
-
[BillInstanceType](https://cloud.tencent.com/document/api/555/19183#BillInstanceType)
- [BillItem](https://cloud.tencent.com/document/api/555/19183#BillItem)
-
[BillOperateUin](https://cloud.tencent.com/document/api/555/19183#BillOperateUin)
-
[BillOwnerUin](https://cloud.tencent.com/document/api/555/19183#BillOwnerUin)
-
[BillPayMode](https://cloud.tencent.com/document/api/555/19183#BillPayMode)
-
[BillProduct](https://cloud.tencent.com/document/api/555/19183#BillProduct)
-
[BillProductLink](https://cloud.tencent.com/document/api/555/19183#BillProductLink)
-
[BillProject](https://cloud.tencent.com/document/api/555/19183#BillProject)
-
[BillRegion](https://cloud.tencent.com/document/api/555/19183#BillRegion)
- [BillTag](https://cloud.tencent.com/document/api/555/19183#BillTag)
-
[BillZoneId](https://cloud.tencent.com/document/api/555/19183#BillZoneId)
-
[GatherResourceSummary](https://cloud.tencent.com/document/api/555/19183#GatherResourceSummary)
#### 腾讯云数据仓库 TCHouse-D(cdwdoris) 版本:2021-12-28
##### 第 8 次发布
发布时间:2024-03-08 01:10:20
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[InstanceInfo](https://cloud.tencent.com/document/api/1387/102385#InstanceInfo)
- 新增成员:IsWhiteSGs, BindSGs
#### 云服务器(cvm) 版本:2017-03-12
##### 第 125 次发布
发布时间:2024-03-08 01:12:05
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateKeyPair](https://cloud.tencent.com/document/api/213/15702)
- **修改出参**:KeyPair
修改数据结构:
- [KeyPair](https://cloud.tencent.com/document/api/213/15753#KeyPair)
- **修改成员**:KeyId, KeyName, ProjectId,
Description, PublicKey, PrivateKey, AssociatedInstanceIds, CreatedTime,
Tags
#### 数据传输服务(dts) 版本:2021-12-06
##### 第 24 次发布
发布时间:2024-03-08 01:15:05
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
- [Options](https://cloud.tencent.com/document/api/571/82108#Options)
- 新增成员:FilterBeginCommit, FilterCheckpoint
-
[TopicRule](https://cloud.tencent.com/document/api/571/82108#TopicRule)
- 新增成员:Columns
#### 数据传输服务(dts) 版本:2018-03-30
#### 数据加速器 GooseFS(goosefs) 版本:2022-05-19
##### 第 8 次发布
发布时间:2024-03-08 01:16:56
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateFileSystem](https://cloud.tencent.com/document/api/1424/95792)
- 新增入参:SecurityGroupId
#### 云数据库 MariaDB(mariadb) 版本:2017-03-12
##### 第 60 次发布
发布时间:2024-03-08 01:19:33
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[DBAccount](https://cloud.tencent.com/document/api/237/16191#DBAccount)
- **修改成员**:MaxUserConnections
#### 医疗报告结构化(mrs) 版本:2020-09-10
##### 第 24 次发布
发布时间:2024-03-08 09:57:15
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [TurnPDFToObject](https://cloud.tencent.com/document/api/1314/97928)
- 新增入参:TextBasedPdfFlag
-
[TurnPDFToObjectAsync](https://cloud.tencent.com/document/api/1314/101007)
- 新增入参:TextBasedPdfFlag
#### 流计算 Oceanus(oceanus) 版本:2019-04-22
##### 第 54 次发布
发布时间:2024-03-08 01:20:43
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateJob](https://cloud.tencent.com/document/api/849/52009)
- 新增入参:Description
- [ModifyJob](https://cloud.tencent.com/document/api/849/75553)
- 新增入参:Description
修改数据结构:
- [JobV1](https://cloud.tencent.com/document/api/849/52010#JobV1)
- 新增成员:Description
#### 云数据库 SQL Server(sqlserver) 版本:2018-03-28
##### 第 57 次发布
发布时间:2024-03-08 01:22:30
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeDBInstancesAttribute](https://cloud.tencent.com/document/api/238/90299)
- 新增出参:DrReadableInfo
- [ModifyCloseWanIp](https://cloud.tencent.com/document/api/238/101718)
- 新增入参:RoGroupId
-
[ModifyDBInstanceNetwork](https://cloud.tencent.com/document/api/238/52347)
- 新增入参:DRNetwork
- [ModifyOpenWanIp](https://cloud.tencent.com/document/api/238/101717)
- 新增入参:RoGroupId
新增数据结构:
-
[DrReadableInfo](https://cloud.tencent.com/document/api/238/19976#DrReadableInfo)
修改数据结构:
-
[ReadOnlyGroup](https://cloud.tencent.com/document/api/238/19976#ReadOnlyGroup)
- 新增成员:DnsPodDomain, TgwWanVPort
#### 消息队列 TDMQ(tdmq) 版本:2020-02-17
##### 第 104 次发布
发布时间:2024-03-08 01:24:44
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeRocketMQPublicAccessMonitorData](https://cloud.tencent.com/document/api/1179/104161)
修改接口:
-
[DescribeRocketMQMsg](https://cloud.tencent.com/document/api/1179/91055)
- 新增入参:QueryDeadLetterMessage, Offset, Limit, FilterTrackGroup
- 新增出参:MessageTracksCount
新增数据结构:
-
[RocketMQDataPoint](https://cloud.tencent.com/document/api/1179/46089#RocketMQDataPoint)
###
[`v1.0.870`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10870)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.869...v1.0.870)
#### 云联络中心(ccc) 版本:2020-02-10
##### 第 61 次发布
发布时间:2024-03-07 01:09:17
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[StaffInfo](https://cloud.tencent.com/document/api/679/47715#StaffInfo)
- 新增成员:RoleId
#### 日志服务(cls) 版本:2020-10-16
##### 第 83 次发布
发布时间:2024-03-07 01:11:18
本次发布包含了以下内容:
改善已有的文档。
新增数据结构:
-
[CollectConfig](https://cloud.tencent.com/document/api/614/56471#CollectConfig)
-
[CollectInfo](https://cloud.tencent.com/document/api/614/56471#CollectInfo)
修改数据结构:
-
[ConfigExtraInfo](https://cloud.tencent.com/document/api/614/56471#ConfigExtraInfo)
- 新增成员:CollectInfos
-
[ConsumerContent](https://cloud.tencent.com/document/api/614/56471#ConsumerContent)
- 新增成员:JsonType
- [LogInfo](https://cloud.tencent.com/document/api/614/56471#LogInfo)
- **修改成员**:RawLog, IndexStatus
#### T-Sec-堡垒机(BH)(dasb) 版本:2019-10-18
##### 第 24 次发布
发布时间:2024-03-07 01:13:28
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[ModifyOAuthSetting](https://cloud.tencent.com/document/api/1025/104132)
#### 数据安全治理中心(dsgc) 版本:2019-07-23
##### 第 7 次发布
发布时间:2024-03-07 01:14:47
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateDSPASelfBuildMetaResource](https://cloud.tencent.com/document/api/1087/97178)
- 新增入参:InstanceType, InstanceValue
-
[DescribeDSPADataSourceDbInfo](https://cloud.tencent.com/document/api/1087/97216)
- 新增入参:DataSourceType
-
[DescribeDSPAESDataAssetByComplianceId](https://cloud.tencent.com/document/api/1087/97144)
- 新增入参:BuildType, DataSourceType
-
[DescribeDSPARDBDataAssetByComplianceId](https://cloud.tencent.com/document/api/1087/97205)
- 新增入参:BuildType
-
[ModifyDSPACOSTaskResult](https://cloud.tencent.com/document/api/1087/97197)
- 新增入参:FileName, BucketName, DataSourceId
修改数据结构:
-
[DspaCOSDataAssetDetail](https://cloud.tencent.com/document/api/1087/96844#DspaCOSDataAssetDetail)
- 新增成员:IdentifyType, CheckStatus
-
[DspaDiscoveryTaskDataSource](https://cloud.tencent.com/document/api/1087/96844#DspaDiscoveryTaskDataSource)
- 新增成员:DataSourceType
-
[DspaUserResourceMeta](https://cloud.tencent.com/document/api/1087/96844#DspaUserResourceMeta)
- 新增成员:InstanceType, InstanceValue
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 152 次发布
发布时间:2024-03-07 01:16:07
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeSignFaceVideo](https://cloud.tencent.com/document/api/1323/104133)
新增数据结构:
-
[DetectInfoVideoData](https://cloud.tencent.com/document/api/1323/70369#DetectInfoVideoData)
-
[Intention](https://cloud.tencent.com/document/api/1323/70369#Intention)
-
[IntentionAction](https://cloud.tencent.com/document/api/1323/70369#IntentionAction)
-
[IntentionActionResult](https://cloud.tencent.com/document/api/1323/70369#IntentionActionResult)
-
[IntentionActionResultDetail](https://cloud.tencent.com/document/api/1323/70369#IntentionActionResultDetail)
-
[IntentionQuestion](https://cloud.tencent.com/document/api/1323/70369#IntentionQuestion)
-
[IntentionQuestionResult](https://cloud.tencent.com/document/api/1323/70369#IntentionQuestionResult)
修改数据结构:
-
[FlowCreateApprover](https://cloud.tencent.com/document/api/1323/70369#FlowCreateApprover)
- 新增成员:Intention
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 155 次发布
发布时间:2024-03-07 01:16:27
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[ChannelDescribeSignFaceVideo](https://cloud.tencent.com/document/api/1420/104134)
新增数据结构:
-
[DetectInfoVideoData](https://cloud.tencent.com/document/api/1420/61525#DetectInfoVideoData)
-
[Intention](https://cloud.tencent.com/document/api/1420/61525#Intention)
-
[IntentionAction](https://cloud.tencent.com/document/api/1420/61525#IntentionAction)
-
[IntentionActionResult](https://cloud.tencent.com/document/api/1420/61525#IntentionActionResult)
-
[IntentionActionResultDetail](https://cloud.tencent.com/document/api/1420/61525#IntentionActionResultDetail)
-
[IntentionQuestion](https://cloud.tencent.com/document/api/1420/61525#IntentionQuestion)
-
[IntentionQuestionResult](https://cloud.tencent.com/document/api/1420/61525#IntentionQuestionResult)
修改数据结构:
-
[FlowApproverInfo](https://cloud.tencent.com/document/api/1420/61525#FlowApproverInfo)
- 新增成员:Intention
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 消息队列 RocketMQ 版(trocket) 版本:2023-03-08
##### 第 11 次发布
发布时间:2024-03-07 01:26:39
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateInstance](https://cloud.tencent.com/document/api/1493/97868)
- 新增入参:PayMode, RenewFlag, TimeSpan, MaxTopicNum
- [CreateTopic](https://cloud.tencent.com/document/api/1493/97947)
- 新增入参:MsgTTL
- [DescribeTopic](https://cloud.tencent.com/document/api/1493/97945)
- **修改入参**:Offset, Limit
- 新增出参:MsgTTL
- [DescribeTopicList](https://cloud.tencent.com/document/api/1493/96030)
- **修改入参**:Offset, Limit
- [ModifyInstance](https://cloud.tencent.com/document/api/1493/97865)
- 新增入参:MaxTopicNum
修改数据结构:
-
[SubscriptionData](https://cloud.tencent.com/document/api/1493/96031#SubscriptionData)
- 新增成员:MessageModel
- **修改成员**:InstanceId, Topic, TopicType,
TopicQueueNum, ConsumerGroup, IsOnline, ConsumeType, SubString,
ExpressionType, Consistency, ConsumerLag, LastUpdateTime, MaxRetryTimes,
ConsumeMessageOrderly
-
[TopicItem](https://cloud.tencent.com/document/api/1493/96031#TopicItem)
- 新增成员:ClusterIdV4, NamespaceV4, TopicV4, FullNamespaceV4, MsgTTL
#### 微服务引擎(tse) 版本:2020-12-07
##### 第 59 次发布
发布时间:2024-03-07 01:27:04
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[KongUpstreamInfo](https://cloud.tencent.com/document/api/1364/54942#KongUpstreamInfo)
- 新增成员:ScfCamAuthEnable
-
[UpstreamHealthCheckConfig](https://cloud.tencent.com/document/api/1364/54942#UpstreamHealthCheckConfig)
- 新增成员:IgnoreZeroWeightNodes
###
[`v1.0.869`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10869)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.868...v1.0.869)
#### 负载均衡(clb) 版本:2018-03-17
##### 第 103 次发布
发布时间:2024-03-06 01:10:51
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[BatchRegisterTargets](https://cloud.tencent.com/document/api/214/38303)
- 新增出参:Message
- [CreateClsLogSet](https://cloud.tencent.com/document/api/214/46803)
修改数据结构:
- [Cluster](https://cloud.tencent.com/document/api/214/30694#Cluster)
- 新增成员:IPVersion
-
[ExtraInfo](https://cloud.tencent.com/document/api/214/30694#ExtraInfo)
- **修改成员**:ZhiTong, TgwGroupName
- [Listener](https://cloud.tencent.com/document/api/214/30694#Listener)
- 新增成员:RescheduleInterval
-
[LoadBalancer](https://cloud.tencent.com/document/api/214/30694#LoadBalancer)
-
[RsWeightRule](https://cloud.tencent.com/document/api/214/30694#RsWeightRule)
-
[RuleOutput](https://cloud.tencent.com/document/api/214/30694#RuleOutput)
- **修改成员**:LocationId, SessionExpireTime,
HealthCheck, Certificate, Scheduler
- [ZoneInfo](https://cloud.tencent.com/document/api/214/30694#ZoneInfo)
- **修改成员**:ZoneId, Zone, ZoneName,
ZoneRegion, LocalZone, EdgeZone
#### 专线接入(dc) 版本:2018-04-10
##### 第 25 次发布
发布时间:2024-03-06 01:13:45
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[ModifyDirectConnectTunnelExtra](https://cloud.tencent.com/document/api/216/49100)
- 新增入参:TencentIPv6Address, TencentBackupIPv6Address, CustomerIPv6Address
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 151 次发布
发布时间:2024-03-06 01:15:49
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[TemplateInfo](https://cloud.tencent.com/document/api/1323/70369#TemplateInfo)
- 新增成员:CreatorId
#### 物联网智能视频服务(iotvideo) 版本:2021-11-25
##### 第 29 次发布
发布时间:2024-03-06 01:17:55
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [DescribeP2PInfo](https://cloud.tencent.com/document/api/1131/104107)
#### 物联网智能视频服务(iotvideo) 版本:2020-12-15
#### 物联网智能视频服务(iotvideo) 版本:2019-11-26
#### 消息队列 TDMQ(tdmq) 版本:2020-02-17
##### 第 103 次发布
发布时间:2024-03-06 01:24:29
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [DescribeMsg](https://cloud.tencent.com/document/api/1179/104108)
##### 第 102 次发布
发布时间:2024-03-05 16:41:09
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeMqMsgTrace](https://cloud.tencent.com/document/api/1179/104106)
**删除接口**:
- DeleteProClusters
修改接口:
-
[DescribeRabbitMQQueues](https://cloud.tencent.com/document/api/1179/100809)
- **修改入参**:VirtualHost
修改数据结构:
-
[PulsarProClusterInfo](https://cloud.tencent.com/document/api/1179/46089#PulsarProClusterInfo)
- 新增成员:BillingLabelVersion
- **修改成员**:ClusterId, ClusterName, Remark,
CreateTime, Status, Version, NodeDistribution, MaxStorage, CanEditRoute
-
[PulsarProInstance](https://cloud.tencent.com/document/api/1179/46089#PulsarProInstance)
- 新增成员:BillingLabelVersion
-
[RabbitMQQueueListInfo](https://cloud.tencent.com/document/api/1179/46089#RabbitMQQueueListInfo)
- 新增成员:CreateTime, ModifyTime
-
[RabbitMQVipInstance](https://cloud.tencent.com/document/api/1179/46089#RabbitMQVipInstance)
- 新增成员:PublicAccessEndpoint, Vpcs
- **修改成员**:ExceptionInformation,
ClusterStatus
#### 边缘安全加速平台(teo) 版本:2022-09-01
##### 第 75 次发布
发布时间:2024-03-06 01:24:59
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [CreateCLSIndex](https://cloud.tencent.com/document/api/1552/104113)
-
[CreateRealtimeLogDeliveryTask](https://cloud.tencent.com/document/api/1552/104112)
-
[DeleteRealtimeLogDeliveryTask](https://cloud.tencent.com/document/api/1552/104111)
-
[DescribeRealtimeLogDeliveryTasks](https://cloud.tencent.com/document/api/1552/104110)
-
[ModifyRealtimeLogDeliveryTask](https://cloud.tencent.com/document/api/1552/104109)
新增数据结构:
- [CLSTopic](https://cloud.tencent.com/document/api/1552/80721#CLSTopic)
-
[CustomEndpoint](https://cloud.tencent.com/document/api/1552/80721#CustomEndpoint)
-
[CustomField](https://cloud.tencent.com/document/api/1552/80721#CustomField)
-
[DeliveryCondition](https://cloud.tencent.com/document/api/1552/80721#DeliveryCondition)
-
[RealtimeLogDeliveryTask](https://cloud.tencent.com/document/api/1552/80721#RealtimeLogDeliveryTask)
- [S3](https://cloud.tencent.com/document/api/1552/80721#S3)
#### 边缘安全加速平台(teo) 版本:2022-01-06
#### 消息队列 RocketMQ 版(trocket) 版本:2023-03-08
##### 第 10 次发布
发布时间:2024-03-06 01:26:32
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [DescribeInstance](https://cloud.tencent.com/document/api/1493/97866)
- 新增出参:ScaledTpsEnabled, RenewFlag, ExpiryTime, RoleNumLimit,
AclEnabled, TopicNumLowerLimit, TopicNumUpperLimit
修改数据结构:
- [Endpoint](https://cloud.tencent.com/document/api/1493/96031#Endpoint)
- **修改成员**:Type, Status, PayMode,
EndpointUrl, VpcId, SubnetId, Bandwidth, IpRules
###
[`v1.0.868`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10868)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.867...v1.0.868)
#### 云联络中心(ccc) 版本:2020-02-10
##### 第 60 次发布
发布时间:2024-03-05 01:09:20
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[UpdateCCCSkillGroup](https://cloud.tencent.com/document/api/679/104097)
#### 负载均衡(clb) 版本:2018-03-17
##### 第 102 次发布
发布时间:2024-03-05 01:11:04
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[SpecAvailability](https://cloud.tencent.com/document/api/214/30694#SpecAvailability)
- **修改成员**:SpecType, Availability
#### 实时互动-教育版(lcic) 版本:2022-08-17
##### 第 52 次发布
发布时间:2024-03-05 01:18:50
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [DescribeAppDetail](https://cloud.tencent.com/document/api/1639/85701)
- 新增出参:TransferConfig
- [ModifyApp](https://cloud.tencent.com/document/api/1639/81546)
- 新增入参:TransferId, TransferUrl
新增数据结构:
-
[TransferItem](https://cloud.tencent.com/document/api/1639/81423#TransferItem)
修改数据结构:
-
[AppConfig](https://cloud.tencent.com/document/api/1639/81423#AppConfig)
- 新增成员:ApplicationId, AppName, State, AppVersion, CreatedAt, Callback,
CallbackKey
-
[SceneItem](https://cloud.tencent.com/document/api/1639/81423#SceneItem)
- 新增成员:Scene, LogoUrl, HomeUrl, JSUrl, CSSUrl
#### 云数据库 MongoDB(mongodb) 版本:2019-07-25
##### 第 35 次发布
发布时间:2024-03-05 01:20:29
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeDBInstanceDeal](https://cloud.tencent.com/document/api/240/43667)
- 新增出参:InstanceId
#### 云数据库 MongoDB(mongodb) 版本:2018-04-08
###
[`v1.0.867`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10867)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.866...v1.0.867)
#### 云安全一体化平台(csip) 版本:2022-11-21
##### 第 32 次发布
发布时间:2024-03-04 01:11:59
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeTopAttackInfo](https://cloud.tencent.com/document/api/664/104060)
新增数据结构:
- [TagCount](https://cloud.tencent.com/document/api/664/90825#TagCount)
#### 腾讯云可观测平台(monitor) 版本:2018-07-24
##### 第 107 次发布
发布时间:2024-03-04 01:19:57
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[PrometheusAgentOverview](https://cloud.tencent.com/document/api/248/30354#PrometheusAgentOverview)
- 新增成员:DesiredAgentNum, ReadyAgentNum
#### 腾讯健康组学平台(omics) 版本:2022-11-28
##### 第 13 次发布
发布时间:2024-03-04 01:21:08
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [CreateVolume](https://cloud.tencent.com/document/api/1643/104065)
- [DeleteVolume](https://cloud.tencent.com/document/api/1643/104064)
- [DeleteVolumeData](https://cloud.tencent.com/document/api/1643/104063)
- [DescribeVolumes](https://cloud.tencent.com/document/api/1643/104062)
- [ModifyVolume](https://cloud.tencent.com/document/api/1643/104061)
新增数据结构:
- [Volume](https://cloud.tencent.com/document/api/1643/89100#Volume)
#### T-Sec-安心平台(RP)(trp) 版本:2021-05-15
##### 第 32 次发布
发布时间:2024-03-04 01:26:24
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeCodeBatches](https://cloud.tencent.com/document/api/1458/101819)
- 新增入参:Status
-
[DescribeCodeBatchs](https://cloud.tencent.com/document/api/1458/75017)
- 新增入参:Status
#### 微服务引擎(tse) 版本:2020-12-07
##### 第 58 次发布
发布时间:2024-03-04 01:26:55
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CreateGovernanceInstances](https://cloud.tencent.com/document/api/1364/104069)
-
[DeleteGovernanceInstances](https://cloud.tencent.com/document/api/1364/104068)
-
[DescribeGovernanceInstances](https://cloud.tencent.com/document/api/1364/104067)
-
[ModifyGovernanceInstances](https://cloud.tencent.com/document/api/1364/104066)
新增数据结构:
-
[GovernanceInstance](https://cloud.tencent.com/document/api/1364/54942#GovernanceInstance)
-
[GovernanceInstanceInput](https://cloud.tencent.com/document/api/1364/54942#GovernanceInstanceInput)
-
[GovernanceInstanceUpdate](https://cloud.tencent.com/document/api/1364/54942#GovernanceInstanceUpdate)
- [Metadata](https://cloud.tencent.com/document/api/1364/54942#Metadata)
###
[`v1.0.866`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10866)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.865...v1.0.866)
#### 云联络中心(ccc) 版本:2020-02-10
##### 第 59 次发布
发布时间:2024-03-01 01:09:52
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[AbortPredictiveDialingCampaign](https://cloud.tencent.com/document/api/679/104035)
-
[CreatePredictiveDialingCampaign](https://cloud.tencent.com/document/api/679/104034)
-
[DeletePredictiveDialingCampaign](https://cloud.tencent.com/document/api/679/104033)
-
[DescribePredictiveDialingCampaign](https://cloud.tencent.com/document/api/679/104032)
- [DescribePredictiveDialingCampaigns](https
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/expr-lang/expr to v1.16.2 (#31951)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/expr-lang/expr](https://togithub.com/expr-lang/expr) |
`v1.16.1` -> `v1.16.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fexpr-lang%2fexpr/v1.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fexpr-lang%2fexpr/v1.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fexpr-lang%2fexpr/v1.16.1/v1.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fexpr-lang%2fexpr/v1.16.1/v1.16.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
expr-lang/expr (github.com/expr-lang/expr)
###
[`v1.16.2`](https://togithub.com/expr-lang/expr/releases/tag/v1.16.2)
[Compare
Source](https://togithub.com/expr-lang/expr/compare/v1.16.1...v1.16.2)
**Expr** is a Go-centric expression language designed to deliver dynamic
configurations with unparalleled accuracy,
safety, and speed.
```go
program, err := expr.Compile(`now() - created_at < duration("24h")`)
output, err := expr.Run(program, env)
```
**In this release**:
- Added spans
([#584](https://togithub.com/expr-lang/expr/issues/584))
- Added support for chained comparison `1 < 2 < 3`
([#581](https://togithub.com/expr-lang/expr/issues/581))
- Improved builtin `int`: unwraps underlying int value
([#611](https://togithub.com/expr-lang/expr/issues/611))
- Improved builtin `min`, `max`, `sum`, `mean`, `median`
([#580](https://togithub.com/expr-lang/expr/issues/580),
[#576](https://togithub.com/expr-lang/expr/issues/576))
- Improved bools comparison to be without `reflect.DeepEqual`
([#585](https://togithub.com/expr-lang/expr/issues/585))
- Fixed case with `expr.Operator` passes before `expr.Env` caused error
([#606](https://togithub.com/expr-lang/expr/issues/606))
- Fixed `-1 not in []` expressions
([#590](https://togithub.com/expr-lang/expr/issues/590))
**Expr Editor**
The [Expr Editor](https://expr-lang.org/editor) is an embeddable code
editor written in JavaScript with full support of Expr language.
**Expr Pro**
[Expr Pro](https://expr-lang.org/expr-pro) is a set of extensions for
Expr for advanced use cases. It includes expressions explanation,
performance profiling, and more.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [exporter/instana] Mark the Instana Exporter as deprecated (#31821)
**Description:**
Official Instana documentation recommends using the OTLP exporter with
specific configuration options, and already states this exporter is
deprecated.
**Link to tracking Issue:** Resolves #31765
* Update module cloud.google.com/go/pubsub to v1.37.0 (#31954)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[cloud.google.com/go/pubsub](https://togithub.com/googleapis/google-cloud-go)
| `v1.36.2` -> `v1.37.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/cloud.google.com%2fgo%2fpubsub/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/cloud.google.com%2fgo%2fpubsub/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/cloud.google.com%2fgo%2fpubsub/v1.36.2/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/cloud.google.com%2fgo%2fpubsub/v1.36.2/v1.37.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/apache/thrift to v0.20.0 (#31956)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/apache/thrift](https://togithub.com/apache/thrift) |
`v0.19.0` -> `v0.20.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fapache%2fthrift/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fapache%2fthrift/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fapache%2fthrift/v0.19.0/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fapache%2fthrift/v0.19.0/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
apache/thrift (github.com/apache/thrift)
###
[`v0.20.0`](https://togithub.com/apache/thrift/releases/tag/v0.20.0):
Version 0.20.0
[Compare
Source](https://togithub.com/apache/thrift/compare/v0.19.0...v0.20.0)
Please head over to the official release download source:
http://thrift.apache.org/download
The assets listed below are added by Github based on the release tag and
they will therefore not match the checkums published on the Thrift
project website.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/cenkalti/backoff/v4 to v4.3.0 (#31958)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/cenkalti/backoff/v4](https://togithub.com/cenkalti/backoff)
| `v4.2.1` -> `v4.3.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.2.1/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fcenkalti%2fbackoff%2fv4/v4.2.1/v4.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
cenkalti/backoff (github.com/cenkalti/backoff/v4)
###
[`v4.3.0`](https://togithub.com/cenkalti/backoff/compare/v4.2.1...v4.3.0)
[Compare
Source](https://togithub.com/cenkalti/backoff/compare/v4.2.1...v4.3.0)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [receiver/bigip] avoid nil pointer dereference in getpoolmembers (#31900)
**Description:** fix nil pointer bug in receiver bigip
**Link to tracking Issue:**
[31899](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31899)
If GetPools has an error, pools is set to nil. However we then use this
nil pointer in GetPoolMembers which results in a crash.
* [connector/servicegraphconnector] Gracefully handle half-cleaned metrics (#31700)
The `cleanCache` function cleans up series that haven't been used in
15mins. It does this by:
1. Deleting it from p.keyToMetric (which holds the dimensions for the
metric), then
2. Deleting it from all the metric series maps, e.g. p.reqTotal
In parallel, the metrics are collected by:
1. Looping through all items in the metric series maps, e.g. p.reqTotal
2. For each, gets the metric's dimensions from p.keyToMetric
Because these occur in opposite orders, we can get into a sticky
situation where the collector function errors out when getting the
metric's dimensions.
This PR reverses the order in the cleanup function, hopefully avoiding
this situation.
**Description:**
**Link to tracking Issue:**
**Testing:**
**Documentation:**
* [extension/googleclientauth] Add new component boilerplate scaffolding (#31518)
**Description:**
This adds the basic component boilerplate following the recommendations
for PR1 in
https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#adding-new-components
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31412
**Testing:** Ran various `make ...` commands as listed in docs. Ignored
generated files and failures from unrelated components.
**Documentation:** New readme and metadata (to be filled in, see
tracking issue)
---------
Co-authored-by: Curtis Robert
* [exporter/awss3] Make file format suffix configurable when using encoding (#31833)
**Description:** Modify the behaviour of the exporter when using an
encoding extension to add a user defined file extension or no extension
at all if not configured.
**Link to tracking Issue:** #31818
**Testing:** Unit tests
**Documentation:** Added details of new configuration option.
* Add skeleton for new rabbitmq exporter component (#31800)
**Description:**
Sets-up the configuration format and common component boilerplate for
the rabbitmq exporter
Implementation will be in other pull requests
**Link to tracking Issue:**
[28891](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/28891)
**Testing:** Standard initial unit tests
**Documentation:** Created README for the component
---------
Co-authored-by: Antoine Toulme
* [chore] Fix main (#31972)
* Update otel v0.97.0 (#31971)
Signed-off-by: Dan Jaglowski
* [chore] Prepare release 0.97.0 (#31982)
The following commands were run to prepare this release:
- make chlog-update VERSION=v0.97.0
- sed -i.bak s/0.96.0/0.97.0/g versions.yaml
- make multimod-prerelease
- make multimod-sync
* [internal/datadog] Fix Datarace in metrics client (#31964)
**Description:**
Fixes the data race.
```
fatal error: concurrent map read and map write
goroutine 72665 [running]:
github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog.(*metricsClient).Gauge.func1({0x7b895a0?, 0xc07c930790?}, {0x940dac8, 0xc1996ce180})
github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog@v0.96.0/metrics_client.go:49 +0x85
go.opentelemetry.io/otel/sdk/metric.(*meter).float64ObservableInstrument.func1.1({0x9443f08, 0xef10b00})
go.opentelemetry.io/otel/sdk/metric@v1.24.0/meter.go:286 +0x55
go.opentelemetry.io/otel/sdk/metric.(*pipeline).produce(0xc002852bd0, {0x9443f08, 0xef10b00}, 0xc108dd46c0)
go.opentelemetry.io/otel/sdk/metric@v1.24.0/pipeline.go:122 +0x168
go.opentelemetry.io/otel/sdk/metric.(*ManualReader).Collect(0xc0030d2aa0, {0x9443f08, 0xef10b00}, 0xc108dd46c0)
go.opentelemetry.io/otel/sdk/metric@v1.24.0/manual_reader.go:123 +0xe2
go.opentelemetry.io/otel/exporters/prometheus.(*collector).Collect(0xc0030e4aa0, 0xc10a0083c0)
go.opentelemetry.io/otel/exporters/prometheus@v0.46.0/exporter.go:158 +0x72
github.com/prometheus/client_golang/prometheus.(*Registry).Gather.func1()
github.com/prometheus/client_golang@v1.19.0/prometheus/registry.go:457 +0xe5
created by github.com/prometheus/client_golang/prometheus.(*Registry).Gather in goroutine 5
```
**Link to tracking Issue:**
**Testing:**
**Documentation:**
---------
Co-authored-by: Yang Song
* Update Wandalen/wretry.action action to v2 (#31984)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [Wandalen/wretry.action](https://togithub.com/Wandalen/wretry.action)
| action | major | `v1.4.10` -> `v2.1.0` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
Wandalen/wretry.action (Wandalen/wretry.action)
###
[`v2.1.0`](https://togithub.com/Wandalen/wretry.action/compare/v2.0.0...v2.1.0)
[Compare
Source](https://togithub.com/Wandalen/wretry.action/compare/v2.0.0...v2.1.0)
###
[`v2.0.0`](https://togithub.com/Wandalen/wretry.action/compare/v1.4.10...v2.0.0)
[Compare
Source](https://togithub.com/Wandalen/wretry.action/compare/v1.4.10...v2.0.0)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update module github.com/mongodb-forks/digest to v1.1.0 (#31980)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/mongodb-forks/digest](https://togithub.com/mongodb-forks/digest)
| `v1.0.5` -> `v1.1.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fmongodb-forks%2fdigest/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fmongodb-forks%2fdigest/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fmongodb-forks%2fdigest/v1.0.5/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fmongodb-forks%2fdigest/v1.0.5/v1.1.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
mongodb-forks/digest
(github.com/mongodb-forks/digest)
###
[`v1.1.0`](https://togithub.com/mongodb-forks/digest/releases/tag/v1.1.0)
[Compare
Source](https://togithub.com/mongodb-forks/digest/compare/v1.0.5...v1.1.0)
#### What's Changed
- build(deps): bump actions/checkout from 3 to 4 by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/mongodb-forks/digest/pull/30](https://togithub.com/mongodb-forks/digest/pull/30)
- build(deps): bump golangci/golangci-lint-action from 3.7.0 to 4.0.0 by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/mongodb-forks/digest/pull/31](https://togithub.com/mongodb-forks/digest/pull/31)
- build(deps): bump actions/cache from 3 to 4 by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/mongodb-forks/digest/pull/32](https://togithub.com/mongodb-forks/digest/pull/32)
- build(deps): bump actions/setup-go from 4 to 5 by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/mongodb-forks/digest/pull/33](https://togithub.com/mongodb-forks/digest/pull/33)
- task: update go matrix by
[@gssbzn](https://togithub.com/gssbzn) in
[https://github.com/mongodb-forks/digest/pull/34](https://togithub.com/mongodb-forks/digest/pull/34)
- CLOUDP-237245: adding helper for using Http transport interface by
[@wtrocki](https://togithub.com/wtrocki) in
[https://github.com/mongodb-forks/digest/pull/35](https://togithub.com/mongodb-forks/digest/pull/35)
**Full Changelog**:
https://github.com/mongodb-forks/digest/compare/v1.0.5...v1.1.0
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [pkg/ottl] Add new ottl/Unix function (#31556)
Solves #27868.
---------
Signed-off-by: Israel Blancas
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
* [chore] remove use of confignet.ToServerContext (#31991)
* Update module github.com/go-sql-driver/mysql to v1.8.1 (#31973)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/go-sql-driver/mysql](https://togithub.com/go-sql-driver/mysql)
| `v1.8.0` -> `v1.8.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgo-sql-driver%2fmysql/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgo-sql-driver%2fmysql/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgo-sql-driver%2fmysql/v1.8.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgo-sql-driver%2fmysql/v1.8.0/v1.8.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
go-sql-driver/mysql (github.com/go-sql-driver/mysql)
###
[`v1.8.1`](https://togithub.com/go-sql-driver/mysql/releases/tag/v1.8.1)
[Compare
Source](https://togithub.com/go-sql-driver/mysql/compare/v1.8.0...v1.8.1)
#### What's Changed
Bugfixes:
- fix race condition when context is canceled in
[#1562](https://togithub.com/go-sql-driver/mysql/pull/1562) and
[#1570](https://togithub.com/go-sql-driver/mysql/pull/1570)
**Full Changelog**:
https://github.com/go-sql-driver/mysql/compare/v1.8.0...v1.8.1
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* cumulativetodeltaprocessor: fix regexp in example (#31977)
**Description:**
Fix regular expression in example.
**Link to tracking Issue:**
**Testing:**
**Documentation:**
Fix regular expression in example.
Signed-off-by: Andreas Gerstmayr
* Update docker-compose deps to v0.97.0 (#31992)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
|
[otel/opentelemetry-collector](https://togithub.com/open-telemetry/opentelemetry-collector-releases)
| minor | `0.96.0` -> `0.97.0` |
|
[otel/opentelemetry-collector-contrib](https://togithub.com/open-telemetry/opentelemetry-collector-releases)
| minor | `0.96.0` -> `0.97.0` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
open-telemetry/opentelemetry-collector-releases
(otel/opentelemetry-collector)
###
[`v0.97.0`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/releases/tag/v0.97.0)
[Compare
Source](https://togithub.com/open-telemetry/opentelemetry-collector-releases/compare/v0.96.0...v0.97.0)
Check the [v0.97.0 contrib
changelog](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/releases/tag/v0.97.0)
and the [v0.97.0 core
changelog](https://togithub.com/open-telemetry/opentelemetry-collector/releases/tag/v0.97.0)
for changelogs on specific components.
#### Changelog
-
[`5e80f5f`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/5e80f5f)
Release version v0.97.0
([#511](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/511))
-
[`095d2ba`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/095d2ba)
Automate release notes generation using goreleaser(closes
[#498](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/498))
([#504](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/504))
-
[`bcdf91c`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/bcdf91c)
Enhancement/update dependencies
([#508](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/508))
-
[`f143a2d`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/f143a2d)
\[rpm/configfile] change behaviour when upgrading the package
([#503](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/503))
-
[`52c80c0`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/52c80c0)
Add opampextension
([#506](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/506))
-
[`7e0fd67`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/7e0fd67)
Create core distribution component criteria
([#500](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/500))
-
[`d9b10e5`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/d9b10e5)
docs: add Windows MSI package to distro expectations
([#501](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/501))
-
[`aff8845`](https://togithub.com/open-telemetry/opentelemetry-collector-releases/commit/aff8845)
Bump anchore/sbom-action from 0.15.8 to 0.15.9
([#499](https://togithub.com/open-telemetry/opentelemetry-collector-releases/issues/499))
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* Update module github.com/aws/aws-sdk-go to v1.51.8 (#31988)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/aws/aws-sdk-go](https://togithub.com/aws/aws-sdk-go) |
`v1.51.7` -> `v1.51.8` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go/v1.51.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go/v1.51.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go/v1.51.7/v1.51.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go/v1.51.7/v1.51.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
aws/aws-sdk-go (github.com/aws/aws-sdk-go)
###
[`v1.51.8`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1518-2024-03-26)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.7...v1.51.8)
\===
##### Service Client Updates
- `service/bedrock-agent-runtime`: Updates service API and documentation
- `service/ce`: Updates service API, documentation, and paginators
- `service/ec2`: Updates service API and documentation
- Documentation updates for Elastic Compute Cloud (EC2).
- `service/ecs`: Updates service documentation
- This is a documentation update for Amazon ECS.
- `service/finspace`: Updates service API and documentation
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/open-telemetry/opentelemetry-collector-contrib/internal/common to v0.97.0 (#31987)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/open-telemetry/opentelemetry-collector-contrib/internal/common](https://togithub.com/open-telemetry/opentelemetry-collector-contrib)
| `v0.96.0` -> `v0.97.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2finternal%2fcommon/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2finternal%2fcommon/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2finternal%2fcommon/v0.96.0/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2finternal%2fcommon/v0.96.0/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
open-telemetry/opentelemetry-collector-contrib
(github.com/open-telemetry/opentelemetry-collector-contrib/internal/common)
###
[`v0.97.0`](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/blob/HEAD/CHANGELOG.md#v0970)
[Compare
Source](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.96.0...v0.97.0)
##### 🛑 Breaking changes 🛑
- `datadogconnector`: Remove feature gate
`connector.datadogconnector.performance`
([#31638](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31638))
- `cmd/mdatagen`: Delete deprecated cmd/mdatagen from this project. Use
go.opentelemetry.io/collector/cmd/mdatagen instead.
([#30497](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30497))
- `receiver/postgresql`: Bump postgresqlreceiver.preciselagmetrics gate
to beta
([#31220](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31220))
- `receiver/vcenter`: Bump receiver.vcenter.emitPerfMetricsWithObjects
feature gate to stable
([#31215](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31215))
- `prometheusreceiver`: Remove enable_protobuf_negotiation option on the
prometheus receiver. Use config.global.scrape_protocols = \[
PrometheusProto, OpenMetricsText1.0.0, OpenMetricsText0.0.1,
PrometheusText0.0.4 ] instead.
([#30883](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30883))
See
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file
for details on setting scrape_protocols.
- `vcenterreceiver`: Fixed the resource attribute model to more
accurately support multi-cluster deployments
([#30879](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30879))
For more information on impacts please
re[https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31113](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/pull/31113)1113.
The main impacts are that
the `vcenter.resource_pool.name`,
`vcenter.resource_pool.inventory_path`, and `vcenter.cluster.name` are
reported with more accuracy on VM metrics.
##### 🚩 Deprecations 🚩
- `instanaexporter`: Mark the Instana Exporter as deprecated.
([#31765](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31765))
##### 🚀 New components 🚀
- `awss3receiver`: introduce the AWS S3 receiver
([#30750](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30750))
- `sumologicextension`: promote to `alpha` stability
([#29601](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29601))
- `googleclientauthextension`: Add boilerplate for Google Client Auth
Extension
([#31412](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31412))
- `grafanacloudconnector`: Adds a connector to generate metrics for
Grafana Cloud.
([#31647](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31647))
- `rabbitmqexporter`: Add new exporter for sending telemetry to RabbitMQ
brokers using the AMQP 0.9.1 protocol
([#28891](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/28891))
##### 💡 Enhancements 💡
- `exporter/loadbalancingexporter`: Adding AWS Cloud Map for service
discovery of Collectors backend.
([#27241](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/27241))
- `ottl`: Add new function to decode a base64 encoded string and output
the original string
([#31543](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31543))
- `ackextension`: adding the in-memory implementation of the
ackextension
([#26376](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/26376))
- `awss3exporter`: add `compression` option to enable file compression
on S3
([#27872](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/27872))
Add `compression` option to compress files using `compress/gzip` library
before uploading to S3.
- `servicegraphprocessor`: Added a new configuration option
`database_name_attribute` to allow users to specify a custom attribute
name for identifying the database name in span attributes.
([#30726](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30726))
- `awss3exporter`: Add support for encoding extension to awss3exporter
([#30554](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30554))
- `processor/k8sattributes`: Add support for `k8s.node.uid` metadata
([#31637](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31637))
- `awss3exporter`: Add support for specifying the file extension for
files uploaded to S3 when using an encoding extension.
([#31818](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31818))
- `datadogexporter`: Datadog exporter uses the same default HTTP
settings as Datadog Agent HTTP transport
([#31733](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31733))
- `datadogexporter`: Datadog exporter respects a subset of settings in
confighttp client configs
([#31733](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31733))
Currently the following configs are respected: `read_buffer_size`,
`write_buffer_size`, `timeout`, `max_idle_conns`,
`max_idle_conns_per_host`, `max_conns_per_host`, `idle_conn_timeout`,
`disable_keep_alives` and `tls.insecure_skip_verify`.
- `deltatocumulativeprocessor`: introduce configurable stream limit
([#31488](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31488))
Adds `max_streams` option that allows to set upper bound (default =
unlimited)
to the number of tracked streams. Any additional streams exceeding the
limit
are dropped.
- `deltatocumulativeprocessor`: expire stale series
([#30705](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30705),
[#31016](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31016))
Adds `max_stale` option that allows to set an interval (default =
`5min`)
after which a series that no longer receives new samples is removed from
tracking.
- `datadogconnector`: Add a new option to the Datadog connector to
enable container tags on stats Payloads.
([#31642](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31642))
This change adds a new option to the Datadog connector to enable
container tags on stats Payloads. This is useful for users who want to
use container tags as second primary tag for Datadog APM.
- `dockerstatsreceiver`: add metrics for online CPU count and memory
fails count
([#31366](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31366))
- `fileexporter`: Adopt the encoding extension with the file exporter.
([#31774](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31774))
- `pkg/ottl`: Add `ParseXML` function for parsing XML from a target
string.
([#31133](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31133))
- `fileexporter`: Added the option to write telemetry data into multiple
files, where the file path is based on a resource attribute.
([#24654](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/24654))
- `fileexporter`: File write mode is configurable now (truncate or
append)
([#31364](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31364))
- `elasticsearchexporter`: When timestamp is not set, use
observedTimestamp
([#11752](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/11752))
- `k8sclusterreceiver`: add optional status_last_terminated_reason
resource attribute
([#31282](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31282))
- `awsproxyextension`: Expose service_name as configurable option.
Previously, it was hardcoded as xray.
([#29550](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29550))
- `datadogexporter`: Add new telemetry metric,
`otelcol_datadog_otlp_translator_resources_missing_source` that counts
OTLP resources missing a hostname-identifying attribute.
([#31805](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31805))
- Enable Collector metrics
https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/troubleshooting.md#metrics
to check for this metric.
- `extension/opamp`: Promote the OpAMP extension to alpha stability
([#31616](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31616))
- `prometheusremotewriteexporter`: Publish telemetry about translation
of metrics from Otel to Prometheus. Don't drop all data points if some
fail translation.
([#29729](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29729))
- `prometheusreceiver`: Use confighttp for target allocator client
([#31449](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31449))
- `spanmetricsconnector`: Add `metrics_expiration` option to enable
expiration of metrics if spans are not received within a certain time
frame.
([#30559](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30559))
The feature can be configured by specifiying the desired duration in the
`metrics_expiration` option. By default, the expiration is disabled (set
to 0).
- `splunkentreceiver`: Updated the config.go and propogated these
changes to other receiver components. Change was necessary to
differentiate different configurable endpoints.
([#30254](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30254))
- `exporter/datadogexporter`: Do not drop traces when payload channel is
full.
([#31893](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31893))
- `connector/datadogconnector`: Do not resolve container tags if payload
already has tags associated with it.
([#31893](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31893))
##### 🧰 Bug fixes 🧰
- `bigipreceiver`: Fix potential nil pointer usage in GetPoolMembers
([#31899](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31899))
- `carbonreceiver`: Do not report fatal error when closed normally
([#31913](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31913))
- `datadogexporter`: Fix data race in metrics exporter shutdown
([#31663](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31663))
- `deltatocumulativeprocessor`: timer-based expiry
([#31615](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31615))
converts expiry to 1m timer, eliminating a race condition and failing
test
- `telemetrygen`: Do not use WithBlock when forming grpc connections for
metrics/traces in telemetrygen to avoid infinite retry after failure
([#31401](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31401))
- `filestatsreceiver`: Fix file.path to return the proper absolute path
of the file
([#31738](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31738))
- `internal/docker`: Updated docker dependency and fixed zap.String
incompatibility
([#31087](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31087))
- `exporter/loadbalancing`: Fix panic when a sub-exporter is shut down
while still handling requests.
([#31410](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31410))
- `cmd/telemetrygen`: Fixed key mapping for logs telemetry attributes.
([#31309](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31309))
- `exporter/awskinesisexporter`: Fix the capacity of records slices in
the initialized batch
([#20914](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/20914))
- `hostmetricsreceiver`: Adds the
receiver.hostmetrics.normalizeProcessCPUUtilization feature gate to
optionally normalize process.cpu.utilization values.
([#31368](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31368))
When enabled, the receiver.hostmetrics.normalizeProcessCPUUtilization
feature gate will cause process.cpu.utilization values to be divided by
the number of logical cores on the system. This is necessary to produce
a value on the interval of \[0-1], as the description of
process.cpu.utilization the metric says.
- `transformprocessor`: Change metric unit for metrics extracted with
`extract_count_metric()` to be the default unit (`1`)
([#31575](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31575))
The original metric `unit` does not apply to extracted `count` metrics
the same way it does to `sum`, `min` or `max`.
Metrics extracted using `extract_count_metric()` now use the more
appropriate default unit (`1`) instead.
- `dockerstatsreceiver`: Add shutdown method to fix leaking goroutines
([#30438](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30438))
- `loadbalancingexporter`: Fix memory leaks on shutdown
([#31050](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31050))
- `signalfxexporter`: Fix memory leak in shutdown
([#30864](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30864),
[#30438](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30438))
- `servicegraphprocessor`: Fix 'failed to find dimensions for key' error
from race condition in metrics cleanup.
([#31701](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31701))
- `processor/k8sattributes`: Allows k8sattributes processor to work with
k8s role/rolebindings when filter::namespace is set.
([#14742](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/14742))
- `exporter/datadog`: Demote noisy gohai logs to debug level
([#29741](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29741))
These logs would be present at the info level when using the official
Docker images but were not useful to end-users.
- `opencensusreceiver`: Refactor the opencensusreceiver to pass
lifecycle tests and avoid leaking gRPC connections.
([#31643](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31643))
- `sqlqueryreceiver`: Fix memory leak on shutdown for log telemetry
([#31782](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31782))
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* [receiver/kafka] Fix panic on shutdown (#31927)
**Description:** Fixing panic on shutdown
**Link to tracking Issue:** https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31926
* Update module github.com/prometheus/common to v0.51.1 (#31961)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/prometheus/common](https://togithub.com/prometheus/common)
| `v0.50.0` -> `v0.51.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fprometheus%2fcommon/v0.51.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fprometheus%2fcommon/v0.51.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fprometheus%2fcommon/v0.50.0/v0.51.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fprometheus%2fcommon/v0.50.0/v0.51.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
prometheus/common (github.com/prometheus/common)
###
[`v0.51.1`](https://togithub.com/prometheus/common/releases/tag/v0.51.1)
[Compare
Source](https://togithub.com/prometheus/common/compare/v0.51.0...v0.51.1)
#### What's Changed
- Synchronize common files from prometheus/prometheus by
[@prombot](https://togithub.com/prombot) in
[https://github.com/prometheus/common/pull/606](https://togithub.com/prometheus/common/pull/606)
- Synchronize common files from prometheus/prometheus by
[@prombot](https://togithub.com/prombot) in
[https://github.com/prometheus/common/pull/609](https://togithub.com/prometheus/common/pull/609)
- Retract v0.50.0 by [@SuperQ](https://togithub.com/SuperQ) in
[https://github.com/prometheus/common/pull/610](https://togithub.com/prometheus/common/pull/610)
**Full Changelog**:
https://github.com/prometheus/common/compare/v0.51.0...v0.51.1
###
[`v0.51.0`](https://togithub.com/prometheus/common/releases/tag/v0.51.0)
[Compare
Source](https://togithub.com/prometheus/common/compare/v0.50.0...v0.51.0)
#### What's Changed
- Synchronize common files from prometheus/prometheus by
[@prombot](https://togithub.com/prombot) in
[https://github.com/prometheus/common/pull/604](https://togithub.com/prometheus/common/pull/604)
- expfmt: Add a way to generate different OpenMetrics Formats by
[@ywwg](https://togithub.com/ywwg) in
[https://github.com/prometheus/common/pull/596](https://togithub.com/prometheus/common/pull/596)
- Fix string slice definition for FormatFlagOptions. by
[@gizmoguy](https://togithub.com/gizmoguy) in
[https://github.com/prometheus/common/pull/607](https://togithub.com/prometheus/common/pull/607)
- Correct logic in sample naming for counters, add new test by
[@vesari](https://togithub.com/vesari) in
[https://github.com/prometheus/common/pull/608](https://togithub.com/prometheus/common/pull/608)
#### New Contributors
- [@gizmoguy](https://togithub.com/gizmoguy) made their first
contribution in
[https://github.com/prometheus/common/pull/607](https://togithub.com/prometheus/common/pull/607)
**Full Changelog**:
https://github.com/prometheus/common/compare/v0.50.0...v0.51.0
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [loadbalancingexporter] Support the timeout period of k8s resolver list watch can be configured (#31904)
**Link to tracking Issue:** close
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31757
---------
Signed-off-by: Jared Tan
* fix(deps): update module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen to v0.97.0 (#31986)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen](https://togithub.com/open-telemetry/opentelemetry-collector-contrib)
| `v0.96.0` -> `v0.97.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2fcmd%2ftelemetrygen/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2fcmd%2ftelemetrygen/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2fcmd%2ftelemetrygen/v0.96.0/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fopen-telemetry%2fopentelemetry-collector-contrib%2fcmd%2ftelemetrygen/v0.96.0/v0.97.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
open-telemetry/opentelemetry-collector-contrib
(github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen)
###
[`v0.97.0`](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/blob/HEAD/CHANGELOG.md#v0970)
[Compare
Source](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/compare/v0.96.0...v0.97.0)
##### 🛑 Breaking changes 🛑
- `datadogconnector`: Remove feature gate
`connector.datadogconnector.performance`
([#31638](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31638))
- `cmd/mdatagen`: Delete deprecated cmd/mdatagen from this project. Use
go.opentelemetry.io/collector/cmd/mdatagen instead.
([#30497](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30497))
- `receiver/postgresql`: Bump postgresqlreceiver.preciselagmetrics gate
to beta
([#31220](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31220))
- `receiver/vcenter`: Bump receiver.vcenter.emitPerfMetricsWithObjects
feature gate to stable
([#31215](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31215))
- `prometheusreceiver`: Remove enable_protobuf_negotiation option on the
prometheus receiver. Use config.global.scrape_protocols = \[
PrometheusProto, OpenMetricsText1.0.0, OpenMetricsText0.0.1,
PrometheusText0.0.4 ] instead.
([#30883](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30883))
See
https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file
for details on setting scrape_protocols.
- `vcenterreceiver`: Fixed the resource attribute model to more
accurately support multi-cluster deployments
([#30879](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30879))
For more information on impacts please
re[https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31113](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/pull/31113)1113.
The main impacts are that
the `vcenter.resource_pool.name`,
`vcenter.resource_pool.inventory_path`, and `vcenter.cluster.name` are
reported with more accuracy on VM metrics.
##### 🚩 Deprecations 🚩
- `instanaexporter`: Mark the Instana Exporter as deprecated.
([#31765](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31765))
##### 🚀 New components 🚀
- `awss3receiver`: introduce the AWS S3 receiver
([#30750](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30750))
- `sumologicextension`: promote to `alpha` stability
([#29601](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29601))
- `googleclientauthextension`: Add boilerplate for Google Client Auth
Extension
([#31412](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31412))
- `grafanacloudconnector`: Adds a connector to generate metrics for
Grafana Cloud.
([#31647](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31647))
- `rabbitmqexporter`: Add new exporter for sending telemetry to RabbitMQ
brokers using the AMQP 0.9.1 protocol
([#28891](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/28891))
##### 💡 Enhancements 💡
- `exporter/loadbalancingexporter`: Adding AWS Cloud Map for service
discovery of Collectors backend.
([#27241](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/27241))
- `ottl`: Add new function to decode a base64 encoded string and output
the original string
([#31543](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31543))
- `ackextension`: adding the in-memory implementation of the
ackextension
([#26376](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/26376))
- `awss3exporter`: add `compression` option to enable file compression
on S3
([#27872](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/27872))
Add `compression` option to compress files using `compress/gzip` library
before uploading to S3.
- `servicegraphprocessor`: Added a new configuration option
`database_name_attribute` to allow users to specify a custom attribute
name for identifying the database name in span attributes.
([#30726](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30726))
- `awss3exporter`: Add support for encoding extension to awss3exporter
([#30554](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30554))
- `processor/k8sattributes`: Add support for `k8s.node.uid` metadata
([#31637](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31637))
- `awss3exporter`: Add support for specifying the file extension for
files uploaded to S3 when using an encoding extension.
([#31818](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31818))
- `datadogexporter`: Datadog exporter uses the same default HTTP
settings as Datadog Agent HTTP transport
([#31733](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31733))
- `datadogexporter`: Datadog exporter respects a subset of settings in
confighttp client configs
([#31733](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31733))
Currently the following configs are respected: `read_buffer_size`,
`write_buffer_size`, `timeout`, `max_idle_conns`,
`max_idle_conns_per_host`, `max_conns_per_host`, `idle_conn_timeout`,
`disable_keep_alives` and `tls.insecure_skip_verify`.
- `deltatocumulativeprocessor`: introduce configurable stream limit
([#31488](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31488))
Adds `max_streams` option that allows to set upper bound (default =
unlimited)
to the number of tracked streams. Any additional streams exceeding the
limit
are dropped.
- `deltatocumulativeprocessor`: expire stale series
([#30705](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30705),
[#31016](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31016))
Adds `max_stale` option that allows to set an interval (default =
`5min`)
after which a series that no longer receives new samples is removed from
tracking.
- `datadogconnector`: Add a new option to the Datadog connector to
enable container tags on stats Payloads.
([#31642](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31642))
This change adds a new option to the Datadog connector to enable
container tags on stats Payloads. This is useful for users who want to
use container tags as second primary tag for Datadog APM.
- `dockerstatsreceiver`: add metrics for online CPU count and memory
fails count
([#31366](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31366))
- `fileexporter`: Adopt the encoding extension with the file exporter.
([#31774](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31774))
- `pkg/ottl`: Add `ParseXML` function for parsing XML from a target
string.
([#31133](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31133))
- `fileexporter`: Added the option to write telemetry data into multiple
files, where the file path is based on a resource attribute.
([#24654](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/24654))
- `fileexporter`: File write mode is configurable now (truncate or
append)
([#31364](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31364))
- `elasticsearchexporter`: When timestamp is not set, use
observedTimestamp
([#11752](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/11752))
- `k8sclusterreceiver`: add optional status_last_terminated_reason
resource attribute
([#31282](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31282))
- `awsproxyextension`: Expose service_name as configurable option.
Previously, it was hardcoded as xray.
([#29550](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29550))
- `datadogexporter`: Add new telemetry metric,
`otelcol_datadog_otlp_translator_resources_missing_source` that counts
OTLP resources missing a hostname-identifying attribute.
([#31805](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31805))
- Enable Collector metrics
https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/troubleshooting.md#metrics
to check for this metric.
- `extension/opamp`: Promote the OpAMP extension to alpha stability
([#31616](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31616))
- `prometheusremotewriteexporter`: Publish telemetry about translation
of metrics from Otel to Prometheus. Don't drop all data points if some
fail translation.
([#29729](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29729))
- `prometheusreceiver`: Use confighttp for target allocator client
([#31449](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31449))
- `spanmetricsconnector`: Add `metrics_expiration` option to enable
expiration of metrics if spans are not received within a certain time
frame.
([#30559](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30559))
The feature can be configured by specifiying the desired duration in the
`metrics_expiration` option. By default, the expiration is disabled (set
to 0).
- `splunkentreceiver`: Updated the config.go and propogated these
changes to other receiver components. Change was necessary to
differentiate different configurable endpoints.
([#30254](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30254))
- `exporter/datadogexporter`: Do not drop traces when payload channel is
full.
([#31893](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31893))
- `connector/datadogconnector`: Do not resolve container tags if payload
already has tags associated with it.
([#31893](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31893))
##### 🧰 Bug fixes 🧰
- `bigipreceiver`: Fix potential nil pointer usage in GetPoolMembers
([#31899](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31899))
- `carbonreceiver`: Do not report fatal error when closed normally
([#31913](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31913))
- `datadogexporter`: Fix data race in metrics exporter shutdown
([#31663](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31663))
- `deltatocumulativeprocessor`: timer-based expiry
([#31615](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31615))
converts expiry to 1m timer, eliminating a race condition and failing
test
- `telemetrygen`: Do not use WithBlock when forming grpc connections for
metrics/traces in telemetrygen to avoid infinite retry after failure
([#31401](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31401))
- `filestatsreceiver`: Fix file.path to return the proper absolute path
of the file
([#31738](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31738))
- `internal/docker`: Updated docker dependency and fixed zap.String
incompatibility
([#31087](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31087))
- `exporter/loadbalancing`: Fix panic when a sub-exporter is shut down
while still handling requests.
([#31410](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31410))
- `cmd/telemetrygen`: Fixed key mapping for logs telemetry attributes.
([#31309](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31309))
- `exporter/awskinesisexporter`: Fix the capacity of records slices in
the initialized batch
([#20914](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/20914))
- `hostmetricsreceiver`: Adds the
receiver.hostmetrics.normalizeProcessCPUUtilization feature gate to
optionally normalize process.cpu.utilization values.
([#31368](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31368))
When enabled, the receiver.hostmetrics.normalizeProcessCPUUtilization
feature gate will cause process.cpu.utilization values to be divided by
the number of logical cores on the system. This is necessary to produce
a value on the interval of \[0-1], as the description of
process.cpu.utilization the metric says.
- `transformprocessor`: Change metric unit for metrics extracted with
`extract_count_metric()` to be the default unit (`1`)
([#31575](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31575))
The original metric `unit` does not apply to extracted `count` metrics
the same way it does to `sum`, `min` or `max`.
Metrics extracted using `extract_count_metric()` now use the more
appropriate default unit (`1`) instead.
- `dockerstatsreceiver`: Add shutdown method to fix leaking goroutines
([#30438](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30438))
- `loadbalancingexporter`: Fix memory leaks on shutdown
([#31050](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31050))
- `signalfxexporter`: Fix memory leak in shutdown
([#30864](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30864),
[#30438](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/30438))
- `servicegraphprocessor`: Fix 'failed to find dimensions for key' error
from race condition in metrics cleanup.
([#31701](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31701))
- `processor/k8sattributes`: Allows k8sattributes processor to work with
k8s role/rolebindings when filter::namespace is set.
([#14742](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/14742))
- `exporter/datadog`: Demote noisy gohai logs to debug level
([#29741](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/29741))
These logs would be present at the info level when using the official
Docker images but were not useful to end-users.
- `opencensusreceiver`: Refactor the opencensusreceiver to pass
lifecycle tests and avoid leaking gRPC connections.
([#31643](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31643))
- `sqlqueryreceiver`: Fix memory leak on shutdown for log telemetry
([#31782](https://togithub.com/open-telemetry/opentelemetry-collector-contrib/issues/31782))
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update module google.golang.org/api to v0.171.0 (#31995)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://togithub.com/googleapis/google-api-go-client)
| `v0.170.0` -> `v0.171.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.171.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.171.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.170.0/v0.171.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.170.0/v0.171.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
googleapis/google-api-go-client
(google.golang.org/api)
###
[`v0.171.0`](https://togithub.com/googleapis/google-api-go-client/releases/tag/v0.171.0)
[Compare
Source](https://togithub.com/googleapis/google-api-go-client/compare/v0.170.0...v0.171.0)
##### Features
- **all:** Auto-regenerate discovery clients
([#2472](https://togithub.com/googleapis/google-api-go-client/issues/2472))
([b300fd0](https://togithub.com/googleapis/google-api-go-client/commit/b300fd0d0843cec7c1a990ffa03d6e17b085ee6f))
- **all:** Auto-regenerate discovery clients
([#2474](https://togithub.com/googleapis/google-api-go-client/issues/2474))
([a4064ba](https://togithub.com/googleapis/google-api-go-client/commit/a4064baec9b12a3ad2f0829ea1fe5c488ade15a4))
- **all:** Auto-regenerate discovery clients
([#2475](https://togithub.com/googleapis/google-api-go-client/issues/2475))
([22b2f13](https://togithub.com/googleapis/google-api-go-client/commit/22b2f1350176e591df8fd25c7be54b6f3a63cc3c))
- **all:** Auto-regenerate discovery clients
([#2480](https://togithub.com/googleapis/google-api-go-client/issues/2480))
([09097b0](https://togithub.com/googleapis/google-api-go-client/commit/09097b0db6599abebb724be3ed3dbc9e8a1d175e))
- **all:** Auto-regenerate discovery clients
([#2482](https://togithub.com/googleapis/google-api-go-client/issues/2482))
([b91cca7](https://togithub.com/googleapis/google-api-go-client/commit/b91cca714babc7bd3c13a739f3d09b77c12ca50a))
- **all:** Auto-regenerate discovery clients
([#2483](https://togithub.com/googleapis/google-api-go-client/issues/2483))
([9599561](https://togithub.com/googleapis/google-api-go-client/commit/9599561e4d8d2e281b80c2f2541c8933c03d1198))
##### Bug Fixes
- **transport:** Return GDU for all errors from MDS universe_domain
([#2484](https://togithub.com/googleapis/google-api-go-client/issues/2484))
([63b7c0d](https://togithub.com/googleapis/google-api-go-client/commit/63b7c0dece0773b1074956e6c134817c5cdb2606)),
refs
[#2399](https://togithub.com/googleapis/google-api-go-client/issues/2399)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [receiver/prometheusreceiver] Use Prometheus Labels public method API (#31908)
**Description:**
By only using the public method API for Prometheus labels (rather than
assuming `labels.Labels` is an alias of a slice) it opens up the
possibility to build a collector with the `stringlabels` tag, so we can
use the more memory efficient labels implementation.
**Link to tracking Issue:** #31907
**Testing:**
I had trouble running all of the tests locally, so I think I will need
some help with making that work. I did run all the tests I changed with
`-tags=stringlabels` and without it.
* [connector/exceptions] copy span attributes to generate logs from exceptions (#31835)
**Description:** In #24410 we discussed the idea of making configurable
the list of span attributes to copy
over to generated logs. By default only HTTP were copied. This PR
changes the default behavior to copy
all span attributes and recommend to use transformprocessor to remove
all unwanted attributes.
**Link to tracking Issue:** Resolves #24410
**Documentation:** Clarified in docs which attributes are copied.
---------
Co-authored-by: Curtis Robert
* [exporter/datadogexporter] update ConfigMap verbiage in system metrics for clarity (#31990)
**Description:**
Changing "Comment out..." to "Uncomment" as "comment out" usually means
to remove parsable code by adding comment notation, not removing
comments to make the code parsable. This could cause some confusion.
* [extension/jaegarremotesamplingextension/internal] add goleak tests for jaegerremotesampling extension (#31661)
Related to
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30438
Resolves #31157
Signed-off-by: Israel Blancas
* [chore] Sync internal/common/localhostgate (#31965)
**Description:** Syncs localhostgate with core after changes in
open-telemetry/opentelemetry-collector/pull/9852
* [chore] [receiver/dockerstats] Remove stable feature gate (#31999)
Remove `receiver.dockerstats.useScraperV2` feature gate
* [chore] [internal/attraction] Remove stable feature gate (#31997)
Remove `coreinternal.attraction.hash.sha256` feature gate
* [chore] reuse struct when parsing to avoid recursive parsing (#31727)
**Description:**
This is a companion PR to handle recursive state of unmarshalers with
https://github.com/open-telemetry/opentelemetry-collector/pull/9750.
Changing this behavior will allow the confmap.Conf object to recognize
that it has already run the `Unmarshal` method on the struct, and run
the mapstructure decoding of fields.
* [chore] fix linting (#32004)
**Description:**
This PR should solve the related Issue linked below.
I tried to switch to blank identifiers instead of removing function
arguments, so it could be adapted later on.
linting erros in following pkgs:
- [x] cmd/configschema
- [x] cmd/githubgen
- [x] connector/datadogconnector
- [x] connector/grafanacloudconnector
- [x] connector/servicegraphconnector
- [x] exporter/awsemfexporter
- [x] exporter/awsxrayexporter
- [x] exporter/clickhouseexporter
- [x] exporter/datadogexporter
- [x] exporter/dynatraceexporter
- [x] exporter/elasticsearchexporter
- [x] exporter/honeycombmarkerexporter
- [x] exporter/influxdbexporter
- [x] exporter/instanaexporter
- [x] exporter/kafkaexporter
- [x] exporter/kineticaexporter
- [x] exporter/loadbalancingexporter
- [x] exporter/logicmonitorexporter
- [x] exporter/logzioexporter
- [x] exporter/lokiexporter
- [x] exporter/mezmoexporter
- [x] exporter/opensearchexporter
- [x] exporter/prometheusexporter
- [x] exporter/signalfxexporter
- [x] exporter/splunkhecexporter
- [x] exporter/sumologicexporter
- [x] exporter/zipkinexporter
- [x] extension/jaegerremotesampling
- [x] extension/oauth2clientauthextension
- [x] extension/observer
- [x] extension/oidcauthextension
- [x] extension/sumologicextension
- [x] internal/aws
- [x] internal/coreinternal
- [x] internal/filter
- [x] internal/kubelet
- [x] internal/metadataproviders
- [x] internal/sharedcomponent
- [x] pkg/ottl
- [x] pkg/pdatautil
- [x] pkg/stanza
- [x] pkg/translator
- [x] processor/deltatocumulativeprocessor
- [x] processor/filterprocessor
- [x] processor/groupbytraceprocessor
- [x] processor/k8sattributesprocessor
- [x] processor/logstransformprocessor
- [x] processor/metricstransformprocessor
- [x] processor/resourcedetectionprocessor
- [x] processor/tailsamplingprocessor
- [x] processor/transformprocessor
- [x] receiver/awscontainerinsightreceiver
- [x] receiver/chronyreceiver
- [x] receiver/splunkhecreceiver
- [x] receiver/sqlqueryreceiver
- [x] receiver/vcenterreceiver
- [x] receiver/webhookeventreceiver
- [x] receiver/zookeeperreceiver
**Link to tracking Issue:**
- #31240
**Testing:**
**Documentation:**
* [chore] linting fix of recent pr (#32006)
**Description:**
quick fix of recent pr with linting error (for updating linter)
**Link to tracking Issue:**
- #31240
---------
Co-authored-by: Dmitrii Anoshin
* [pkg/stanza] Add regexp based tests & examples for filter operator (#31698)
**Description:**
This PR adds some additional unit tests and examples to cover the regexp
based filter-in/filter-out functionalities of the [filter
operator](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/pkg/stanza/docs/operators/filter.md).
This is an important functionality spotted during a comparison of the
`filelogreceiver`'s capabilities with those of
[Filebeat](https://github.com/elastic/beats/tree/main/filebeat#filebeat).
[Filebeat](https://github.com/elastic/beats/tree/main/filebeat#filebeat)'s
[filestream
input](https://github.com/elastic/beats/tree/main/filebeat/input/filestream)
supports this filtering with its
[include_lines](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-filestream.html#filebeat-input-filestream-include-lines)
and
[exclude_lines](https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-filestream.html#filebeat-input-filestream-exclude-lines)
options.
The added tests and examples are to ensure the parity of this
capability.
**Link to tracking Issue:**
**Testing:**
-
[FilterOutRegexp](https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31698/files#diff-01d783f62fa2a61d9fbfe9342f0ea20629604563c550cee56b0fa0ba179556a1R50)
-
[FilterInRegexp](https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31698/files#diff-01d783f62fa2a61d9fbfe9342f0ea20629604563c550cee56b0fa0ba179556a1R60)
**Documentation:**
Added the [Filtering log messages based on
content](https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31698/files#diff-7156c0db24790afae5276c0908dd0e02ecc7c23947607996d50008b8e4ab574dR1)
example.
PS: I'm not sure if that change technically require a changelog entry.
If so, please let me know.
Signed-off-by: ChrsMark
* fix(deps): update module github.com/golangci/golangci-lint to v1.57.1 (#31830)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/golangci/golangci-lint](https://togithub.com/golangci/golangci-lint)
| `v1.55.2` -> `v1.57.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgolangci%2fgolangci-lint/v1.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgolangci%2fgolangci-lint/v1.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgolangci%2fgolangci-lint/v1.55.2/v1.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgolangci%2fgolangci-lint/v1.55.2/v1.57.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
golangci/golangci-lint
(github.com/golangci/golangci-lint)
###
[`v1.57.1`](https://togithub.com/golangci/golangci-lint/releases/tag/v1.57.1)
[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.57.0...v1.57.1)
#### Changelog
-
[`87b6bf1`](https://togithub.com/golangci/golangci-lint/commit/87b6bf17)
build(deps): bump github.com/golangci/plugin-module-register from 0.1.0
to 0.1.1
([#4549](https://togithub.com/golangci/golangci-lint/issues/4549))
-
[`921d535`](https://togithub.com/golangci/golangci-lint/commit/921d5357)
build(deps): bump github.com/pelletier/go-toml/v2 from 2.1.1 to 2.2.0
([#4548](https://togithub.com/golangci/golangci-lint/issues/4548))
-
[`cd890db`](https://togithub.com/golangci/golangci-lint/commit/cd890db2)
fix: filter invalid issues before other processors
([#4552](https://togithub.com/golangci/golangci-lint/issues/4552))
###
[`v1.57.0`](https://togithub.com/golangci/golangci-lint/compare/v1.56.2...v1.57.0)
[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.56.2...v1.57.0)
###
[`v1.56.2`](https://togithub.com/golangci/golangci-lint/blob/HEAD/CHANGELOG.md#v1562)
[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.56.1...v1.56.2)
1. updated linters
- `go-critic`: from 0.11.0 to 0.11.1
- `gosec`: from 2.18.2 to 2.19.0
- `testifylint`: from 1.1.1 to 1.1.2
- `usestdlibvars`: from 1.24.0 to 1.25.0
- `wsl`: from 4.2.0 to 4.2.1
2. misc.
- Fix missing version in Docker image
3. Documentation
- Explain the limitation of new-from-rev and new-from-patch
###
[`v1.56.1`](https://togithub.com/golangci/golangci-lint/blob/HEAD/CHANGELOG.md#v1561)
[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.56.0...v1.56.1)
1. updated linters
- `errcheck`: from 1.6.3 to 1.7.0
- `govet`: disable `loopclosure` with go1.22
- `revive`: from 1.3.6 to 1.3.7
- `testifylint`: from 1.1.0 to 1.1.1
###
[`v1.56.0`](https://togithub.com/golangci/golangci-lint/blob/HEAD/CHANGELOG.md#v1560)
[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.55.2...v1.56.0)
1. new linters
- feat: add `spancheck` linter https://github.com/jjti/go-spancheck
2. updated linters
- `depguard`: from 2.1.0 to 2.2.0
- `exhaustive`: from 0.11.0 to 0.12.0
- `exhaustruct`: from 3.1.0 to 3.2.0
- `gci`: from 0.11.2 to 0.12.1
- `ginkgolinter`: from 0.14.1 to 0.15.2
- `go-check-sumtype`: from 0.1.3 to 0.1.4
- `go-critic`: from 0.9.0 to 0.11.0
- `go-errorlint`: from 1.4.5 to 1.4.8
- `go-spancheck`: from 0.4.2 to 0.5.2
- `goconst`: from 1.6.0 to 1.7.0
- `godot`: from 1.4.15 to 1.4.16
- `gofumpt`: from 0.5.0 to 0.6.0
- `inamedparam`: from 0.1.2 to 0.1.3
- `ineffassign`: from 0.0.0-20230610083614-0e73809eb601 to 0.1.0
- `ireturn`: from 0.2.2 to 0.3.0
- `misspell`: add mode option
- `musttag`: from v0.7.2 to v0.8.0
- `paralleltest`: from 1.0.8 to 1.0.9
- `perfsprint`: from 0.2.0 to 0.6.0
- `protogetter`: from 0.2.3 to 0.3.4
- `revive`: from 1.3.4 to 1.3.6
- `sloglint`: add static-msg option
- `sloglint`: from 0.1.2 to 0.4.0
- `testifylint`: from 0.2.3 to 1.1.0
- `unparam`: from
[`2022122`](https://togithub.com/golangci/golangci-lint/commit/20221223090309)-7455f1af531d
to
[`2024010`](https://togithub.com/golangci/golangci-lint/commit/20240104100049)-c549a3470d14
- `whitespace`: update after moving to the `analysis` package
- `wsl`: from 3.4.0 to 4.2.0
- `zerologlint`: from 0.1.3 to 0.1.5
3. misc.
- 🎉 go1.22 support
- Implement stats per linter with a flag
- fix: make versioning inside Docker image consistent with binaries
- fix: parse Go RC version
4. Documentation
- Add missing fields to .golangci.reference.yml
- Fix noctx description
- Improve .golangci.reference.yml defaults
- Improve typecheck FAQ
- Note that `exhaustruct` struct regular expressions are expected to
match the entire `package/name/structname`
- Adjust wrapcheck ignoreSigs to new defaults
**Important**
`testifylint` has [breaking
changes](https://togithub.com/Antonboom/testifylint/releases/tag/v1.0.0)
about enabling/disabling checks:
- If you were using the option `enable` with a filtered list of checks,
you should either add `disable-all: true` (1) or use `disable` field
(2).
```yml
```
### Example (1)
testifylint:
disable-all: true
enable:
- bool-compare
- compares
- empty
- error-is-as
- error-nil
- expected-actual
- go-require
- float-compare
- len
- nil-compare
- require-error
### - suite-dont-use-pkg
- suite-extra-assert-call
- suite-thelper
```
```yml
### Example (2)
testifylint:
disable:
- suite-dont-use-pkg
```
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [receiver/filelog] Add settings to annotate file owner and group names (#30776)
**Description:** When you want to filter log on a shared host with
multiple user, you want to be able to add owner and group of the file
log. Currenly this lookup it's not possible so it's hard to filter
after.
If include_file_infos is true when reading a file on filelogreceiver, it
will add the file owner as the attribute `log.file.owner` and the file
group as the attribute `log.file.group`.
**Link to tracking Issue:** #30775
**Testing:** Add unity test
**Documentation:** Add documentation on file_input and file log
receiver.
* [chore] Update otel (#32012)
Unbreaks Contrib tests in Core by updating field name from `TLSSetting`
to `Config`.
---------
Signed-off-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
* [receiver/filelog] Fix log level when no matches found (#32011)
Fixes
#https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/26525
again.
* [receiver/syslog] Fix issue where static resource and attributes were ignored (#32010)
Fixes #31849
* [chore] Remove vendor distributions (#32014)
Fixes #30657
This removes all distributions linked to this repository maintained
outside of OpenTelemetry.
* Promote @crobert-1 to Approver (#32009)
Curtis has been a very active contributor to the repository. The
maintainers propose to promote Curtis to Approver.
* [chore] prometheusremotewrite.FromMetrics: Fix createLabels closures wrt. extra labels (#31635)
**Description:**
The functions for adding histogram and sum data points have a logic
error in their `createLabels` closures. The two `createLabels` closures
each take an optional "extras" slice, of label pairs. However, the loop
logic doesn't advance to the next pair, just the first label value in
fact, so if there were more than one extra pair (there isn't currently),
there would be a bug.
I'm refactoring the two `createLabels` closures into a free function by
the same name, that loops correctly over `extras` arguments and handles
if they are of uneven length (ignoring the unpaired `extra`). Also
including a comprehensive test suite for `createLabels`.
Marking the PR as a chore, since as described above, the logic error
should currently not cause a bug.
**Link to tracking Issue:**
**Testing:**
I've tested locally, there shouldn't be any practical changes since the
`createLabels` closures are only called with one extra label pair at
most.
**Documentation:**
---------
Signed-off-by: Arve Knudsen
* Promote @astencel-sumo to Maintainer (#32008)
Andrzej contributed a lot to the repository. The maintainers propose to
promote Andrzej to Maintainer.
* Bump GCP dependencies and enable lifecycle tests (#32002)
**Description:**
Replaces
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31979.
Updates GCP dependencies and adds calls to `Start()` functions. Also
enables shutdown tests for GCP components (ref
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/30524)
**Link to tracking Issue:** n/a
**Testing:** Downstream unit and integration tests
**Documentation:** No change
---------
Co-authored-by: David Ashpole
* fix(deps): update module github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common to v1.0.887 (#31957)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common](https://togithub.com/tencentcloud/tencentcloud-sdk-go)
| `v1.0.884` -> `v1.0.887` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.887?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.887?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.884/v1.0.887?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.884/v1.0.887?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
tencentcloud/tencentcloud-sdk-go
(github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common)
###
[`v1.0.887`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10887)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.886...v1.0.887)
#### 消息队列 CKafka 版(ckafka) 版本:2019-08-19
##### 第 99 次发布
发布时间:2024-03-27 01:11:34
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateInstancePost](https://cloud.tencent.com/document/api/597/83553)
- **修改入参**:VpcId, SubnetId
#### 数据湖计算 DLC(dlc) 版本:2021-01-25
##### 第 83 次发布
发布时间:2024-03-27 01:14:55
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[QueryTaskCostDetail](https://cloud.tencent.com/document/api/1342/104596)
#### 数据传输服务(dts) 版本:2021-12-06
##### 第 26 次发布
发布时间:2024-03-27 01:15:59
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeSubscribeDetail](https://cloud.tencent.com/document/api/571/102944)
- 新增出参:KafkaVersion
#### 数据传输服务(dts) 版本:2018-03-30
#### 人脸核身(faceid) 版本:2018-03-01
##### 第 73 次发布
发布时间:2024-03-27 01:17:36
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [GetFaceIdToken](https://cloud.tencent.com/document/api/1007/49198)
- 新增入参:RuleId
#### 云压测(pts) 版本:2021-07-28
##### 第 14 次发布
发布时间:2024-03-27 01:23:10
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CreateEnvironment](https://cloud.tencent.com/document/api/1484/104600)
-
[DeleteEnvironments](https://cloud.tencent.com/document/api/1484/104599)
-
[DescribeEnvironments](https://cloud.tencent.com/document/api/1484/104598)
-
[UpdateEnvironment](https://cloud.tencent.com/document/api/1484/104597)
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 81 次发布
发布时间:2024-03-27 01:31:32
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[BatchKillIntegrationTaskInstances](https://cloud.tencent.com/document/api/1267/82538)
- 新增出参:TaskNames
-
[BatchRerunIntegrationTaskInstances](https://cloud.tencent.com/document/api/1267/82536)
- 新增出参:TaskNames
- [CreateDataSource](https://cloud.tencent.com/document/api/1267/80762)
- 新增入参:DevelopmentParams
-
[DescribeAlarmReceiver](https://cloud.tencent.com/document/api/1267/82512)
- 新增入参:RecordId
- **修改入参**:MessageId
- [ModifyDataSource](https://cloud.tencent.com/document/api/1267/80760)
- 新增入参:DevelopmentParams
新增数据结构:
-
[QuietPeriod](https://cloud.tencent.com/document/api/1267/76336#QuietPeriod)
修改数据结构:
-
[AlarmEventInfo](https://cloud.tencent.com/document/api/1267/76336#AlarmEventInfo)
- 新增成员:InQuitePeriods, RecordId
-
[DataSourceInfo](https://cloud.tencent.com/document/api/1267/76336#DataSourceInfo)
- 新增成员:ProductId, DevelopmentId, DevelopmentParams
-
[MakePlanTaskOpsDto](https://cloud.tencent.com/document/api/1267/76336#MakePlanTaskOpsDto)
- 新增成员:InstanceTotalCount
- **修改成员**:TaskBaseInfo, InstanceCount,
CompletePercent, SuccessPercent
-
[TaskAlarmInfo](https://cloud.tencent.com/document/api/1267/76336#TaskAlarmInfo)
- 新增成员:QuietPeriods
###
[`v1.0.886`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10886)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.885...v1.0.886)
#### 消息队列 CKafka 版(ckafka) 版本:2019-08-19
##### 第 99 次发布
发布时间:2024-03-27 01:11:34
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateInstancePost](https://cloud.tencent.com/document/api/597/83553)
- **修改入参**:VpcId, SubnetId
#### 数据湖计算 DLC(dlc) 版本:2021-01-25
##### 第 83 次发布
发布时间:2024-03-27 01:14:55
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[QueryTaskCostDetail](https://cloud.tencent.com/document/api/1342/104596)
#### 数据传输服务(dts) 版本:2021-12-06
##### 第 26 次发布
发布时间:2024-03-27 01:15:59
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeSubscribeDetail](https://cloud.tencent.com/document/api/571/102944)
- 新增出参:KafkaVersion
#### 数据传输服务(dts) 版本:2018-03-30
#### 人脸核身(faceid) 版本:2018-03-01
##### 第 73 次发布
发布时间:2024-03-27 01:17:36
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [GetFaceIdToken](https://cloud.tencent.com/document/api/1007/49198)
- 新增入参:RuleId
#### 云压测(pts) 版本:2021-07-28
##### 第 14 次发布
发布时间:2024-03-27 01:23:10
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CreateEnvironment](https://cloud.tencent.com/document/api/1484/104600)
-
[DeleteEnvironments](https://cloud.tencent.com/document/api/1484/104599)
-
[DescribeEnvironments](https://cloud.tencent.com/document/api/1484/104598)
-
[UpdateEnvironment](https://cloud.tencent.com/document/api/1484/104597)
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 81 次发布
发布时间:2024-03-27 01:31:32
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[BatchKillIntegrationTaskInstances](https://cloud.tencent.com/document/api/1267/82538)
- 新增出参:TaskNames
-
[BatchRerunIntegrationTaskInstances](https://cloud.tencent.com/document/api/1267/82536)
- 新增出参:TaskNames
- [CreateDataSource](https://cloud.tencent.com/document/api/1267/80762)
- 新增入参:DevelopmentParams
-
[DescribeAlarmReceiver](https://cloud.tencent.com/document/api/1267/82512)
- 新增入参:RecordId
- **修改入参**:MessageId
- [ModifyDataSource](https://cloud.tencent.com/document/api/1267/80760)
- 新增入参:DevelopmentParams
新增数据结构:
-
[QuietPeriod](https://cloud.tencent.com/document/api/1267/76336#QuietPeriod)
修改数据结构:
-
[AlarmEventInfo](https://cloud.tencent.com/document/api/1267/76336#AlarmEventInfo)
- 新增成员:InQuitePeriods, RecordId
-
[DataSourceInfo](https://cloud.tencent.com/document/api/1267/76336#DataSourceInfo)
- 新增成员:ProductId, DevelopmentId, DevelopmentParams
-
[MakePlanTaskOpsDto](https://cloud.tencent.com/document/api/1267/76336#MakePlanTaskOpsDto)
- 新增成员:InstanceTotalCount
- **修改成员**:TaskBaseInfo, InstanceCount,
CompletePercent, SuccessPercent
-
[TaskAlarmInfo](https://cloud.tencent.com/document/api/1267/76336#TaskAlarmInfo)
- 新增成员:QuietPeriods
###
[`v1.0.885`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10885)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.884...v1.0.885)
#### 大模型图像创作引擎(aiart) 版本:2022-12-29
##### 第 3 次发布
发布时间:2024-03-26 10:43:03
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[QueryTextToImageProJob](https://cloud.tencent.com/document/api/1668/104584)
-
[SubmitTextToImageProJob](https://cloud.tencent.com/document/api/1668/104583)
#### 云数据库 MySQL(cdb) 版本:2017-03-20
##### 第 154 次发布
发布时间:2024-03-26 01:09:47
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateCloneInstance](https://cloud.tencent.com/document/api/236/50424)
- 新增入参:PayType, Period
新增数据结构:
-
[TaskAttachInfo](https://cloud.tencent.com/document/api/236/15878#TaskAttachInfo)
修改数据结构:
-
[TaskDetail](https://cloud.tencent.com/document/api/236/15878#TaskDetail)
- 新增成员:TaskAttachInfo
#### 消息队列 CKafka 版(ckafka) 版本:2019-08-19
##### 第 98 次发布
发布时间:2024-03-26 01:11:10
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [ModifyAclRule](https://cloud.tencent.com/document/api/597/89216)
- **修改入参**:IsApplied
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 159 次发布
发布时间:2024-03-26 01:16:22
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateFlowApprovers](https://cloud.tencent.com/document/api/1323/80033)
- 新增入参:FlowGroupId
- **修改入参**:FlowId
-
[CreateFlowGroupByFiles](https://cloud.tencent.com/document/api/1323/94888)
- 新增出参:Approvers
-
[CreateFlowGroupByTemplates](https://cloud.tencent.com/document/api/1323/94887)
- 新增出参:Approvers
- [CreateSchemeUrl](https://cloud.tencent.com/document/api/1323/70359)
- 新增入参:FlowGroupUrlInfo
新增数据结构:
-
[FlowGroupApproverInfo](https://cloud.tencent.com/document/api/1323/70369#FlowGroupApproverInfo)
-
[FlowGroupApprovers](https://cloud.tencent.com/document/api/1323/70369#FlowGroupApprovers)
-
[FlowGroupUrlInfo](https://cloud.tencent.com/document/api/1323/70369#FlowGroupUrlInfo)
修改数据结构:
-
[ApproverInfo](https://cloud.tencent.com/document/api/1323/70369#ApproverInfo)
- **修改成员**:ApproverName, ApproverMobile
-
[FillApproverInfo](https://cloud.tencent.com/document/api/1323/70369#FillApproverInfo)
- 新增成员:FlowId
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 161 次发布
发布时间:2024-03-26 01:16:43
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[ChannelCreateFlowApprovers](https://cloud.tencent.com/document/api/1420/99282)
- 新增入参:FlowGroupId
- **修改入参**:FlowId
-
[ChannelCreateFlowGroupByFiles](https://cloud.tencent.com/document/api/1420/80390)
- 新增出参:Approvers
-
[ChannelCreateFlowGroupByTemplates](https://cloud.tencent.com/document/api/1420/94886)
- 新增出参:Approvers
- [CreateSignUrls](https://cloud.tencent.com/document/api/1420/61522)
- 新增入参:FlowGroupUrlInfo
新增数据结构:
-
[FlowGroupApproverInfo](https://cloud.tencent.com/document/api/1420/61525#FlowGroupApproverInfo)
-
[FlowGroupApprovers](https://cloud.tencent.com/document/api/1420/61525#FlowGroupApprovers)
-
[FlowGroupUrlInfo](https://cloud.tencent.com/document/api/1420/61525#FlowGroupUrlInfo)
修改数据结构:
-
[FillApproverInfo](https://cloud.tencent.com/document/api/1420/61525#FillApproverInfo)
- 新增成员:FlowId
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 人脸核身(faceid) 版本:2018-03-01
##### 第 72 次发布
发布时间:2024-03-26 01:17:00
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[GetFaceIdRiskInfo](https://cloud.tencent.com/document/api/1007/104582)
-
[GetFaceidRiskInfoToken](https://cloud.tencent.com/document/api/1007/104581)
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 80 次发布
发布时间:2024-03-26 01:30:25
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [ModifyTaskInfo](https://cloud.tencent.com/document/api/1267/78692)
- 新增入参:ExecutionTTL, ScriptChange, InChargeIds
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
* [exporter/clickhouse] Add ServiceName as column into Clickhouse metrics (#31803)
resolve:
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31670
it's a breaking change.
users who upgrade to the latest version need to alter the Clickhouse
table:
```
ALTER TABLE otel_metrics_exponential_histogram ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
ALTER TABLE otel_metrics_gauge ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
ALTER TABLE otel_metrics_histogram ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
ALTER TABLE otel_metrics_sum ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
ALTER TABLE otel_metrics_summary ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
```
* [pkg/stanza/fileconsumer] Reduce noise in benchmark (#31516)
This PR reworks the end-to-end benchmark in `pkg/stanza/fileconsumer`.
The primary goal is to surface a more accurate representation of
performance within the benchmark. Several factors were leading to
artificial delays which I believe may have drowned out actual impacts.
Three significant sources of noise were mitigated:
1. Every log read was passed to a channel. This caused us to measure lot
of time waiting for channels. Now, we only signal when the file is fully
consumed.
2. Every line was generated on the fly. Now we generate a set of lines
ahead of time and write these over and over.
3. Each line was written to file independently. Now we group the
pre-generated lines write them all at once. We also write longer lines
so that much more content is written per call.
The overall result is a substantially clearer CPU profile and a slightly
clearer memory profile.
CPU Profile Before
CPU Profile After
Memory Profile Before
Memory Profile After
Additionally, this adds a new benchmark to cover a scenario with many
(100) files. Finally, it reduces the time to run the benchmark from ~30s
to ~20s.
* [receiver/oracledb] Fix incorrect values for a couple of metrics (#32028)
**Description:**
Values were being scraped incorrectly for the metrics
`oracledb.tablespace_size.limit` and `oracledb.tablespace_size.usage`.
The changes these metrics to be scraped from the
[`DBA_TABLESPACE_USAGE_METRICS`](https://docs.oracle.com/en/database/oracle/oracle-database/19/refrn/DBA_TABLESPACE_USAGE_METRICS.html#GUID-FE479528-BB37-4B55-92CF-9EC19EDF4F46)
table. This results in a slight loss of granularity in these metrics, as
values will always be in multiples of the respective tablespace's block
size, but I think the clarity and simplicity is worth the trade off.
Note: The value of the usage metric was generally close to the expected
value, but the limit was being calculated as potential theoretical
capacity, unbound by server capacity. For example, in testing in a
docker container on my local machine, limit was set to **17TB**. This
doesn't line up with user expectations.
**Link to tracking Issue:**
Fixes
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31451
**Testing:**
Updated existing tests, added a couple new ones.
Also, the original issue filed was comparing
`DBA_TABLESPACE_USAGE_METRICS` output for percent used to what we got
from `usage/limit * 100`. Here's the local testing outputs compared to
show they now line up.
```
2024-03-27T16:31:57.938-0700 info oracledbreceiver/scraper.go:285 DBA_TABLESPACE_USAGE_METRICS: Tablespace name: SYSTEM, used space: 111288, tablespace size: 3518587, percent used: 3.16286054600895188892586711654422641816 {"kind": "receiver", "name": "oracledb", "data_type": "metrics"}
```
```
Metric #20
Descriptor:
-> Name: oracledb.tablespace_size.usage
-> Description: Used tablespace in bytes.
-> Unit: By
-> DataType: Gauge
NumberDataPoints #0
Data point attributes:
-> tablespace_name: Str(SYSTEM)
StartTimestamp: 2024-03-27 23:31:56.873576 +0000 UTC
Timestamp: 2024-03-27 23:32:12.523295 +0000 UTC
Value: 911671296
```
```
Metric #19
Descriptor:
-> Name: oracledb.tablespace_size.limit
-> Description: Maximum size of tablespace in bytes, -1 if unlimited.
-> Unit: By
-> DataType: Gauge
NumberDataPoints #0
Data point attributes:
-> tablespace_name: Str(SYSTEM)
StartTimestamp: 2024-03-27 23:31:56.873576 +0000 UTC
Timestamp: 2024-03-27 23:32:12.523295 +0000 UTC
Value: 28824264704
```
Doing the same calculation, we get:
```
(911671296 / 28824264704) * 100 = ~3.16%
```
* [pkg/ottl] add string_converter (#31790)
**Description:**
- implemented func_string (string_converter)
- added new unit tests in `pkg/ottl/ottlfuncs/func_string_test.go`
- added function to `pkg/ottl/ottlfuncs/functions.go`
- updatet README.md at `pkg/ottl/ottlfuncs/README.md`
- added changelog
**Link to tracking Issue:**
- #27867
**Testing:**
- added similar tests as in `pkg/ottl/ottlfuncs/func_double_test.go`
**Documentation:**
---------
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
* [exporter/datadogexporter] Log warning for noAPMStatsFeatureGate (#31981)
**Description:**
We disabled APM Stats computation in the Datadog Exporter by default in
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31219.
This PR adds a warn log in the Datadog Exporter traces pipeline to bring
visibility to this breaking change and links to migration documentation.
The log shows as follows:
```
❯ ./bin/otelcontribcol_darwin_arm64
2024-03-26T13:29:58.641-0400 info service@v0.96.1-0.20240322165517-15201f1e5967/telemetry.go:55 Setting up own telemetry...
2024-03-26T13:29:58.641-0400 info service@v0.96.1-0.20240322165517-15201f1e5967/telemetry.go:97 Serving metrics {"address": ":8888", "level": "Basic"}
2024-03-26T13:29:58.641-0400 debug exporter@v0.96.1-0.20240322165517-15201f1e5967/exporter.go:273 Beta component. May change in the future. {"kind": "exporter", "data_type": "traces", "name": "datadog/api"}
2024-03-26T13:29:58.641-0400 warn datadogexporter@v0.96.0/factory.go:386 Trace metrics are now disabled in the Datadog Exporter by default. To continue receiving Trace Metrics, configure the Datadog Connector or disable the feature gate. {"kind": "exporter", "data_type": "traces", "name": "datadog/api", "documentation": "https://docs.datadoghq.com/opentelemetry/guide/migration/", "feature gate ID": "exporter.datadogexporter.DisableAPMStats"}
```
* Update README.md of AWS S3 Exporter with example of setting AWS Crede… (#31890)
…ntial for OpenTelemetry Collector Helm Chart
---------
Co-authored-by: Dmitrii Anoshin
* [extension/encoding] Add avrologencodingextension (#31923)
**Description:** Add new component `avrologencodingextension` to be able
to transform AVRO messages into log record body.
As requested in #31077, this is a parallel request to support the same
functionality as reusable encoding extension.
**Link to tracking Issue:** #21067
**Testing:** Unit-testing as well as testing code within the
`kafakreceiver` receiver.
**Documentation:** Added README within the component.
* [chore] Format fileconsumer's design.md file to respect max line length (#32036)
**Description:**
Minor improvement PR to fix lines' length in order to respect formating
guidelines and make it easily readable.
Signed-off-by: ChrsMark
* [connector/failover] Support unlimited retries in failover connector (#32017)
**Description:**
This adds to the conditional for max_retries that
short circuits for the magic value of 0. This allows effectively turning
off retry limiting so that
the failover connector will continue to poll higher priority pipelines
indefinitely.
**Link to tracking Issue:** #9868
**Documentation:** Added line to document the magic value
Signed-off-by: sinkingpoint
* [chore][internal/docker] Enable goleak check (#32046)
**Description:**
This enables `goleak` to help ensure no goroutines are being leaked in
the `internal/docker` package. This is a test only change, an existing
test was leaking a goroutine because it wasn't cancelling a context
properly.
**Link to tracking Issue:** #30438
**Testing:**
Existing tests are passing, as well as added `goleak` check.
* [processor/resourcedetection] Only attempt to detect k8s node resource attributes when enabled (#32039)
**Description:**
Detecting k8s node resource attributes requires specific permissions and
configuration. If they're disabled we shouldn't hit errors trying to
detect them. This change makes it so that these resource attributes are
only attempted to be detected when enabled.
**Link to tracking Issue:**
Resolves
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31941
**Testing:**
Existing tests are passing. New test was failing before changes,
succeeds after.
* Parallel and synchronized test execution for loadscraper.TestScrape (#28877)
**Description:**
This is not a pretty refactor but I believe this is proper way to fix
the test.
I was running into `0 is not lower than 0` error when `Processor Queue
Length` on my system was properly reported as 0.
I added a special case not to fail in this case.
Then the main fix here is making test cases run in parallel as
concurrent as possible.
Windows is special case when it comes to reporting CPU metrics as it
uses sampling. This sampling is happening every 5 seconds.
While sampling it loads current load from counter and does 1/5/15
minutes average.
As tests are running sequentially, this current load can be different.
To work around this each test case is started in a goroutine while main
test goroutine waits for all of them to start.
Each subtest waits for signal to start processing. This signal comes
from main goroutine.
This way we achieve as close execution as possible. However there's no
guarantee but it should be way more stable than it was.
To make test even more realistic, I changed sequencing frequency to 500
milliseconds in a test and let 3 seconds for scraper to do some actual
work and not evaluate on a single scrape.
I ran more than 1200 consecutive executions without failure on my
machine.
**Link to tracking Issue:** #10030
**Testing:** Unit test
**Documentation:**
* [exporter/clickhouse] Add @SpencerTorres to CODEOWNERS (#32040)
Requesting to be added to CODEOWNERS
* [chore] update mdatagen and READMEs (#32047)
See
https://github.com/open-telemetry/opentelemetry-collector/issues/9794
This is applying the latest mdatagen and regenerating READMEs.
* [pkg/stanza/adapter] Fix scope parsing (#32033)
**Description:**
Fix: #23387
Adds grouping of logrecords based on scope
- adds scope grouping along with scope name
- adds integration test for benchmark
**Link to tracking Issue:** #23387
**Testing:**
1. Did some benchmark on this build, results below:
On main branch: `BenchmarkEmitterToConsumer`: ~3.12
On my branch: `BenchmarkEmitterToConsumer`: ~3.26
on my branch: `BenchmarkEmitterToConsumerScopeGroupping` (with 2 host
variation and 2 scope variation): ~4.2s
2. Added unit tests
**Documentation:**
---------
Co-authored-by: Dan Jaglowski
* [chore] bump opamp-go to 0.14.0 (#32056)
**Description:** Bumps opamp-go to latest version to contain better
shutdown handling
**Link to tracking Issue:** n/a
**Testing:** unit tests
**Documentation:** n/a
* [chore][pkg/stanza] Cleanup retain operator files (#32068)
Contributes to #32058
* fix(deps): update all github.com/aws packages (#32084)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/aws/aws-sdk-go](https://togithub.com/aws/aws-sdk-go) |
`v1.51.8` -> `v1.51.12` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go/v1.51.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go/v1.51.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go/v1.51.8/v1.51.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go/v1.51.8/v1.51.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [github.com/aws/aws-sdk-go-v2](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.26.0` -> `v1.26.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2/v1.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2/v1.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2/v1.26.0/v1.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2/v1.26.0/v1.26.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/config](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.27.9` -> `v1.27.10` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.9/v1.27.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.9/v1.27.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/credentials](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.17.9` -> `v1.17.10` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.9/v1.17.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.9/v1.17.10?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/kinesis](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.27.3` -> `v1.27.4` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.3/v1.27.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fkinesis/v1.27.3/v1.27.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/s3](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.53.0` -> `v1.53.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.53.0/v1.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fs3/v1.53.0/v1.53.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/secretsmanager](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.28.4` -> `v1.28.6` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.4/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsecretsmanager/v1.28.4/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/servicediscovery](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.29.3` -> `v1.29.4` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.3/v1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.3/v1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/sts](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.28.5` -> `v1.28.6` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.5/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fsts/v1.28.5/v1.28.6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [github.com/aws/smithy-go](https://togithub.com/aws/smithy-go) |
`v1.20.1` -> `v1.20.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2fsmithy-go/v1.20.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2fsmithy-go/v1.20.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2fsmithy-go/v1.20.1/v1.20.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2fsmithy-go/v1.20.1/v1.20.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
aws/aws-sdk-go (github.com/aws/aws-sdk-go)
###
[`v1.51.12`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15112-2024-04-01)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.11...v1.51.12)
\===
##### Service Client Updates
- `service/datazone`: Updates service API, documentation, and paginators
- `service/deadline`: Updates service API, documentation, waiters,
paginators, and examples
- `service/elasticmapreduce`: Updates service documentation
- This release fixes a broken link in the documentation.
- `service/lightsail`: Updates service API and documentation
- This release adds support to upgrade the TLS version of the
distribution.
- `service/monitoring`: Updates service API and documentation
- This release adds support for CloudWatch Anomaly Detection on
cross-account metrics. SingleMetricAnomalyDetector and MetricDataQuery
inputs to Anomaly Detection APIs now take an optional AccountId field.
###
[`v1.51.11`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15111-2024-03-29)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.10...v1.51.11)
\===
##### Service Client Updates
- `service/b2bi`: Updates service API and documentation
- `service/codebuild`: Updates service API
- Add new fleet status code for Reserved Capacity.
- `service/codeconnections`: Adds new service
- `service/internetmonitor`: Updates service API and documentation
- `service/iotwireless`: Updates service API and documentation
- `service/marketplace-catalog`: Updates service API and documentation
- `service/sagemaker`: Updates service API and documentation
- This release adds support for custom images for the CodeEditor App on
SageMaker Studio
###
[`v1.51.10`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15110-2024-03-28)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.9...v1.51.10)
\===
##### Service Client Updates
- `service/compute-optimizer`: Updates service API and documentation
- `service/ec2`: Updates service API
- Amazon EC2 C7gd, M7gd and R7gd metal instances with up to 3.8 TB of
local NVMe-based SSD block-level storage have up to 45% improved
real-time NVMe storage performance than comparable Graviton2-based
instances.
- `service/eks`: Updates service API
- `service/guardduty`: Updates service API and documentation
- Add EC2 support for GuardDuty Runtime Monitoring auto management.
- `service/oam`: Updates service API
- `service/quicksight`: Updates service API and documentation
- Amazon QuickSight: Adds support for setting up VPC Endpoint
restrictions for accessing QuickSight Website.
###
[`v1.51.9`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v1519-2024-03-27)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.8...v1.51.9)
\===
##### Service Client Updates
- `service/batch`: Updates service API and documentation
- This feature allows AWS Batch to support configuration of
imagePullSecrets and allowPrivilegeEscalation for jobs running on EKS
- `service/bedrock-agent`: Updates service API and documentation
- `service/bedrock-agent-runtime`: Updates service API and documentation
- `service/elasticache`: Updates service API and documentation
- Added minimum capacity to Amazon ElastiCache Serverless. This feature
allows customer to ensure minimum capacity even without current load
- `service/secretsmanager`: Updates service documentation
- Documentation updates for Secrets Manager
aws/aws-sdk-go-v2 (github.com/aws/aws-sdk-go-v2)
###
[`v1.26.1`](https://togithub.com/aws/aws-sdk-go-v2/compare/v1.26.0...v1.26.1)
[Compare
Source](https://togithub.com/aws/aws-sdk-go-v2/compare/v1.26.0...v1.26.1)
aws/smithy-go (github.com/aws/smithy-go)
###
[`v1.20.2`](https://togithub.com/aws/smithy-go/compare/v1.20.1...v1.20.2)
[Compare
Source](https://togithub.com/aws/smithy-go/compare/v1.20.1...v1.20.2)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update all github.com/azure packages (#32085)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/Azure/azure-kusto-go](https://togithub.com/Azure/azure-kusto-go)
| `v0.15.1` -> `v0.15.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fAzure%2fazure-kusto-go/v0.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fAzure%2fazure-kusto-go/v0.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fAzure%2fazure-kusto-go/v0.15.1/v0.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fAzure%2fazure-kusto-go/v0.15.1/v0.15.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/Azure/azure-sdk-for-go/sdk/azcore](https://togithub.com/Azure/azure-sdk-for-go)
| `v1.10.0` -> `v1.11.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.10.0/v1.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.10.0/v1.11.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
Azure/azure-kusto-go
(github.com/Azure/azure-kusto-go)
###
[`v0.15.2`](https://togithub.com/Azure/azure-kusto-go/releases/tag/v0.15.2)
[Compare
Source](https://togithub.com/Azure/azure-kusto-go/compare/v0.15.1...v0.15.2)
##### Fixed
- Fix storage URI parsing for hostname with more than 5 parts.
- Keep original error when refreshing ingestion resources fails.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* chore(deps): update prom/prometheus docker tag to v2.51.1 (#32083)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Update | Change |
|---|---|---|
| prom/prometheus | patch | `v2.51.0` -> `v2.51.1` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* fix(deps): update module github.com/aliyun/aliyun-log-go-sdk to v0.1.72 (#32086)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/aliyun/aliyun-log-go-sdk](https://togithub.com/aliyun/aliyun-log-go-sdk)
| `v0.1.71` -> `v0.1.72` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faliyun%2faliyun-log-go-sdk/v0.1.72?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faliyun%2faliyun-log-go-sdk/v0.1.72?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faliyun%2faliyun-log-go-sdk/v0.1.71/v0.1.72?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faliyun%2faliyun-log-go-sdk/v0.1.71/v0.1.72?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
aliyun/aliyun-log-go-sdk
(github.com/aliyun/aliyun-log-go-sdk)
###
[`v0.1.72`](https://togithub.com/aliyun/aliyun-log-go-sdk/releases/tag/v0.1.72)
[Compare
Source](https://togithub.com/aliyun/aliyun-log-go-sdk/compare/v0.1.71...v0.1.72)
- add MetricStore URL way to send metrics to enhance query metrics
performance.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/expr-lang/expr to v1.16.3 (#32088)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/expr-lang/expr](https://togithub.com/expr-lang/expr) |
`v1.16.2` -> `v1.16.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fexpr-lang%2fexpr/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fexpr-lang%2fexpr/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fexpr-lang%2fexpr/v1.16.2/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fexpr-lang%2fexpr/v1.16.2/v1.16.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
expr-lang/expr (github.com/expr-lang/expr)
###
[`v1.16.3`](https://togithub.com/expr-lang/expr/releases/tag/v1.16.3)
[Compare
Source](https://togithub.com/expr-lang/expr/compare/v1.16.2...v1.16.3)
**Expr** is a Go-centric expression language designed to deliver dynamic
configurations with unparalleled accuracy,
safety, and speed.
```go
program, err := expr.Compile(`let x = 2 + 2; x ^ x`)
output, err := expr.Run(program, env)
```
**In this release**:
- Improved printing for maps: `{(foo + bar): 42}`
**Expr Editor**
The [Expr Editor](https://expr-lang.org/editor) is an embeddable code
editor written in JavaScript with full support of Expr language.
**Expr Pro**
[Expr Pro](https://expr-lang.org/expr-pro) is a set of extensions for
Expr for advanced use cases. It includes expressions explanation,
performance profiling, and more.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix: enabling gzip was causing eof errors upon decompression (#32081)
**Description:**
Fixed issue when enabling compression: gzip
**Testing:**
Locally decompressed the generated payloads before and after the fix
---------
Co-authored-by: Sean Marciniak <30928402+MovieStoreGuy@users.noreply.github.com>
* fix(deps): update module github.com/ibm/sarama to v1.43.1 (#32091)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/IBM/sarama](https://togithub.com/IBM/sarama) | `v1.43.0`
-> `v1.43.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fIBM%2fsarama/v1.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fIBM%2fsarama/v1.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fIBM%2fsarama/v1.43.0/v1.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fIBM%2fsarama/v1.43.0/v1.43.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
IBM/sarama (github.com/IBM/sarama)
### [`v1.43.1`](https://togithub.com/IBM/sarama/releases/tag/v1.43.1):
Version 1.43.1 (2024-03-27)
[Compare
Source](https://togithub.com/IBM/sarama/compare/v1.43.0...v1.43.1)
#### What's Changed
##### :bug: Fixes
- fix: message.max.bytes should default to
[`1048576`](https://togithub.com/IBM/sarama/commit/1048576) not 1 MB by
[@puellanivis](https://togithub.com/puellanivis) in
[https://github.com/IBM/sarama/pull/2804](https://togithub.com/IBM/sarama/pull/2804)
- fix: add locking around broker throttle timer to prevent race
condition by [@chengsha](https://togithub.com/chengsha) in
[https://github.com/IBM/sarama/pull/2826](https://togithub.com/IBM/sarama/pull/2826)
##### :package: Dependency updates
- chore(deps): bump go.opentelemetry.io/otel/sdk from 1.23.1 to 1.24.0
in /examples/interceptors by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/IBM/sarama/pull/2816](https://togithub.com/IBM/sarama/pull/2816)
- chore(deps): bump the golang-org-x group with 1 update by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/IBM/sarama/pull/2825](https://togithub.com/IBM/sarama/pull/2825)
- chore(deps): bump github.com/stretchr/testify from 1.8.4 to 1.9.0 by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/IBM/sarama/pull/2822](https://togithub.com/IBM/sarama/pull/2822)
- chore(deps): bump
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric from 1.23.1 to
1.24.0 in /examples/interceptors by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/IBM/sarama/pull/2815](https://togithub.com/IBM/sarama/pull/2815)
#### New Contributors
- [@chengsha](https://togithub.com/chengsha) made their first
contribution in
[https://github.com/IBM/sarama/pull/2826](https://togithub.com/IBM/sarama/pull/2826)
**Full Changelog**:
https://github.com/IBM/sarama/compare/v1.43.0...v1.43.1
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/hashicorp/go-hclog to v1.6.3 (#32090)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/hashicorp/go-hclog](https://togithub.com/hashicorp/go-hclog)
| `v1.6.2` -> `v1.6.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fhashicorp%2fgo-hclog/v1.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fhashicorp%2fgo-hclog/v1.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fhashicorp%2fgo-hclog/v1.6.2/v1.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fhashicorp%2fgo-hclog/v1.6.2/v1.6.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
hashicorp/go-hclog (github.com/hashicorp/go-hclog)
###
[`v1.6.3`](https://togithub.com/hashicorp/go-hclog/releases/tag/v1.6.3):
Optional JSON escaping
[Compare
Source](https://togithub.com/hashicorp/go-hclog/compare/v1.6.2...v1.6.3)
#### What's Changed
- hclogvet: updates for go1.22 by
[@shoenig](https://togithub.com/shoenig) in
[https://github.com/hashicorp/go-hclog/pull/138](https://togithub.com/hashicorp/go-hclog/pull/138)
- support configure json escape when log in json format by
[@Ericwww](https://togithub.com/Ericwww) in
[https://github.com/hashicorp/go-hclog/pull/141](https://togithub.com/hashicorp/go-hclog/pull/141)
#### New Contributors
- [@Ericwww](https://togithub.com/Ericwww) made their first
contribution in
[https://github.com/hashicorp/go-hclog/pull/141](https://togithub.com/hashicorp/go-hclog/pull/141)
**Full Changelog**:
https://github.com/hashicorp/go-hclog/compare/v1.6.2...v1.6.3
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/golangci/golangci-lint to v1.57.2 (#32089)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/golangci/golangci-lint](https://togithub.com/golangci/golangci-lint)
| `v1.57.1` -> `v1.57.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgolangci%2fgolangci-lint/v1.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgolangci%2fgolangci-lint/v1.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgolangci%2fgolangci-lint/v1.57.1/v1.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgolangci%2fgolangci-lint/v1.57.1/v1.57.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
golangci/golangci-lint
(github.com/golangci/golangci-lint)
###
[`v1.57.2`](https://togithub.com/golangci/golangci-lint/compare/v1.57.1...v1.57.2)
[Compare
Source](https://togithub.com/golangci/golangci-lint/compare/v1.57.1...v1.57.2)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [chore][pkg/stanza] Cleanup add operator files (#32059)
* [chore][pkg/stanza] Cleanup tcp input operator files (#32077)
* fix(deps): update module github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common to v1.0.891 (#32097)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common](https://togithub.com/tencentcloud/tencentcloud-sdk-go)
| `v1.0.887` -> `v1.0.891` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.891?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.891?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.887/v1.0.891?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.887/v1.0.891?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
tencentcloud/tencentcloud-sdk-go
(github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common)
###
[`v1.0.891`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10891)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.890...v1.0.891)
#### 云数据仓库 ClickHouse(cdwch) 版本:2020-09-15
##### 第 20 次发布
发布时间:2024-04-02 01:09:49
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateInstanceNew](https://cloud.tencent.com/document/api/1299/84353)
- 新增入参:TagItems
#### 腾讯云数据仓库 TCHouse-D(cdwdoris) 版本:2021-12-28
##### 第 9 次发布
发布时间:2024-04-02 01:09:54
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateInstanceNew](https://cloud.tencent.com/document/api/1387/102611)
- 新增入参:EnableMultiZones, UserMultiZoneInfos
新增数据结构:
-
[NetworkInfo](https://cloud.tencent.com/document/api/1387/102385#NetworkInfo)
修改数据结构:
-
[InstanceInfo](https://cloud.tencent.com/document/api/1387/102385#InstanceInfo)
- 新增成员:EnableMultiZones, UserNetworkInfos
-
[NodeInfo](https://cloud.tencent.com/document/api/1387/102385#NodeInfo)
- 新增成员:NodeName, ComponentName, NodeRole, LastRestartTime, Zone
#### 云直播CSS(live) 版本:2018-08-01
##### 第 122 次发布
发布时间:2024-04-02 01:18:22
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[RecordTemplateInfo](https://cloud.tencent.com/document/api/267/20474#RecordTemplateInfo)
- 新增成员:CosStore
#### 媒体处理(mps) 版本:2019-06-12
##### 第 80 次发布
发布时间:2024-04-02 01:19:24
本次发布包含了以下内容:
改善已有的文档。
新增数据结构:
-
[AiAnalysisTaskHeadTailInput](https://cloud.tencent.com/document/api/862/37615#AiAnalysisTaskHeadTailInput)
-
[AiAnalysisTaskHeadTailOutput](https://cloud.tencent.com/document/api/862/37615#AiAnalysisTaskHeadTailOutput)
-
[AiAnalysisTaskHeadTailResult](https://cloud.tencent.com/document/api/862/37615#AiAnalysisTaskHeadTailResult)
修改数据结构:
-
[AiAnalysisResult](https://cloud.tencent.com/document/api/862/37615#AiAnalysisResult)
- 新增成员:HeadTailTask
#### 云数据库Redis(redis) 版本:2018-04-12
##### 第 73 次发布
发布时间:2024-04-02 01:20:49
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeInstanceEvents](https://cloud.tencent.com/document/api/239/104779)
-
[ModifyInstanceEvent](https://cloud.tencent.com/document/api/239/104778)
新增数据结构:
-
[RedisInstanceEvent](https://cloud.tencent.com/document/api/239/20022#RedisInstanceEvent)
#### 消息队列 TDMQ(tdmq) 版本:2020-02-17
##### 第 106 次发布
发布时间:2024-04-02 01:23:41
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateRocketMQVipInstance](https://cloud.tencent.com/document/api/1179/95721)
- 新增入参:SupportsMigrateToCloud, EnablePublic, Bandwidth, IpRules, Tags
#### 微服务引擎(tse) 版本:2020-12-07
##### 第 63 次发布
发布时间:2024-04-02 01:25:46
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeCloudNativeAPIGatewayCanaryRules](https://cloud.tencent.com/document/api/1364/94844)
- 新增入参:RuleType
新增数据结构:
- [KeyValue](https://cloud.tencent.com/document/api/1364/54942#KeyValue)
-
[LimitRule](https://cloud.tencent.com/document/api/1364/54942#LimitRule)
-
[RuleFilter](https://cloud.tencent.com/document/api/1364/54942#RuleFilter)
修改数据结构:
-
[CloudNativeAPIGatewayCanaryRule](https://cloud.tencent.com/document/api/1364/54942#CloudNativeAPIGatewayCanaryRule)
- 新增成员:RuleType, MatchType, GroupId, GroupName, LaneId, LaneName,
MatchMode, LaneTag
-
[CloudNativeAPIGatewayRateLimitDetail](https://cloud.tencent.com/document/api/1364/54942#CloudNativeAPIGatewayRateLimitDetail)
- 新增成员:BasicLimitQpsThresholds, LimitRules
- **修改成员**:Enabled, QpsThresholds, LimitBy,
ResponseType, HideClientHeaders, IsDelay
-
[KongTarget](https://cloud.tencent.com/document/api/1364/54942#KongTarget)
- 新增成员:Tags
#### 语音合成(tts) 版本:2019-08-23
##### 第 15 次发布
发布时间:2024-04-02 01:26:37
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateTtsTask](https://cloud.tencent.com/document/api/1073/57373)
- **修改入参**:ModelType
#### 声音复刻(vrs) 版本:2020-08-24
##### 第 6 次发布
发布时间:2024-04-02 01:27:45
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateVRSTask](https://cloud.tencent.com/document/api/1283/90064)
- **修改入参**:SampleRate, Codec
-
[DetectEnvAndSoundQuality](https://cloud.tencent.com/document/api/1283/90062)
- **修改入参**:Codec
修改数据结构:
-
[DescribeVRSTaskStatusRespData](https://cloud.tencent.com/document/api/1283/90065#DescribeVRSTaskStatusRespData)
- **修改成员**:TaskId, Status, StatusStr,
VoiceType, ErrorMsg
###
[`v1.0.890`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10890)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.889...v1.0.890)
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 84 次发布
发布时间:2024-04-01 01:31:06
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateOrUpdateResource](https://cloud.tencent.com/document/api/1267/81750)
- 新增入参:FileMd5
###
[`v1.0.889`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10889)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.888...v1.0.889)
#### 商业智能分析 BI(bi) 版本:2022-01-05
##### 第 10 次发布
发布时间:2024-03-29 01:08:41
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateDatasource](https://cloud.tencent.com/document/api/590/98854)
- 新增入参:OperationAuthLimit
- [CreateProject](https://cloud.tencent.com/document/api/590/98838)
- 新增入参:ManagePlatform
- [ModifyProject](https://cloud.tencent.com/document/api/590/98834)
- 新增入参:ManagePlatform
#### 费用中心(billing) 版本:2018-07-09
##### 第 58 次发布
发布时间:2024-03-29 01:08:47
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[AllocationDetail](https://cloud.tencent.com/document/api/555/19183#AllocationDetail)
-
[AllocationSummaryByItem](https://cloud.tencent.com/document/api/555/19183#AllocationSummaryByItem)
-
[AllocationSummaryByResource](https://cloud.tencent.com/document/api/555/19183#AllocationSummaryByResource)
-
[ConsumptionBusinessSummaryDataItem](https://cloud.tencent.com/document/api/555/19183#ConsumptionBusinessSummaryDataItem)
- 新增成员:RegionName
- **修改成员**:CashPayAmount,
IncentivePayAmount, VoucherPayAmount, TransferPayAmount
-
[ConsumptionProjectSummaryDataItem](https://cloud.tencent.com/document/api/555/19183#ConsumptionProjectSummaryDataItem)
- **修改成员**:CashPayAmount,
IncentivePayAmount, VoucherPayAmount, TransferPayAmount
-
[ConsumptionRegionSummaryDataItem](https://cloud.tencent.com/document/api/555/19183#ConsumptionRegionSummaryDataItem)
- 新增成员:CashPayAmount, VoucherPayAmount, IncentivePayAmount,
TransferPayAmount
-
[ConsumptionResourceSummaryDataItem](https://cloud.tencent.com/document/api/555/19183#ConsumptionResourceSummaryDataItem)
- 新增成员:PayerUin, OwnerUin, OperateUin, ProductCode, ProductCodeName,
RegionType, RegionTypeName, Extend1, Extend2, Extend3, Extend4, Extend5,
InstanceType, InstanceTypeName, PayTime, ZoneName, ComponentConfig
- **修改成员**:RealCost, FeeBeginTime,
FeeEndTime, DayDiff, DailyTotalCost, OrderId, VoucherPayAmount,
IncentivePayAmount, TransferPayAmount
-
[GatherResourceSummary](https://cloud.tencent.com/document/api/555/19183#GatherResourceSummary)
#### Cloud Studio(云端 IDE)(cloudstudio) 版本:2023-05-08
##### 第 5 次发布
发布时间:2024-03-29 01:12:12
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateWorkspace](https://cloud.tencent.com/document/api/1039/94096)
- 新增入参:AppId, Uin, UniqVpcId, SubnetId
#### 主机安全(cwp) 版本:2018-02-28
##### 第 111 次发布
发布时间:2024-03-29 01:13:05
本次发布包含了以下内容:
改善已有的文档。
**预下线接口**:
- DeleteAttackLogs
- ExportAttackLogs
修改接口:
-
[CreateSearchTemplate](https://cloud.tencent.com/document/api/296/55730)
- 新增出参:Message
-
[DescribeBaselineItemInfo](https://cloud.tencent.com/document/api/296/87860)
- 新增出参:CategoryList
- [ModifyBaselineRule](https://cloud.tencent.com/document/api/296/87844)
- 新增入参:IdType, ExcludeIds, CategoryIds
新增数据结构:
-
[BaselineItemsCategory](https://cloud.tencent.com/document/api/296/19867#BaselineItemsCategory)
修改数据结构:
-
[BaselineCategory](https://cloud.tencent.com/document/api/296/19867#BaselineCategory)
- 新增成员:ItemCount
- [Item](https://cloud.tencent.com/document/api/296/19867#Item)
- 新增成员:CustomItemValues
#### TDSQL-C MySQL 版(cynosdb) 版本:2019-01-07
##### 第 82 次发布
发布时间:2024-03-29 01:14:11
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[RollbackToNewCluster](https://cloud.tencent.com/document/api/1003/104727)
#### 数据传输服务(dts) 版本:2021-12-06
##### 第 27 次发布
发布时间:2024-03-29 01:16:13
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
- [Endpoint](https://cloud.tencent.com/document/api/571/82108#Endpoint)
- 新增成员:ChildInstanceId, ChildInstanceType
-
[EndpointItem](https://cloud.tencent.com/document/api/571/82108#EndpointItem)
- 新增成员:ChildInstanceId, ChildInstanceType
#### 数据传输服务(dts) 版本:2018-03-30
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 162 次发布
发布时间:2024-03-29 01:17:41
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateConsoleLoginUrl](https://cloud.tencent.com/document/api/1420/61524)
- 新增入参:ProxyOperatorMobile
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 实时互动-教育版(lcic) 版本:2022-08-17
##### 第 55 次发布
发布时间:2024-03-29 01:20:28
本次发布包含了以下内容:
改善已有的文档。
新增数据结构:
-
[CustomMsgContent](https://cloud.tencent.com/document/api/1639/81423#CustomMsgContent)
修改数据结构:
-
[MessageItem](https://cloud.tencent.com/document/api/1639/81423#MessageItem)
- 新增成员:CustomMessage
- **修改成员**:MessageType, TextMessage,
ImageMessage
- [MsgBody](https://cloud.tencent.com/document/api/1639/81423#MsgBody)
- 新增成员:CustomMsgContent
#### TI-ONE 训练平台(tione) 版本:2021-11-11
##### 第 55 次发布
发布时间:2024-03-29 01:28:05
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeBuildInImages](https://cloud.tencent.com/document/api/851/104325)
- 新增入参:ImageFilters
新增数据结构:
-
[ImageFIlter](https://cloud.tencent.com/document/api/851/75051#ImageFIlter)
修改数据结构:
- [Instance](https://cloud.tencent.com/document/api/851/75051#Instance)
- 新增成员:ErrCode, ErrMsg
#### TI-ONE 训练平台(tione) 版本:2019-10-22
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 83 次发布
发布时间:2024-03-29 01:32:12
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[ExportTaskInfo](https://cloud.tencent.com/document/api/1267/76336#ExportTaskInfo)
- 新增成员:Expire, DatasourceName, DbTableName, RuleName, RuleExecId
- [Rule](https://cloud.tencent.com/document/api/1267/76336#Rule)
- 新增成员:TriggerCondition
-
[RuleExecResult](https://cloud.tencent.com/document/api/1267/76336#RuleExecResult)
- **修改成员**:RuleExecId, RuleGroupExecId,
RuleGroupId, RuleId, RuleName, RuleType, SourceObjectDataTypeName,
SourceObjectValue, ConditionExpression, ExecResultStatus, TriggerResult,
CompareResult, StartTime, AlarmLevel
-
[RuleGroupExecResult](https://cloud.tencent.com/document/api/1267/76336#RuleGroupExecResult)
- 新增成员:RuleExecResultVOList
###
[`v1.0.888`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10888)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.887...v1.0.888)
#### 云联络中心(ccc) 版本:2020-02-10
##### 第 63 次发布
发布时间:2024-03-28 01:09:50
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[CreateCompanyApply](https://cloud.tencent.com/document/api/679/104629)
-
[DescribeCompanyList](https://cloud.tencent.com/document/api/679/104628)
-
[ModifyCompanyApply](https://cloud.tencent.com/document/api/679/104627)
新增数据结构:
-
[CompanyApplyInfo](https://cloud.tencent.com/document/api/679/47715#CompanyApplyInfo)
-
[CompanyStateInfo](https://cloud.tencent.com/document/api/679/47715#CompanyStateInfo)
#### 云数据仓库 PostgreSQL(cdwpg) 版本:2020-12-30
##### 第 7 次发布
发布时间:2024-03-28 01:10:53
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateInstanceByApi](https://cloud.tencent.com/document/api/878/98894)
- 新增入参:ProductVersion
#### 消息队列 CKafka 版(ckafka) 版本:2019-08-19
##### 第 100 次发布
发布时间:2024-03-28 01:11:33
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [CreatePrometheus](https://cloud.tencent.com/document/api/597/104631)
-
[DescribePrometheus](https://cloud.tencent.com/document/api/597/104630)
新增数据结构:
-
[PrometheusDTO](https://cloud.tencent.com/document/api/597/40861#PrometheusDTO)
-
[PrometheusResult](https://cloud.tencent.com/document/api/597/40861#PrometheusResult)
#### 云安全一体化平台(csip) 版本:2022-11-21
##### 第 33 次发布
发布时间:2024-03-28 01:12:39
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[AssetViewWeakPassRisk](https://cloud.tencent.com/document/api/664/90825#AssetViewWeakPassRisk)
- **修改成员**:AffectAsset, Level,
InstanceType, Component, Service, RecentTime, FirstTime, Status, Id,
Index, InstanceId, InstanceName, AppId, Nick, Uin, PasswordType, From,
VULType, VULURL, Fix, Payload
-
[PortViewPortRisk](https://cloud.tencent.com/document/api/664/90825#PortViewPortRisk)
- **修改成员**:NoHandleCount, Level, Protocol,
Component, Port, RecentTime, FirstTime, Suggestion, AffectAssetCount,
Id, From, Index, AppId, Nick, Uin, Service
-
[WebsiteRisk](https://cloud.tencent.com/document/api/664/90825#WebsiteRisk)
- **修改成员**:AffectAsset, Level, RecentTime,
FirstTime, Status, Id, Index, InstanceId, InstanceName, AppId, Nick,
Uin, URL, URLPath, InstanceType, DetectEngine, ResultDescribe,
SourceURL, SourceURLPath
#### 数据湖计算 DLC(dlc) 版本:2021-01-25
##### 第 84 次发布
发布时间:2024-03-28 01:14:58
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[TableBaseInfo](https://cloud.tencent.com/document/api/1342/53778#TableBaseInfo)
#### 数据安全治理中心(dsgc) 版本:2019-07-23
##### 第 9 次发布
发布时间:2024-03-28 01:15:37
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [GetUserQuotaInfo](https://cloud.tencent.com/document/api/1087/97170)
- 新增出参:DBUnbindNum, COSUnbindNum
#### Elasticsearch Service(es) 版本:2018-04-16
##### 第 55 次发布
发布时间:2024-03-28 10:47:55
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateIndex](https://cloud.tencent.com/document/api/845/74384)
- **修改入参**:IndexMetaJson
- [RestartNodes](https://cloud.tencent.com/document/api/845/48473)
- 新增入参:CvmDelayOnlineTime
- [UpdateInstance](https://cloud.tencent.com/document/api/845/30629)
- 新增入参:OutboundPublicAcls, OutboundPublicAccess, CvmDelayOnlineTime
- [UpgradeInstance](https://cloud.tencent.com/document/api/845/36270)
- 新增入参:CvmDelayOnlineTime
新增数据结构:
-
[OutboundPublicAcl](https://cloud.tencent.com/document/api/845/30634#OutboundPublicAcl)
修改数据结构:
-
[InstanceInfo](https://cloud.tencent.com/document/api/845/30634#InstanceInfo)
- 新增成员:OutboundPublicAcls, NetConnectScheme
- [NodeView](https://cloud.tencent.com/document/api/845/30634#NodeView)
- 新增成员:CVMStatus
- **修改成员**:IsCoordinationNode
#### 腾讯电子签企业版(ess) 版本:2020-11-11
##### 第 160 次发布
发布时间:2024-03-27 15:13:07
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[CreateFlowOption](https://cloud.tencent.com/document/api/1323/70369#CreateFlowOption)
- **修改成员**:ForbidAddApprover,
ForbidEditFlowProperties
#### 物联网开发平台(iotexplorer) 版本:2019-04-23
##### 第 58 次发布
发布时间:2024-03-28 01:18:46
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[BindCloudStorageUser](https://cloud.tencent.com/document/api/1081/104655)
-
[CreateIotVideoCloudStorage](https://cloud.tencent.com/document/api/1081/104654)
-
[DeleteCloudStorageEvent](https://cloud.tencent.com/document/api/1081/104653)
-
[DescribeCloudStorage](https://cloud.tencent.com/document/api/1081/104652)
-
[DescribeCloudStorageDate](https://cloud.tencent.com/document/api/1081/104651)
-
[DescribeCloudStorageEvents](https://cloud.tencent.com/document/api/1081/104650)
-
[DescribeCloudStorageMultiThumbnail](https://cloud.tencent.com/document/api/1081/104649)
-
[DescribeCloudStorageOrder](https://cloud.tencent.com/document/api/1081/104648)
-
[DescribeCloudStoragePackageConsumeDetails](https://cloud.tencent.com/document/api/1081/104647)
-
[DescribeCloudStoragePackageConsumeStats](https://cloud.tencent.com/document/api/1081/104646)
-
[DescribeCloudStorageStreamData](https://cloud.tencent.com/document/api/1081/104645)
-
[DescribeCloudStorageThumbnail](https://cloud.tencent.com/document/api/1081/104644)
-
[DescribeCloudStorageThumbnailList](https://cloud.tencent.com/document/api/1081/104643)
-
[DescribeCloudStorageTime](https://cloud.tencent.com/document/api/1081/104642)
-
[DescribeCloudStorageUsers](https://cloud.tencent.com/document/api/1081/104641)
-
[DescribeDevicePackages](https://cloud.tencent.com/document/api/1081/104640)
-
[DescribePackageConsumeTask](https://cloud.tencent.com/document/api/1081/104639)
-
[DescribePackageConsumeTasks](https://cloud.tencent.com/document/api/1081/104638)
-
[GenerateSignedVideoURL](https://cloud.tencent.com/document/api/1081/104637)
-
[InheritCloudStorageUser](https://cloud.tencent.com/document/api/1081/104636)
-
[ResetCloudStorage](https://cloud.tencent.com/document/api/1081/104635)
-
[ResetCloudStorageEvent](https://cloud.tencent.com/document/api/1081/104634)
-
[TransferCloudStorage](https://cloud.tencent.com/document/api/1081/104633)
新增数据结构:
-
[CloudStorageEvent](https://cloud.tencent.com/document/api/1081/34988#CloudStorageEvent)
-
[CloudStorageTimeData](https://cloud.tencent.com/document/api/1081/34988#CloudStorageTimeData)
-
[CloudStorageTimeInfo](https://cloud.tencent.com/document/api/1081/34988#CloudStorageTimeInfo)
-
[CloudStorageUserInfo](https://cloud.tencent.com/document/api/1081/34988#CloudStorageUserInfo)
-
[PackageConsumeStat](https://cloud.tencent.com/document/api/1081/34988#PackageConsumeStat)
-
[PackageConsumeTask](https://cloud.tencent.com/document/api/1081/34988#PackageConsumeTask)
-
[PackageInfo](https://cloud.tencent.com/document/api/1081/34988#PackageInfo)
-
[ThumbnailURLInfoList](https://cloud.tencent.com/document/api/1081/34988#ThumbnailURLInfoList)
#### 文字识别(ocr) 版本:2018-11-19
##### 第 132 次发布
发布时间:2024-03-27 16:33:01
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[ReconstructDocument](https://cloud.tencent.com/document/api/866/104610)
新增数据结构:
-
[DocumentElement](https://cloud.tencent.com/document/api/866/33527#DocumentElement)
-
[DocumentRecognizeInfo](https://cloud.tencent.com/document/api/866/33527#DocumentRecognizeInfo)
-
[ReconstructDocumentConfig](https://cloud.tencent.com/document/api/866/33527#ReconstructDocumentConfig)
#### TI-ONE 训练平台(tione) 版本:2021-11-11
##### 第 54 次发布
发布时间:2024-03-28 01:27:54
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[ImageInfo](https://cloud.tencent.com/document/api/851/75051#ImageInfo)
- 新增成员:SupportDataPipeline
#### TI-ONE 训练平台(tione) 版本:2019-10-22
#### 语音合成(tts) 版本:2019-08-23
##### 第 14 次发布
发布时间:2024-03-28 01:30:03
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [TextToVoice](https://cloud.tencent.com/document/api/1073/37995)
- 新增入参:FastVoiceType
#### 数据开发治理平台 WeData(wedata) 版本:2021-08-20
##### 第 82 次发布
发布时间:2024-03-28 01:32:09
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[TaskCanvasInfo](https://cloud.tencent.com/document/api/1267/76336#TaskCanvasInfo)
- 新增成员:SelfDepend, ExecutorGroupId, ExecutorGroupName, RunPriority,
TryLimit, RetryAble, RetryWait, LastSchedulerCommitTime, Notes, Creator,
UpdateUser, UpdateUserId, YarnQueue, ExecutionTTL
- **修改成员**:ExecutionStartTime,
ExecutionEndTime, Layer, SourceServiceId, SourceServiceType,
TargetServiceId, TargetServiceType, AlarmType, CreateTime, UserId,
OwnerId, TenantId
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/shirou/gopsutil/v3 to v3.24.3 (#32096)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/shirou/gopsutil/v3](https://togithub.com/shirou/gopsutil)
| `v3.24.2` -> `v3.24.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fshirou%2fgopsutil%2fv3/v3.24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fshirou%2fgopsutil%2fv3/v3.24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fshirou%2fgopsutil%2fv3/v3.24.2/v3.24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fshirou%2fgopsutil%2fv3/v3.24.2/v3.24.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
shirou/gopsutil (github.com/shirou/gopsutil/v3)
###
[`v3.24.3`](https://togithub.com/shirou/gopsutil/releases/tag/v3.24.3)
[Compare
Source](https://togithub.com/shirou/gopsutil/compare/v3.24.2...v3.24.3)
#### What's Changed
##### disk
- chore: fix typo by
[@majorteach](https://togithub.com/majorteach) in
[https://github.com/shirou/gopsutil/pull/1615](https://togithub.com/shirou/gopsutil/pull/1615)
##### host
- \[host]\[linux]: fix utmp size on linux/arm64 by
[@shirou](https://togithub.com/shirou) in
[https://github.com/shirou/gopsutil/pull/1603](https://togithub.com/shirou/gopsutil/pull/1603)
##### load
- Total Processes in `MiscStat` Corrected by
[@eric1234](https://togithub.com/eric1234) in
[https://github.com/shirou/gopsutil/pull/1612](https://togithub.com/shirou/gopsutil/pull/1612)
##### process
- \[process]\[freebsd]: re-generate types on freebsd arm64 by
[@shirou](https://togithub.com/shirou) in
[https://github.com/shirou/gopsutil/pull/1609](https://togithub.com/shirou/gopsutil/pull/1609)
#### New Contributors
- [@majorteach](https://togithub.com/majorteach) made their first
contribution in
[https://github.com/shirou/gopsutil/pull/1615](https://togithub.com/shirou/gopsutil/pull/1615)
- [@eric1234](https://togithub.com/eric1234) made their first
contribution in
[https://github.com/shirou/gopsutil/pull/1612](https://togithub.com/shirou/gopsutil/pull/1612)
**Full Changelog**:
https://github.com/shirou/gopsutil/compare/v3.24.2...v3.24.3
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [postgresqlreceiver] add deprecation notice for supported PG version (#32093)
**Description:**
Add deprecation notice for the minimal supported PostgreSQL version.
**Link to tracking Issue:**
#30923
**Testing:**
N/A
**Documentation:**
Changelog
* [chore][pkg/stanza] Cleanup noop operator files (#32065)
Contributes to #32058
* fix(deps): update module github.com/clickhouse/clickhouse-go/v2 to v2.23.0 (#32099)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/ClickHouse/clickhouse-go/v2](https://togithub.com/ClickHouse/clickhouse-go)
| `v2.22.4` -> `v2.23.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.4/v2.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fClickHouse%2fclickhouse-go%2fv2/v2.22.4/v2.23.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
ClickHouse/clickhouse-go
(github.com/ClickHouse/clickhouse-go/v2)
###
[`v2.23.0`](https://togithub.com/ClickHouse/clickhouse-go/blob/HEAD/CHANGELOG.md#v2230-2024-03-27----Release-notes-generated-using-configuration-in-githubreleaseyml-at-main---)
[Compare
Source](https://togithub.com/ClickHouse/clickhouse-go/compare/v2.22.4...v2.23.0)
#### What's Changed
##### Enhancements 🎉
- Implement `ConnBeginTx` as replacement for deprecated `Begin` by
[@FelipeLema](https://togithub.com/FelipeLema) in
[https://github.com/ClickHouse/clickhouse-go/pull/1255](https://togithub.com/ClickHouse/clickhouse-go/pull/1255)
##### Other Changes 🛠
- Align error message assertion to new missing custom setting error
formatting by [@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1256](https://togithub.com/ClickHouse/clickhouse-go/pull/1256)
- CI chores by [@jkaflik](https://togithub.com/jkaflik) in
[https://github.com/ClickHouse/clickhouse-go/pull/1258](https://togithub.com/ClickHouse/clickhouse-go/pull/1258)
#### New Contributors
- [@FelipeLema](https://togithub.com/FelipeLema) made their first
contribution in
[https://github.com/ClickHouse/clickhouse-go/pull/1255](https://togithub.com/ClickHouse/clickhouse-go/pull/1255)
**Full Changelog**:
https://github.com/ClickHouse/clickhouse-go/compare/v2.22.4...v2.23.0
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/vmware/govmomi to v0.36.3 (#32098)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/vmware/govmomi](https://togithub.com/vmware/govmomi) |
`v0.36.1` -> `v0.36.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fvmware%2fgovmomi/v0.36.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fvmware%2fgovmomi/v0.36.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fvmware%2fgovmomi/v0.36.1/v0.36.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fvmware%2fgovmomi/v0.36.1/v0.36.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
vmware/govmomi (github.com/vmware/govmomi)
###
[`v0.36.3`](https://togithub.com/vmware/govmomi/releases/tag/v0.36.3)
[Compare
Source](https://togithub.com/vmware/govmomi/compare/v0.36.2...v0.36.3)
#### [Release
v0.36.3](https://togithub.com/vmware/govmomi/compare/v0.36.2...v0.36.3)
> Release Date: 2024-04-02
##### 🧹 Chore
- \[[`35df9f3`](https://togithub.com/vmware/govmomi/commit/35df9f35)]
Update version.go for v0.36.3
##### ⚠️ BREAKING
##### 📖 Commits
- \[[`35df9f3`](https://togithub.com/vmware/govmomi/commit/35df9f35)]
chore: Update version.go for v0.36.3
- \[[`47c5ff9`](https://togithub.com/vmware/govmomi/commit/47c5ff94)]
Remove deprecation for task.Wait and task.WaitForResult
###
[`v0.36.2`](https://togithub.com/vmware/govmomi/releases/tag/v0.36.2)
[Compare
Source](https://togithub.com/vmware/govmomi/compare/v0.36.1...v0.36.2)
#### [Release
v0.36.2](https://togithub.com/vmware/govmomi/compare/v0.36.1...v0.36.2)
> Release Date: 2024-03-27
##### 🐞 Fix
- \[[`9c5fca6`](https://togithub.com/vmware/govmomi/commit/9c5fca64)]
endpoint url to bypass lookup service if envoy sidecar enabled
##### 💫 API Changes
- \[[`f9e1a48`](https://togithub.com/vmware/govmomi/commit/f9e1a48e)]
Add Downloadendpoint field in the library item file struct
([#3386](https://togithub.com/vmware/govmomi/issues/3386))
##### 💫 `govc` (CLI)
- \[[`cd9ce0a`](https://togithub.com/vmware/govmomi/commit/cd9ce0ae)]
snapshot.tree json output to stdout
##### 🧹 Chore
- \[[`f2a87d7`](https://togithub.com/vmware/govmomi/commit/f2a87d75)]
Update version.go for v0.36.2
##### ⚠️ BREAKING
##### 📖 Commits
- \[[`f2a87d7`](https://togithub.com/vmware/govmomi/commit/f2a87d75)]
chore: Update version.go for v0.36.2
- \[[`cd9ce0a`](https://togithub.com/vmware/govmomi/commit/cd9ce0ae)]
govc: snapshot.tree json output to stdout
- \[[`9c5fca6`](https://togithub.com/vmware/govmomi/commit/9c5fca64)]
fix: endpoint url to bypass lookup service if envoy sidecar enabled
- \[[`f9e1a48`](https://togithub.com/vmware/govmomi/commit/f9e1a48e)]
api: Add Downloadendpoint field in the library item file struct
([#3386](https://togithub.com/vmware/govmomi/issues/3386))
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/googlecloudplatform/opentelemetry-operations-go/detectors/gcp to v1.22.0 (#32101)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp](https://togithub.com/GoogleCloudPlatform/opentelemetry-operations-go)
| `v1.21.0` -> `v1.22.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fdetectors%2fgcp/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fdetectors%2fgcp/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fdetectors%2fgcp/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fGoogleCloudPlatform%2fopentelemetry-operations-go%2fdetectors%2fgcp/v1.21.0/v1.22.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [chore][pkg/stanza] Cleanup syslog parser operator files (#32118)
Contributes to #32058
* [receiver/k8sobjects] Fix memory leak caused by pull mode's interval ticker (#31919)
**Description:**
The k8sobjects receiver was starting a ticker when in pull mode, that
would tick every set interval. This ticker needs to be stopped during
shutdown, so I added functionality to cancel the context during
shutdown, properly stopping the ticker.
The original intention here was to add `goleak`, but due to a bug in
`internal/k8stest` it's failing on the end to end test. This change
still fixes a bug, so I believe it's worth merging even without `goleak`
at this point. Note that this change does reduce the number and
frequency of goleak failures.
**Testing:**
All existing tests are passing.
* fix(deps): update module google.golang.org/api to v0.172.0 (#32117)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[google.golang.org/api](https://togithub.com/googleapis/google-api-go-client)
| `v0.171.0` -> `v0.172.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fapi/v0.172.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fapi/v0.172.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fapi/v0.171.0/v0.172.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fapi/v0.171.0/v0.172.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
googleapis/google-api-go-client
(google.golang.org/api)
###
[`v0.172.0`](https://togithub.com/googleapis/google-api-go-client/releases/tag/v0.172.0)
[Compare
Source](https://togithub.com/googleapis/google-api-go-client/compare/v0.171.0...v0.172.0)
##### Features
- **all:** Auto-regenerate discovery clients
([#2485](https://togithub.com/googleapis/google-api-go-client/issues/2485))
([0398093](https://togithub.com/googleapis/google-api-go-client/commit/03980938f5fdc4b5bc08afe11568aa0d89ae150b))
- **all:** Auto-regenerate discovery clients
([#2487](https://togithub.com/googleapis/google-api-go-client/issues/2487))
([b0eaf37](https://togithub.com/googleapis/google-api-go-client/commit/b0eaf376f4f4bc71c06b12317361cc19acb32d36))
- **all:** Auto-regenerate discovery clients
([#2488](https://togithub.com/googleapis/google-api-go-client/issues/2488))
([57e19b3](https://togithub.com/googleapis/google-api-go-client/commit/57e19b358ef4dede327cbd53394c5c6bd3ce8a04))
- **all:** Auto-regenerate discovery clients
([#2490](https://togithub.com/googleapis/google-api-go-client/issues/2490))
([78ee47e](https://togithub.com/googleapis/google-api-go-client/commit/78ee47e859534b34a58b71fa0af3c8c97444845d))
- **all:** Auto-regenerate discovery clients
([#2492](https://togithub.com/googleapis/google-api-go-client/issues/2492))
([77cc7d0](https://togithub.com/googleapis/google-api-go-client/commit/77cc7d0f60965409215289b6c01c9474fa5648e0))
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [chore][pkg/stanza] Cleanup syslog input operator files (#32076)
* [chore][pkg/stanza] Cleanup csv parser operator files (#32109)
* [chore][pkg/stanza] Cleanup router operator files (#32069)
* [chore] fix flaky OTTL test (#32131)
* [chore] prepare grafanacloudconnector for release (#32132)
**Description:**
As described in the documentation, this is the last PR to mark the new
component as Alpha stability and add it to the cmd/otelcontribcol binary
by updating the cmd/otelcontribcol/components.go file.
**Link to tracking Issue:**
#31647
---------
Signed-off-by: Robbie Lankford
* fix(deps): update module github.com/snowflakedb/gosnowflake to v1.9.0 (#32116)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/snowflakedb/gosnowflake](https://togithub.com/snowflakedb/gosnowflake)
| `v1.8.0` -> `v1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fsnowflakedb%2fgosnowflake/v1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fsnowflakedb%2fgosnowflake/v1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fsnowflakedb%2fgosnowflake/v1.8.0/v1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fsnowflakedb%2fgosnowflake/v1.8.0/v1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
snowflakedb/gosnowflake
(github.com/snowflakedb/gosnowflake)
###
[`v1.9.0`](https://togithub.com/snowflakedb/gosnowflake/releases/tag/v1.9.0):
Release
[Compare
Source](https://togithub.com/snowflakedb/gosnowflake/compare/v1.8.0...v1.9.0)
- Please check Snowflake [community page for release
notes](https://docs.snowflake.com/en/release-notes/clients-drivers/golang).
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* fix(deps): update module github.com/aws/aws-sdk-go to v1.51.13 (#32128)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/aws/aws-sdk-go](https://togithub.com/aws/aws-sdk-go) |
`v1.51.12` -> `v1.51.13` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go/v1.51.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go/v1.51.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go/v1.51.12/v1.51.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go/v1.51.12/v1.51.13?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
aws/aws-sdk-go (github.com/aws/aws-sdk-go)
###
[`v1.51.13`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15113-2024-04-02)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.12...v1.51.13)
\===
##### Service Client Updates
- `service/ecs`: Updates service documentation
- Documentation only update for Amazon ECS.
- `service/glue`: Updates service API and documentation
- Adding View related fields to responses of read-only Table APIs.
- `service/ivschat`: Updates service documentation
- `service/rolesanywhere`: Updates service API and documentation
- `service/securityhub`: Updates service documentation
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [chore][pkg/stanza] Cleanup recombine operator files (#32066)
Contributes to #32058
* [cmd/telemetrygen] Add Support for specifying Log Severity (#30990)
resolve
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/26498
---------
Co-authored-by: Pablo Baeyens
* [chore][pkg/stanza] Cleanup secondary parser operator files (#32114)
* [connector/spanmetrics] Change default value of metrics_flush_interval from 15s to 60s (#31806)
**Description:**
Changed default value of `metrics_flush_interval` setting from 15s to
60s
**Link to tracking Issue:** Resolves
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31776
**Testing:** Fixed unit tests
**Documentation:** updated README
* [connector/spanmetrics] Add @Frapschen as code owner (#32137)
I would like to become a code owner of spanconector. my company already
uses the spanconnector and I am also familiar with its code.
* chore(deps): update wandalen/wretry.action action to v3 (#32121)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [Wandalen/wretry.action](https://togithub.com/Wandalen/wretry.action)
| action | major | `v2.1.0` -> `v3.0.1` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
Wandalen/wretry.action (Wandalen/wretry.action)
###
[`v3.0.1`](https://togithub.com/Wandalen/wretry.action/compare/v3.0.0...v3.0.1)
[Compare
Source](https://togithub.com/Wandalen/wretry.action/compare/v3.0.0...v3.0.1)
###
[`v3.0.0`](https://togithub.com/Wandalen/wretry.action/compare/v2.1.0...v3.0.0)
[Compare
Source](https://togithub.com/Wandalen/wretry.action/compare/v2.1.0...v3.0.0)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* [connector/exceptions] change stability to alpha (#31820)
**Description:** Promote this component to alpha and enable it in
contrib.
---------
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
* [chore][pkg/stanza] move file handling to internal package (#31506)
**Description:** Intrdocue a new internal package `tracker` to handle
file operations.
* fix(deps): update module github.com/google/go-github/v59 to v61 (#32122)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/google/go-github/v59](https://togithub.com/google/go-github)
| `v59.0.0` -> `v61.0.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fgoogle%2fgo-github%2fv59/v61.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fgoogle%2fgo-github%2fv59/v61.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fgoogle%2fgo-github%2fv59/v59.0.0/v61.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fgoogle%2fgo-github%2fv59/v59.0.0/v61.0.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
:warning: MAJOR VERSION UPDATE :warning: - please manually update this
package
---
### Release Notes
google/go-github (github.com/google/go-github/v59)
###
[`v61.0.0`](https://togithub.com/google/go-github/releases/tag/v61.0.0)
[Compare
Source](https://togithub.com/google/go-github/compare/v60.0.0...v61.0.0)
This release contains the following breaking API changes:
- feat!: Update deprecated endpoints in github/action_variables.go
([#3104](https://togithub.com/google/go-github/issues/3104))
...and the following additional changes:
- Bump go-github from v59 to v60 in /scrape
([#3087](https://togithub.com/google/go-github/issues/3087))
- Allow querying rule set information by ID with information returned
from GetRulesFromBranch
([#3089](https://togithub.com/google/go-github/issues/3089))
- Bump codecov/codecov-action from 4.0.2 to 4.1.0
([#3091](https://togithub.com/google/go-github/issues/3091))
- Bump github.com/PuerkitoBio/goquery from 1.9.0 to 1.9.1 in /scrape
([#3092](https://togithub.com/google/go-github/issues/3092))
- Add Protection to Branch struct
([#3095](https://togithub.com/google/go-github/issues/3095))
- Bump github.com/alecthomas/kong from 0.8.1 to 0.9.0 in /tools
([#3097](https://togithub.com/google/go-github/issues/3097))
- Bump golang.org/x/net from 0.21.0 to 0.22.0 in /scrape
([#3096](https://togithub.com/google/go-github/issues/3096))
- Bump google.golang.org/protobuf from 1.28.0 to 1.33.0 in /example
([#3099](https://togithub.com/google/go-github/issues/3099))
- Add audit log rate limit category and make rate limit category getter
public
([#3088](https://togithub.com/google/go-github/issues/3088))
- Update README.md
([#3110](https://togithub.com/google/go-github/issues/3110))
- Allow Installation of Custom Properties Permissions
([#3108](https://togithub.com/google/go-github/issues/3108))
- Add NotificationSetting to NewTeam
([#3111](https://togithub.com/google/go-github/issues/3111))
- Fix pagination for ListCopilotSeats
([#3112](https://togithub.com/google/go-github/issues/3112))
- Add .\*.local to .gitignore
([#3115](https://togithub.com/google/go-github/issues/3115))
- Add CreateOrUpdateRepoCustomPropertyValues
([#3109](https://togithub.com/google/go-github/issues/3109))
- Bump version of go-github to v61.0.0
([#3118](https://togithub.com/google/go-github/issues/3118))
###
[`v60.0.0`](https://togithub.com/google/go-github/releases/tag/v60.0.0)
[Compare
Source](https://togithub.com/google/go-github/compare/v59.0.0...v60.0.0)
This release contains the following breaking API changes:
- Turn RequiredStatusChecks Checks and Contexts into pointers
([#3070](https://togithub.com/google/go-github/issues/3070))
- feat!: Change Hook.Config field from map to \*HookConfig
([#3073](https://togithub.com/google/go-github/issues/3073))
...and the following additional changes:
- Bump go-github from v58 to v59 in /scrape
([#3069](https://togithub.com/google/go-github/issues/3069))
- Bump golang.org/x/net from 0.20.0 to 0.21.0 in /scrape
([#3071](https://togithub.com/google/go-github/issues/3071))
- Update workflow and tools to use Go 1.22 and 1.21
([#3074](https://togithub.com/google/go-github/issues/3074))
- Add test case for JSON resource marshaling
([#3075](https://togithub.com/google/go-github/issues/3075))
- Add test case for JSON resource marshaling
([#3076](https://togithub.com/google/go-github/issues/3076))
- Rename function parameters to match usage as url parameters
([#3078](https://togithub.com/google/go-github/issues/3078))
- Add test case for JSON resource marshaling
([#3080](https://togithub.com/google/go-github/issues/3080))
- Bump github.com/PuerkitoBio/goquery from 1.8.1 to 1.9.0 in /scrape
([#3085](https://togithub.com/google/go-github/issues/3085))
- Bump codecov/codecov-action from 4.0.1 to 4.0.2
([#3084](https://togithub.com/google/go-github/issues/3084))
- Bump version of go-github to v60.0.0
([#3086](https://togithub.com/google/go-github/issues/3086))
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Andrzej Stencel
* [pkg/stanza/operator/transformer/recombine] Add max_unmatched_batch_size to recombine operator (#32144)
**Description:** Add a new `max_unmatched_batch_size` config parameter
to configure the maximum number of consecutive entries that will be
combined into a single entry before the match occurs
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/31653
**Testing:** unit tests, manual tests
**Documentation:** Add description of the new config option
* [chore][pkg/stanza] Cleanup filter operator files (#32062)
Contributes to #32058
Also adds config unmarshal tests to this operator.
* [chore][pkg/stanza] Cleanup move operator files (#32064)
Contributes to #32058
* [chore][pkg/stanza] Cleanup jsonarray parser operator files (#32111)
Contributes to #32058
* Revert "[pkg/stanza/operator/transformer/recombine] Add max_unmatched_batch_size to recombine operator" (#32154)
Unfortunately one or more of the new tests appear to have race
conditions. See
https://github.com/open-telemetry/opentelemetry-collector-contrib/actions/runs/8544198732/job/23409744565#step:8:164
* [exporter/elasticsearch] Add test case for de-dotting log documents (#32134)
This PR adds a test case to ensure that log documents are de-dotted
correctly when `dedot: true` is set.
* fix(deps): update module github.com/open-telemetry/otel-arrow/collector to v0.20.0 (#32106)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/open-telemetry/otel-arrow/collector](https://togithub.com/open-telemetry/otel-arrow)
| `v0.18.0` -> `v0.20.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fopen-telemetry%2fotel-arrow%2fcollector/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fopen-telemetry%2fotel-arrow%2fcollector/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fopen-telemetry%2fotel-arrow%2fcollector/v0.18.0/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fopen-telemetry%2fotel-arrow%2fcollector/v0.18.0/v0.20.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
open-telemetry/otel-arrow
(github.com/open-telemetry/otel-arrow/collector)
###
[`v0.20.0`](https://togithub.com/open-telemetry/otel-arrow/releases/tag/v0.20.0)
[Compare
Source](https://togithub.com/open-telemetry/otel-arrow/compare/v0.19.0...v0.20.0)
##### What's Changed
- Backport lint fixes from OTel-Collector-Contrib PR 31996 by
[@jmacd](https://togithub.com/jmacd) in
[https://github.com/open-telemetry/otel-arrow/pull/163](https://togithub.com/open-telemetry/otel-arrow/pull/163)
- Upgrade collector to v0.97.0 by
[@moh-osman3](https://togithub.com/moh-osman3) in
[https://github.com/open-telemetry/otel-arrow/pull/164](https://togithub.com/open-telemetry/otel-arrow/pull/164)
**Full Changelog**:
https://github.com/open-telemetry/otel-arrow/compare/v0.19.0...v0.20.0
###
[`v0.19.0`](https://togithub.com/open-telemetry/otel-arrow/releases/tag/v0.19.0)
[Compare
Source](https://togithub.com/open-telemetry/otel-arrow/compare/v0.18.0...v0.19.0)
See
[CHANGELOG.md](https://togithub.com/open-telemetry/otel-arrow/blob/main/CHANGELOG.md#0190---2024-03-26)
for release notes.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [chore][pkg/stanza] Cleanup journald input operator files (#32074)
Contributes to #32058
* [pkg/stanza] Revert recombine operator 'overwrite_with' change (#32146)
Effectively reverts #30786, due to error pointed out by @yutingcaicyt
[here](https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/30786#discussion_r1548862662).
* [chore][pkg/stanza] Cleanup file input operator files (#32072)
Contributes to #32058
* [chore] Run a check on codeowners, backed by a github token (#32025)
This PR introduces a check backed by a github token that tests the
content of .github/CODEOWNERS against the metadata of all the
components. Given that a token is used, and won't be present in builds
running with forks, this check is only made on the main branch of the
repository `open-telemetry/opentelemetry-collector-contrib`.
As such, I can't really test if it all works. The token is provisioned
by https://github.com/open-telemetry/community/issues/1659. More context
in
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30552
* [chore] bump go to 1.21.9 (#32160)
Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com>
* [chore] fix codeowners (#32157)
This fixes the codeowners file content and explicitly adds @thmshmm to
the allowlist.
* [chore] Remove tmp (#32161)
It's just some temp CI logs. Seems it was added by mistake in
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/32146.
* [chore] update golang.org/x/net to v0.23.0 (#32159)
Co-authored-by: Alex Boten <223565+codeboten@users.noreply.github.com>
* [chore][pkg/stanza] Cleanup json parser operator files (#32110)
Contributes to #32058
* [chore][pkg/stanza] Cleanup keyvalue parser operator files (#32112)
Contributes to #32058
* [chore][pkg/stanza] Cleanup uri parser operator files (#32119)
Contributes to #32058
* [chore][pkg/stanza] Cleanup regex parser operator files (#32113)
Contributes to #32058
* [exporter/datadog] Change noAPMStatsFeatureGate log from warn to info (#32147)
**Description:**
Changes log introduced in #31981 from a warn log to an info log, since
info is more appropriate for this message.
```
❯ ./bin/otelcontribcol_darwin_arm64
2024-04-03T11:04:48.974-0400 info service@v0.97.1-0.20240327181407-1038b67c85a0/telemetry.go:55 Setting up own telemetry...
2024-04-03T11:04:48.974-0400 info service@v0.97.1-0.20240327181407-1038b67c85a0/telemetry.go:97 Serving metrics {"address": ":8888", "level": "Basic"}
2024-04-03T11:04:48.975-0400 debug exporter@v0.97.1-0.20240327181407-1038b67c85a0/exporter.go:273 Beta component. May change in the future. {"kind": "exporter", "data_type": "traces", "name": "datadog/api"}
2024-04-03T11:04:48.975-0400 info datadogexporter@v0.97.0/factory.go:386 Trace metrics are now disabled in the Datadog Exporter by default. To continue receiving Trace Metrics, configure the Datadog Connector or disable the feature gate. {"kind": "exporter", "data_type": "traces", "name": "datadog/api", "documentation": "https://docs.datadoghq.com/opentelemetry/guide/migration/", "feature gate ID": "exporter.datadogexporter.DisableAPMStats"}
```
**Link to tracking Issue:**
**Testing:**
**Documentation:**
* Update prometheus/prometheus to v0.51.1 (#32155)
**Description:**
supersedes
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31572
For
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31572#issuecomment-2029701231,
the test case it is based on was removed upstream:
https://github.com/prometheus/prometheus/commit/a28d7865adf6542cbac3b908124ae07846a0d4a8#diff-9978684151c256395cd22e4883a7e22c14e153a567a769c8abed86a2225a1514L462,
so I think it is OK to change the expected outcome. It allows trailing
commas within brackets, which seems OK.
**Link to tracking Issue:**
**Testing:**
**Documentation:**
* [chore][CI/CD] Fix build-examples (#32156)
**Description:**
GitHub runners are being upgraded to docker v2. This requires `docker
compose` to be used instead of `docker-compose`. I'm not aware of any
other requirements for updating `build-examples` at this time.
**Link to tracking Issue:**
Resolves
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/32138
**Testing:**
Working locally, github runners won't run on updated code until merged
into main AFAIK, unfortunately.
Co-authored-by: Antoine Toulme
* [chore][receiver/snowflakereceiver] (#31260)
**Description:** Refactored the scrape function in scrape.go to take
better advantage of go's language features. Namely, utilizing go
routines and channels to parallelize the individual metric scrapes which
make up the overall scrape function. This greatly improves the
performance of the receiver.
* [chore][receiver/splunkenterprise]Splunkent scrape refactor (#31184)
**Description:** Refactored the way scrapes work to better utilize
golang's language features to parallelize the scraping process.
**Testing:** Existing tests cover the scrape process. Inclusion in a
collector distribution was succesful.
* update otel apr5 (#32158)
updating core to latest to address test failures after the change from
`/` to `_`
---------
Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com>
* [processor/filter] Update `HasAttrOnDatapoint` and `HasAttrKeyOnDatapoint` examples and docs (#32149)
**Description:**
- No full examples of this func so I added one
- Not explicitly mentioned that a metric with a bool value won't work so
I mentioned that only strings work for both the query and metric points
- Mentioned you need to use the `metrics.metric` and not
`metrics.datapoint` context
**Link to tracking Issue:**
N/A
**Testing:**
N/A
**Documentation:**
- Added better examples
- Called out only string values work
- Mentioned specific context needed
---------
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
* change configuration name in log message (#32164)
* [chore][README.md] Remove dead link (#32174)
This document was removed by
https://github.com/open-telemetry/opentelemetry-collector/issues/8889. A
recent [check links
run](https://github.com/open-telemetry/opentelemetry-collector-contrib/actions/runs/8558431956/job/23453029359?pr=32172)
failed on this link.
If we think it would be helpful, we could add links to
[configuration](https://opentelemetry.io/docs/collector/configuration/)
and [deployment](https://opentelemetry.io/docs/collector/deployment/)
documentation, which is some of what this document originally had, from
what I understand. However, those pages are easily visible from the
`Getting Started` link that's already in this document.
* [chore] update triagers list (#32172)
As confirmed with @gouthamve, they're no longer able to continue with
triager responsibilities. Much appreciate all your contributions!
Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com>
* [receiver/filelog] Add documentation about contents of the offset tracking file (#31886)
**Description:**
This PR adds documentation explaining how to interpret the contents of
the `filelog` receiver's offset tracking file, configured using the
`storage` extension.
**Link to tracking Issue:** #30970
---------
Co-authored-by: Tiffany Hrabusa <30397949+tiffany76@users.noreply.github.com>
Co-authored-by: Chris Mark
Co-authored-by: Daniel Jaglowski
* [chore][receiver/sqlserver] Add database IO metrics query (#32178)
**Description:**
Add a query for the database IO metrics that SQL Server exposes. Read
more about available metrics
[here](https://learn.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/sys-dm-io-virtual-file-stats-transact-sql?view=sql-server-ver16).
This is a no-op update as this query will not be used until direct
connection to the SQL Server instance is fully implemented. This is
simply part of the effort.
**Note:** This code is currently not reached. This is on purpose.
**Link to tracking Issue:**
This was originally part of
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31915,
but I'm breaking this out to make the original PR a more manageable
size.
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30297
**Testing:**
Existing tests and added tests are passing.
**Documentation:**
Purposefully none: This is currently dead code until all of #31915 gets
merged, so it shouldn't be used.
* [chore][pkg/stanza] Cleanup unquote operator files (#32070)
Contributes to #32058
* [chore][pkg/stanza] Cleanup remove operator files (#32067)
Contributes to #32058
* [chore][pkg/stanza] Cleanup windows input operator files (#32079)
Contributes to #32058
* [chore][pkg/stanza] Cleanup udp input operator files (#32078)
Contributes to #32058
* [chore][pkg/stanza] Cleanup output operator files (#32071)
Contributes to #32058
* [chore][pkg/stanza] Cleanup assignkeys operator files (#32060)
Contributes to #32058
* [chore][pkg/stanza] Cleanup copy operator files (#32061)
Contributes to #32058
* [chore][pkg/stanza] Cleanup flatten operator files (#32063)
Contributes to #32058
* [chore][pkg/stanza] Cleanup debug input operator files (#32073)
Contributes to #32058
* [chore][pkg/stanza] Cleanup namedpipe input operator files (#32075)
Contributes to #32058
* [chore][receiver/snowflake] Enable goleak check (#32182)
**Description:**
This enables the `goleak` check for the Snowflake receiver to help
ensure no goroutines are being leaked. This is a test only change, a
couple shutdown/close calls were missing.
**Link to tracking Issue:** #30438
**Testing:**
All existing tests are passing, as well as added `goleak` check.
* Add @ycombinator as codeowner for elasticsearchexporter (#32171)
**Description:**
This PR proposes adding @ycombinator as a codeowner for the
`elasticsearch` exporter component, being an [employee of
Elastic](https://www.linkedin.com/company/elastic-co/people/?keywords=shaunak)
and also meeting the codeowner
[requirements](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#requirements):
1. [Be a member of the OpenTelemetry
organization.](https://github.com/open-telemetry/community/blob/main/community-membership.md#member)
* https://github.com/orgs/open-telemetry/people?query=ycombinator
2. (Code Owner Discretion) It is best to have resolved an issue related
to the component, contributed directly to the component, and/or review
component PRs. How much interaction with the component is required
before becoming a Code Owner is up to any existing Code Owners.
* Resolved
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/26647
via
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/29619
* Reviewed
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31553
* Contributed
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31694
as follow up to
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31553
* Reviewed
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31848
* [receiver/filelog] Add test cases for recursive globs (#32188)
**Description:**
This PR adds a couple of unit test cases exercising recursive glob
(`**`) usage in the `include` and `exclude` options of the `filelog`
receiver.
* [pgk/ottl] Remove debug log from invalidComparison (#31813)
**Description:**
When we added the boolean comparison feature we included a debug log to
help troubleshoot when 2 comparisons were invalid, such as checking if a
`string` was equal to a `float64`. Since then we've had complaints about
how noisy the log is, mainly because it happens when checking against
`nil`, which happens frequently when checking if an attribute has a
specific value when it is present.
This PR removes the log.
**Link to tracking Issue:**
Closes
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/29015
* [chore][receiver/zookeeper] Enable goleak check (#32179)
**Description:**
This change enables `goleak` to help ensure the ZooKeeper receiver does
not leak any goroutines. This is a test only change, the existing test
implementation needed a bit of modification to properly close the
network listener.
**Link to tracking Issue:**
#30438
**Testing:**
Existing tests and new `goleak` check are all passing.
* [chore][receiver/sshcheck] Enable goleak check (#32181)
This enables `goleak` checks for the sshcheck receiver to help ensure no
goroutines are being leaked. This is a test only change. The test
package's SSH Server needed to be modified to properly shutdown.
**Link to tracking Issue:** #30438
* [chore][docs][pkg/translator/jaeger] move docs from spec (#32187)
Moves documentation from
https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk_exporters/jaeger.md
to Conttib's `pkg/translator/jaeger`.
**Link to tracking Issue:** https://github.com/open-telemetry/opentelemetry-specification/issues/3980
* [chore][receiver/nginx] Enable goleak check (#32198)
Enable `goleak` check for the NGINX receiver to help ensure no
goroutines are being leaked. This is a test only change, a couple test
servers were missing `Close` calls.
**Link to tracking Issue:** #30438
* [chore][receiver/podman] Enable goleak check (#32196)
Enable `goleak` checking on the Podman receiver to help ensure no
goroutines are being leaked. This is a test only change.
**Link to tracking Issue:** #30438
* [chore][receiver/purefa] Enable goleak check (#32194)
Enable `goleak` check for the PureStorage Flash Array receiver to help
ensure no goroutines are being leaked. This is a test only change. The
`TestStart` test was missing a shutdown call, and once the shutdown call
was added, it was a duplicate test to `TestShutdown`. I consolidated
these two tests into one, called `TestStartAndShutdown`.
**Link to tracking Issue:** #30438
* [chore][receiver/purefb] Enable goleak check (#32184)
This change enables `goleak` checks on the Pure Storage FlashBlade
receiver to help ensure no goroutines are being leaked. This is a test
only change as a test was missing a shutdown call.
This looks like I deleted a test, but the two tests were identical,
other than a missing shutdown call. Once the missing call was added they
were identical, so I decided to delete one. I also consolidated err
checking to remove the `err` variable and directly check the result of
the `Start` and `Shutdown` methods.
**Link to tracking Issue:** #30438
* [chore][receiver/nsxt] Enable goleak check (#32197)
Enable `goleak` checks for the NSX-T receiver to help ensure no
goroutines are being leaked. This is a test only change, some tests were
missing close calls to servers.
**Link to tracking Issue:** #30438
* [chore][receiver/pulsar] Enable goleak check (#32195)
Enable `goleak` testing on the Pulsar receiver to help ensure no
goroutines are being leaked.
**Link to tracking Issue:** #30438
* [chore][receiver/saphana] Enable goleak check (#32183)
Enable `goleak` check for the SAP HANA receiver to help ensure no
goroutines are being leaked.
**Link to tracking Issue:** #30438
* Prometheus Receiver: Unregister self-observability metrics on Shutdown (#32202)
**Description:**
Prometheus libraries will currently fail to initialize if they are
called more than once for the same component name. This is because it
attempts to register the same self-observability metrics, which isn't
allowed by the Prometheus client. To work around this, Unregister all
self-observability metrics during Shutdown.
This updates the prometheus dependency to an unreleased version to pull
in https://github.com/prometheus/prometheus/pull/13897 and
https://github.com/prometheus/prometheus/pull/13896.
**Link to tracking Issue:**
Fixes
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/32123
**Testing:**
Unit test added.
**Documentation:**
N/A
cc @cpheps @djaglowski
* [chore] reuse constant for StrptimeKey (#32193)
* add actuated runners (#32135)
**Description:**
Add an ARM build using Actuated, which will run an ARM github action
runner on CNCF allocated Equinix colocated ARM servers.
**Link to tracking Issue:**
Fixes #12920
Fixes #32136
* [chore] Add nop components to otelcontribcol (#32203)
**Description:**
Add the nop receiver and nop exporter to otelcontribcol.
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector/issues/7316
* API usability improvements in sampling package (#31940)
**Description:**
Several usability issues were ironed out while working on #31894. This
PR is the pkg/sampling changes from that PR.
Highlights:
- Adds `NeverSampleThreshold` value, which is the exclusive
upper-boundary of threshold values. This makes negative sampling
decisions easier to manage, as shown in #31894.
- Adds `AllProbabilitiesRandomness` value, which is the inclusive
upper-boundary of Randomness values. This makes error handling more
natural as shown in #31894. All thresholds except `NeverSampleThreshold`
will be sampled at `AllProbabilitiesRandomness`.
- Adds `UnsignedToThreshold` constructor for explicit threshold
construction. This is useful in the case of #31894 because it constructs
a 14-bit threshold value.
- Adds `UnsignedToRandomness` constructor for explicit randomness
construction. This is useful in the case of #31894 because it constructs
randomness values from log records w/o use of TraceState.
- Removes a parameter from `UpdateTValueWithSampling` to avoid the
potential for an inconsistent update through mis-use (as identified in
#31894, there is less optimization potential because sampling.threshold
modifies thresholds in all modes).
- Eliminates the `ErrPrecisionUnderflow` error condition and
automatically corrects the problem by extending precision near 0.0 and
1.0 where there are obligatory leading `f` or `0` digits.
**Link to tracking Issue:** #31918
**Testing:** New tests added for coverage.
**Documentation:** New comments to explain.
---------
Co-authored-by: Sean Marciniak <30928402+MovieStoreGuy@users.noreply.github.com>
* Update All github.com/aws packages (#32228)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/aws/aws-sdk-go](https://togithub.com/aws/aws-sdk-go) |
`v1.51.13` -> `v1.51.17` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go/v1.51.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go/v1.51.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go/v1.51.13/v1.51.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go/v1.51.13/v1.51.17?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/config](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.27.10` -> `v1.27.11` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.10/v1.27.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fconfig/v1.27.10/v1.27.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/credentials](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.17.10` -> `v1.17.11` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.10/v1.17.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fcredentials/v1.17.10/v1.17.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/aws/aws-sdk-go-v2/service/servicediscovery](https://togithub.com/aws/aws-sdk-go-v2)
| `v1.29.4` -> `v1.29.5` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.4/v1.29.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2faws%2faws-sdk-go-v2%2fservice%2fservicediscovery/v1.29.4/v1.29.5?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
aws/aws-sdk-go (github.com/aws/aws-sdk-go)
###
[`v1.51.17`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15117-2024-04-08)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.16...v1.51.17)
\===
##### Service Client Updates
- `service/controlcatalog`: Adds new service
- `service/mgn`: Updates service API and documentation
- `service/networkmonitor`: Updates service API and documentation
###
[`v1.51.16`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15116-2024-04-05)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.15...v1.51.16)
\===
##### Service Client Updates
- `service/quicksight`: Updates service API and documentation
- Adding IAMIdentityCenterInstanceArn parameter to
CreateAccountSubscription
- `service/resource-groups`: Updates service API and documentation
- `service/verifiedpermissions`: Updates service API and documentation
###
[`v1.51.15`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15115-2024-04-04)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.14...v1.51.15)
\===
##### Service Client Updates
- `service/b2bi`: Updates service API
- `service/cleanrooms`: Updates service API and documentation
- `service/ec2`: Updates service API
- Amazon EC2 G6 instances powered by NVIDIA L4 Tensor Core GPUs can be
used for a wide range of graphics-intensive and machine learning use
cases. Gr6 instances also feature NVIDIA L4 GPUs and can be used for
graphics workloads with higher memory requirements.
- `service/emr-containers`: Updates service API and documentation
- `service/ivs`: Updates service API and documentation
- `service/verifiedpermissions`: Updates service API and documentation
###
[`v1.51.14`](https://togithub.com/aws/aws-sdk-go/blob/HEAD/CHANGELOG.md#Release-v15114-2024-04-03)
[Compare
Source](https://togithub.com/aws/aws-sdk-go/compare/v1.51.13...v1.51.14)
\===
##### Service Client Updates
- `service/cleanroomsml`: Updates service API and documentation
- `service/cloudformation`: Updates service API and documentation
- This release would return a new field - PolicyAction in
cloudformation's existed DescribeChangeSetResponse, showing actions we
are going to apply on the physical resource (e.g., Delete, Retain)
according to the user's template
- `service/datazone`: Updates service API, documentation, and paginators
- `service/docdb`: Updates service API and documentation
- This release adds Global Cluster Switchover capability which enables
you to change your global cluster's primary AWS Region, the region that
serves writes, while preserving the replication between all regions in
the global cluster.
- `service/groundstation`: Updates service API and documentation
- `service/lambda`: Updates service API and documentation
- Add Ruby 3.3 (ruby3.3) support to AWS Lambda
- `service/medialive`: Updates service API and documentation
- Cmaf Ingest outputs are now supported in Media Live
- `service/medical-imaging`: Updates service API and documentation
- `service/transfer`: Updates service API and documentation
- Add ability to specify Security Policies for SFTP Connectors
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update All github.com/datadog packages (#32233)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/DataDog/agent-payload/v5](https://togithub.com/DataDog/agent-payload)
| `v5.0.104` -> `v5.0.111` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fDataDog%2fagent-payload%2fv5/v5.0.111?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fDataDog%2fagent-payload%2fv5/v5.0.111?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fDataDog%2fagent-payload%2fv5/v5.0.104/v5.0.111?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fDataDog%2fagent-payload%2fv5/v5.0.104/v5.0.111?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/DataDog/datadog-api-client-go/v2](https://togithub.com/DataDog/datadog-api-client-go)
| `v2.22.0` -> `v2.24.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fDataDog%2fdatadog-api-client-go%2fv2/v2.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fDataDog%2fdatadog-api-client-go%2fv2/v2.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fDataDog%2fdatadog-api-client-go%2fv2/v2.22.0/v2.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fDataDog%2fdatadog-api-client-go%2fv2/v2.22.0/v2.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
DataDog/agent-payload
(github.com/DataDog/agent-payload/v5)
###
[`v5.0.111`](https://togithub.com/DataDog/agent-payload/releases/tag/v5.0.111):
[CWS] Udpate the CWS proto for the security profiles sliding window
purpose
[Compare
Source](https://togithub.com/DataDog/agent-payload/compare/v5.0.110...v5.0.111)
This new proto version update the security profile proto, deprecating
some fields and adding the version contexts
PR needed for the [related work on security profile sliding
window](https://togithub.com/DataDog/datadog-agent/pull/20506)
#### What's Changed
- \[CWS] Udpate the CWS proto for the security profiles sliding window
purpose by [@spikat](https://togithub.com/spikat) in
[https://github.com/DataDog/agent-payload/pull/292](https://togithub.com/DataDog/agent-payload/pull/292)
#### New Contributors
- [@spikat](https://togithub.com/spikat) made their first
contribution in
[https://github.com/DataDog/agent-payload/pull/292](https://togithub.com/DataDog/agent-payload/pull/292)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.110...v5.0.111
###
[`v5.0.110`](https://togithub.com/DataDog/agent-payload/releases/tag/v5.0.110)
[Compare
Source](https://togithub.com/DataDog/agent-payload/compare/v5.0.109...v5.0.110)
#### What's Changed
- add TypeCollectorECSTask by
[@kangyili](https://togithub.com/kangyili) in
[https://github.com/DataDog/agent-payload/pull/296](https://togithub.com/DataDog/agent-payload/pull/296)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.109...v5.0.110
###
[`v5.0.109`](https://togithub.com/DataDog/agent-payload/releases/tag/v5.0.109)
[Compare
Source](https://togithub.com/DataDog/agent-payload/compare/v5.0.108...v5.0.109)
#### What's Changed
- cronjob status: add lastSuccessfultime by
[@aureleoules](https://togithub.com/aureleoules) in
[https://github.com/DataDog/agent-payload/pull/295](https://togithub.com/DataDog/agent-payload/pull/295)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.108...v5.0.109
###
[`v5.0.108`](https://togithub.com/DataDog/agent-payload/releases/tag/v5.0.108)
[Compare
Source](https://togithub.com/DataDog/agent-payload/compare/v5.0.107...v5.0.108)
#### What's Changed
- Add repo digest field to container payload by
[@badovm](https://togithub.com/badovm) in
[https://github.com/DataDog/agent-payload/pull/293](https://togithub.com/DataDog/agent-payload/pull/293)
- ecs task lifecycle event by
[@kangyili](https://togithub.com/kangyili) in
[https://github.com/DataDog/agent-payload/pull/282](https://togithub.com/DataDog/agent-payload/pull/282)
- add ecs task payload by
[@kangyili](https://togithub.com/kangyili) in
[https://github.com/DataDog/agent-payload/pull/281](https://togithub.com/DataDog/agent-payload/pull/281)
#### New Contributors
- [@badovm](https://togithub.com/badovm) made their first
contribution in
[https://github.com/DataDog/agent-payload/pull/293](https://togithub.com/DataDog/agent-payload/pull/293)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.107...v5.0.108
###
[`v5.0.107`](https://togithub.com/DataDog/agent-payload/releases/tag/v5.0.107)
[Compare
Source](https://togithub.com/DataDog/agent-payload/compare/v5.0.106...v5.0.107)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.106...v5.0.107
#### What's Changed
- Add repo digest field to container payload by
[@badovm](https://togithub.com/badovm) in
[https://github.com/DataDog/agent-payload/pull/293](https://togithub.com/DataDog/agent-payload/pull/293)
#### New Contributors
- [@badovm](https://togithub.com/badovm) made their first
contribution in
[https://github.com/DataDog/agent-payload/pull/293](https://togithub.com/DataDog/agent-payload/pull/293)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.106...v5.0.107
###
[`v5.0.106`](https://togithub.com/DataDog/agent-payload/releases/tag/v5.0.106)
[Compare
Source](https://togithub.com/DataDog/agent-payload/compare/v5.0.105...v5.0.106)
#### What's Changed
- Add TRACE HTTP method to process payload by
[@vitkyrka](https://togithub.com/vitkyrka) in
[https://github.com/DataDog/agent-payload/pull/291](https://togithub.com/DataDog/agent-payload/pull/291)
#### New Contributors
- [@vitkyrka](https://togithub.com/vitkyrka) made their first
contribution in
[https://github.com/DataDog/agent-payload/pull/291](https://togithub.com/DataDog/agent-payload/pull/291)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.105...v5.0.106
###
[`v5.0.105`](https://togithub.com/DataDog/agent-payload/releases/tag/v5.0.105)
[Compare
Source](https://togithub.com/DataDog/agent-payload/compare/v5.0.104...v5.0.105)
#### What's Changed
- Add NetworkPolicy protobuf definition by
[@aureleoules](https://togithub.com/aureleoules) in
[https://github.com/DataDog/agent-payload/pull/290](https://togithub.com/DataDog/agent-payload/pull/290)
#### New Contributors
- [@aureleoules](https://togithub.com/aureleoules) made their
first contribution in
[https://github.com/DataDog/agent-payload/pull/290](https://togithub.com/DataDog/agent-payload/pull/290)
**Full Changelog**:
https://github.com/DataDog/agent-payload/compare/v5.0.104...v5.0.105
DataDog/datadog-api-client-go
(github.com/DataDog/datadog-api-client-go/v2)
###
[`v2.24.0`](https://togithub.com/DataDog/datadog-api-client-go/releases/tag/v2.24.0)
[Compare
Source](https://togithub.com/DataDog/datadog-api-client-go/compare/v2.23.0...v2.24.0)
##### What's Changed
##### Fixed
- Disable additionalProperties for Downtime Schedule UpdateRequest
oneOfs by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2390](https://togithub.com/DataDog/datadog-api-client-go/pull/2390)
- Fix ListServiceDefinitions pagination information by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2416](https://togithub.com/DataDog/datadog-api-client-go/pull/2416)
##### Added
- Adds support for `ListMetricAssets` endpoint by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2404](https://togithub.com/DataDog/datadog-api-client-go/pull/2404)
- Add support for new CRUD agent rules endpoints by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2410](https://togithub.com/DataDog/datadog-api-client-go/pull/2410)
- Add documentation for workflow usage attribution by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2418](https://togithub.com/DataDog/datadog-api-client-go/pull/2418)
- Add Custom Destinations Public API by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2422](https://togithub.com/DataDog/datadog-api-client-go/pull/2422)
##### Deprecated
- Deprecate the pattern property for SDS Standard Pattern Attributes by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2411](https://togithub.com/DataDog/datadog-api-client-go/pull/2411)
- Deprecate Incident Services endpoints by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2424](https://togithub.com/DataDog/datadog-api-client-go/pull/2424)
##### New Contributors
- [@antonio-ramadas-dd](https://togithub.com/antonio-ramadas-dd)
made their first contribution in
[https://github.com/DataDog/datadog-api-client-go/pull/2421](https://togithub.com/DataDog/datadog-api-client-go/pull/2421)
**Full Changelog**:
https://github.com/DataDog/datadog-api-client-go/compare/v2.23.0...v2.24.0
###
[`v2.23.0`](https://togithub.com/DataDog/datadog-api-client-go/releases/tag/v2.23.0)
[Compare
Source](https://togithub.com/DataDog/datadog-api-client-go/compare/v2.22.0...v2.23.0)
#### What's Changed
##### Fixed
- Move under common tag Case Management by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2385](https://togithub.com/DataDog/datadog-api-client-go/pull/2385)
- Include user data with team membership resource by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2380](https://togithub.com/DataDog/datadog-api-client-go/pull/2380)
##### Added
- Case Management Public API documentation by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2364](https://togithub.com/DataDog/datadog-api-client-go/pull/2364)
- Make grpc steps available for synthetics api multisteps tests by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2384](https://togithub.com/DataDog/datadog-api-client-go/pull/2384)
- Add cloud run filter to GCP v1 and v2 spec by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2361](https://togithub.com/DataDog/datadog-api-client-go/pull/2361)
- add ASM serverless to usage metering API docs by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2393](https://togithub.com/DataDog/datadog-api-client-go/pull/2393)
- Add new products to usage API docs by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2396](https://togithub.com/DataDog/datadog-api-client-go/pull/2396)
##### Changed
- Update spec for DORA Metrics Incident endpoint by
[@api-clients-generation-pipeline](https://togithub.com/api-clients-generation-pipeline)
in
[https://github.com/DataDog/datadog-api-client-go/pull/2381](https://togithub.com/DataDog/datadog-api-client-go/pull/2381)
**Full Changelog**:
https://github.com/DataDog/datadog-api-client-go/compare/v2.22.0...v2.23.0
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/prometheus/client_model to v0.6.1 (#32239)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/prometheus/client_model](https://togithub.com/prometheus/client_model)
| `v0.6.0` -> `v0.6.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fprometheus%2fclient_model/v0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fprometheus%2fclient_model/v0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fprometheus%2fclient_model/v0.6.0/v0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fprometheus%2fclient_model/v0.6.0/v0.6.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
prometheus/client_model
(github.com/prometheus/client_model)
###
[`v0.6.1`](https://togithub.com/prometheus/client_model/releases/tag/v0.6.1)
[Compare
Source](https://togithub.com/prometheus/client_model/compare/v0.6.0...v0.6.1)
#### What's Changed
- Bump google.golang.org/protobuf from 1.32.0 to 1.33.0 by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/prometheus/client_model/pull/84](https://togithub.com/prometheus/client_model/pull/84)
**Full Changelog**:
https://github.com/prometheus/client_model/compare/v0.6.0...v0.6.1
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/sijms/go-ora/v2 to v2.8.11 (#32240)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/sijms/go-ora/v2](https://togithub.com/sijms/go-ora) |
`v2.8.10` -> `v2.8.11` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.10/v2.8.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fsijms%2fgo-ora%2fv2/v2.8.10/v2.8.11?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
sijms/go-ora (github.com/sijms/go-ora/v2)
### [`v2.8.11`](https://togithub.com/sijms/go-ora/releases/tag/v2.8.11):
: Fix regression in `encryption and data integrity
[Compare
Source](https://togithub.com/sijms/go-ora/compare/v2.8.10...v2.8.11)
fix regression in encryption and data integrity when connection
break/reset
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module sigs.k8s.io/controller-runtime to v0.17.3 (#32243)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[sigs.k8s.io/controller-runtime](https://togithub.com/kubernetes-sigs/controller-runtime)
| `v0.17.2` -> `v0.17.3` |
[![age](https://developer.mend.io/api/mc/badges/age/go/sigs.k8s.io%2fcontroller-runtime/v0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/sigs.k8s.io%2fcontroller-runtime/v0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/sigs.k8s.io%2fcontroller-runtime/v0.17.2/v0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/sigs.k8s.io%2fcontroller-runtime/v0.17.2/v0.17.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
kubernetes-sigs/controller-runtime
(sigs.k8s.io/controller-runtime)
###
[`v0.17.3`](https://togithub.com/kubernetes-sigs/controller-runtime/releases/tag/v0.17.3)
[Compare
Source](https://togithub.com/kubernetes-sigs/controller-runtime/compare/v0.17.2...v0.17.3)
##### What's Changed
- 🌱 Update to Kubernetes v1.29.2 by
[@sbueringer](https://togithub.com/sbueringer) in
[https://github.com/kubernetes-sigs/controller-runtime/pull/2711](https://togithub.com/kubernetes-sigs/controller-runtime/pull/2711)
- :bug: Cache: Keep selectors when byObject.Namespaces is defaulted by
[@k8s-infra-cherrypick-robot](https://togithub.com/k8s-infra-cherrypick-robot)
in
[https://github.com/kubernetes-sigs/controller-runtime/pull/2749](https://togithub.com/kubernetes-sigs/controller-runtime/pull/2749)
- 🐛 Prevent leader election when shutting down a non-elected manager by
[@k8s-infra-cherrypick-robot](https://togithub.com/k8s-infra-cherrypick-robot)
in
[https://github.com/kubernetes-sigs/controller-runtime/pull/2752](https://togithub.com/kubernetes-sigs/controller-runtime/pull/2752)
- :bug: Runnable group should check if stopped before enqueueing by
[@k8s-infra-cherrypick-robot](https://togithub.com/k8s-infra-cherrypick-robot)
in
[https://github.com/kubernetes-sigs/controller-runtime/pull/2761](https://togithub.com/kubernetes-sigs/controller-runtime/pull/2761)
**Full Changelog**:
https://github.com/kubernetes-sigs/controller-runtime/compare/v0.17.2...v0.17.3
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update All github.com/azure packages (#32229)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/Azure/azure-sdk-for-go/sdk/azcore](https://togithub.com/Azure/azure-sdk-for-go)
| `v1.11.0` -> `v1.11.1` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.11.0/v1.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazcore/v1.11.0/v1.11.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[github.com/Azure/azure-sdk-for-go/sdk/storage/azblob](https://togithub.com/Azure/azure-sdk-for-go)
| `v1.3.1` -> `v1.3.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fstorage%2fazblob/v1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fstorage%2fazblob/v1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fstorage%2fazblob/v1.3.1/v1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fstorage%2fazblob/v1.3.1/v1.3.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/cespare/xxhash/v2 to v2.3.0 (#32245)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/cespare/xxhash/v2](https://togithub.com/cespare/xxhash) |
`v2.2.0` -> `v2.3.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fcespare%2fxxhash%2fv2/v2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fcespare%2fxxhash%2fv2/v2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fcespare%2fxxhash%2fv2/v2.2.0/v2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fcespare%2fxxhash%2fv2/v2.2.0/v2.3.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
cespare/xxhash (github.com/cespare/xxhash/v2)
###
[`v2.3.0`](https://togithub.com/cespare/xxhash/compare/v2.2.0...v2.3.0)
[Compare
Source](https://togithub.com/cespare/xxhash/compare/v2.2.0...v2.3.0)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/SAP/go-hdb to v1.8.12 (#32234)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/SAP/go-hdb](https://togithub.com/SAP/go-hdb) | `v1.8.11`
-> `v1.8.12` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fSAP%2fgo-hdb/v1.8.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fSAP%2fgo-hdb/v1.8.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fSAP%2fgo-hdb/v1.8.11/v1.8.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fSAP%2fgo-hdb/v1.8.11/v1.8.12?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
SAP/go-hdb (github.com/SAP/go-hdb)
###
[`v1.8.12`](https://togithub.com/SAP/go-hdb/blob/HEAD/RELEASENOTES.md#v1812)
[Compare
Source](https://togithub.com/SAP/go-hdb/compare/v1.8.11...v1.8.12)
- updated dependencies
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module github.com/prometheus/common to v0.52.2 (#32250)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [github.com/prometheus/common](https://togithub.com/prometheus/common)
| `v0.51.1` -> `v0.52.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fprometheus%2fcommon/v0.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fprometheus%2fcommon/v0.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fprometheus%2fcommon/v0.51.1/v0.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fprometheus%2fcommon/v0.51.1/v0.52.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
prometheus/common (github.com/prometheus/common)
###
[`v0.52.2`](https://togithub.com/prometheus/common/releases/tag/v0.52.2)
[Compare
Source](https://togithub.com/prometheus/common/compare/v0.51.1...v0.52.2)
#### What's Changed
- Drop support for Go older than 1.18 by
[@SuperQ](https://togithub.com/SuperQ) in
[https://github.com/prometheus/common/pull/612](https://togithub.com/prometheus/common/pull/612)
- fix(protobuf): Correctly decode multi-messages streams by
[@srebhan](https://togithub.com/srebhan) in
[https://github.com/prometheus/common/pull/616](https://togithub.com/prometheus/common/pull/616)
- Bump github.com/aws/aws-sdk-go from 1.50.31 to 1.51.11 in /sigv4 by
[@dependabot](https://togithub.com/dependabot) in
[https://github.com/prometheus/common/pull/615](https://togithub.com/prometheus/common/pull/615)
#### New Contributors
- [@srebhan](https://togithub.com/srebhan) made their first
contribution in
[https://github.com/prometheus/common/pull/616](https://togithub.com/prometheus/common/pull/616)
**Full Changelog**:
https://github.com/prometheus/common/compare/v0.51.1...v0.52.2
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [cmd/opampsupervisor] Handle OpAMP connection settings (#30237)
**Link to tracking Issue:**
Part of #21043; based on top of
https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/29848
to add test
**Testing:**
Added integration test
---------
Co-authored-by: Evan Bradley <11745660+evan-bradley@users.noreply.github.com>
* [podmanreceiver] Add metrics and resource metadata (#30232)
**Description:**
- Adds "metadata.yml" file to autogenerate metrics and resources.
- [Update: not done in this PR] Fixes invalid network metrics: "rx ->
input" and "tx -> output"
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/28640
**Testing:** Previous tests preserved.
**Documentation:**
---------
Co-authored-by: Mackenzie <63265430+mackjmr@users.noreply.github.com>
* Update module github.com/klauspost/compress to v1.17.8 (#32252)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/klauspost/compress](https://togithub.com/klauspost/compress)
| `v1.17.7` -> `v1.17.8` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fklauspost%2fcompress/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fklauspost%2fcompress/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fklauspost%2fcompress/v1.17.7/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fklauspost%2fcompress/v1.17.7/v1.17.8?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
klauspost/compress (github.com/klauspost/compress)
###
[`v1.17.8`](https://togithub.com/klauspost/compress/releases/tag/v1.17.8)
[Compare
Source](https://togithub.com/klauspost/compress/compare/v1.17.7...v1.17.8)
#### What's Changed
- zstd: Reject blocks where reserved values are not 0 by
[@klauspost](https://togithub.com/klauspost) in
[https://github.com/klauspost/compress/pull/885](https://togithub.com/klauspost/compress/pull/885)
- zstd: Add RLE detection+encoding by
[@klauspost](https://togithub.com/klauspost) in
[https://github.com/klauspost/compress/pull/938](https://togithub.com/klauspost/compress/pull/938)
#### New Contributors
- [@ankon](https://togithub.com/ankon) made their first
contribution in
[https://github.com/klauspost/compress/pull/932](https://togithub.com/klauspost/compress/pull/932)
- [@kindhuge](https://togithub.com/kindhuge) made their first
contribution in
[https://github.com/klauspost/compress/pull/946](https://togithub.com/klauspost/compress/pull/946)
**Full Changelog**:
https://github.com/klauspost/compress/compare/v1.17.7...v1.17.8
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [receiver/prometheusreceiver] implement append native histogram (#28663)
**Description:**
Implement native histogram append MVP.
Very similar to appending a float sample.
Limitations:
- Only support integer counter histograms fully.
- In case a histogram has both classic and native buckets, we only store
one of them. Governed by scrape_classic_histograms scrape option. The
reason is that in the OTEL model the metric family is identified by the
normalized name (without _count, _sum, _bucket suffixes for the classic
histograms), meaning that the classic and native histograms would map to
the same metric family in OTEL model , but that cannot have both
Histogram and ExponentialHistogram types at the same time.
- Gauge histograms are dropped with warning as that temporality is
unsupported, see
https://github.com/open-telemetry/opentelemetry-specification/issues/2714
- NoRecordedValue attribute might be unreliable. Prometheus scrape marks
all series with float NaN values when stale, but transactions in
prometheusreceiver are stateless, meaning that we have to use heuristics
to figure out if we need to add a NoRecordedValue data point to an
Exponential Histogram metric. (Need work in Prometheus.)
Additionally:
- Created timestamp supported.
- Float counter histograms not fully tested and lose precision, but we
don't expect instrumentation to expose these anyway.
**Link to tracking Issue:**
Fixes: #26555
**Testing:**
Added unit tests and e2e tests.
**Documentation:**
TBD: will have to call out protobuf negotiation while no text format.
#27030
---------
Signed-off-by: György Krajcsovits
Co-authored-by: David Ashpole
* [chore] [exporter/sumologic] sync internal package with Sumo Logic repository (#31480)
**Description:**
Those files can be added independently of their usage which should make
other PRs smaller
**Link to tracking Issue:** #31479
**Testing:**
Unit tests
**Documentation:** N/A
---------
Signed-off-by: Dominik Rosiek
* [chore][processor/resourcedetection] Fix README's config example (#32270)
The example config for enabling AKS's `k8s.cluster.name` metric was
incorrect. This fixes it to be the correct format.
Resolves https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/32258
* [chore] update core to latest (#32264)
Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com>
* Update module golang.org/x/net to v0.24.0 (#32262)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| golang.org/x/net | `v0.23.0` -> `v0.24.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fnet/v0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/golang.org%2fx%2fnet/v0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/golang.org%2fx%2fnet/v0.23.0/v0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fnet/v0.23.0/v0.24.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module golang.org/x/mod to v0.17.0 (#32257)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| golang.org/x/mod | `v0.16.0` -> `v0.17.0` |
[![age](https://developer.mend.io/api/mc/badges/age/go/golang.org%2fx%2fmod/v0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/golang.org%2fx%2fmod/v0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/golang.org%2fx%2fmod/v0.16.0/v0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/golang.org%2fx%2fmod/v0.16.0/v0.17.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update Wandalen/wretry.action action to v3.2.0 (#32244)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Type | Update | Change |
|---|---|---|---|
| [Wandalen/wretry.action](https://togithub.com/Wandalen/wretry.action)
| action | minor | `v3.0.1` -> `v3.2.0` |
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
Wandalen/wretry.action (Wandalen/wretry.action)
###
[`v3.2.0`](https://togithub.com/Wandalen/wretry.action/compare/v3.1.0...v3.2.0)
[Compare
Source](https://togithub.com/Wandalen/wretry.action/compare/v3.1.0...v3.2.0)
###
[`v3.1.0`](https://togithub.com/Wandalen/wretry.action/compare/v3.0.1...v3.1.0)
[Compare
Source](https://togithub.com/Wandalen/wretry.action/compare/v3.0.1...v3.1.0)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
* [chore] use pdata/testdata instead of coreinternal (#32265)
This will allow us to remove duplicated code in the near future.
---------
Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com>
* Update module github.com/Azure/azure-sdk-for-go/sdk/azidentity to v1.5.2 (#32273)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/Azure/azure-sdk-for-go/sdk/azidentity](https://togithub.com/Azure/azure-sdk-for-go)
| `v1.5.1` -> `v1.5.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazidentity/v1.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazidentity/v1.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazidentity/v1.5.1/v1.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2fAzure%2fazure-sdk-for-go%2fsdk%2fazidentity/v1.5.1/v1.5.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* [receiver/jmx] Fix memory leak on shutdown (#32289)
**Description:**
The receiver was starting a goroutine that would run without being
stopped during shutdown. This changes the goroutine to be stopped during
shutdown.
`goleak` is also added as a part of this change.
**Link to tracking Issue:**
#30438
**Testing:**
All existing tests are passing, as well as added `goleak` check.
* [CI] update codecov action to v4 (#32260)
**Description:** update codecov action to v4
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/32259
* Update module github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common to v1.0.896 (#32290)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common](https://togithub.com/tencentcloud/tencentcloud-sdk-go)
| `v1.0.891` -> `v1.0.896` |
[![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.896?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.896?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.891/v1.0.896?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2ftencentcloud%2ftencentcloud-sdk-go%2ftencentcloud%2fcommon/v1.0.891/v1.0.896?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
tencentcloud/tencentcloud-sdk-go
(github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common)
###
[`v1.0.896`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10896)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.895...v1.0.896)
#### 云联络中心(ccc) 版本:2020-02-10
##### 第 65 次发布
发布时间:2024-04-10 01:09:30
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [UploadIvrAudio](https://cloud.tencent.com/document/api/679/104894)
- 新增出参:SuccessFileList
#### 数据传输服务(dts) 版本:2021-12-06
##### 第 28 次发布
发布时间:2024-04-10 01:14:34
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [ConfigureSyncJob](https://cloud.tencent.com/document/api/571/82107)
- 新增入参:SrcConnectType
修改数据结构:
-
[DBEndpointInfo](https://cloud.tencent.com/document/api/571/82108#DBEndpointInfo)
- 新增成员:ConnectType
#### 数据传输服务(dts) 版本:2018-03-30
#### 云游戏(gs) 版本:2019-11-18
##### 第 21 次发布
发布时间:2024-04-10 01:16:17
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[StartPublishStreamToCSS](https://cloud.tencent.com/document/api/1162/104965)
#### 云数据库 SQL Server(sqlserver) 版本:2018-03-28
##### 第 60 次发布
发布时间:2024-04-10 01:21:30
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DescribeDBInstancesAttribute](https://cloud.tencent.com/document/api/238/90299)
- 新增出参:OldVipList
新增数据结构:
- [OldVip](https://cloud.tencent.com/document/api/238/19976#OldVip)
#### TI-ONE 训练平台(tione) 版本:2021-11-11
##### 第 56 次发布
发布时间:2024-04-10 01:24:24
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [CreateBatchTask](https://cloud.tencent.com/document/api/851/80182)
- 新增入参:StartCmdBase64
- [CreateModelService](https://cloud.tencent.com/document/api/851/82291)
- 新增入参:CommandBase64
- [ModifyModelService](https://cloud.tencent.com/document/api/851/83228)
- 新增入参:CommandBase64
#### TI-ONE 训练平台(tione) 版本:2019-10-22
#### 实时音视频(trtc) 版本:2019-07-22
##### 第 68 次发布
发布时间:2024-04-10 01:25:26
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [StartWebRecord](https://cloud.tencent.com/document/api/647/104541)
- 新增入参:PublishCdnParams
###
[`v1.0.895`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10895)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.894...v1.0.895)
#### 业务风险情报(bri) 版本:2019-03-28
##### 第 5 次发布
发布时间:2024-04-09 01:08:44
本次发布包含了以下内容:
改善已有的文档。
**预下线接口**:
- DescribeBRI
#### 云数据库 MongoDB(mongodb) 版本:2019-07-25
##### 第 38 次发布
发布时间:2024-04-09 01:18:23
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[FlashBackDBInstance](https://cloud.tencent.com/document/api/240/104930)
新增数据结构:
-
[FBKeyValue](https://cloud.tencent.com/document/api/240/38576#FBKeyValue)
-
[FlashbackCollection](https://cloud.tencent.com/document/api/240/38576#FlashbackCollection)
-
[FlashbackDatabase](https://cloud.tencent.com/document/api/240/38576#FlashbackDatabase)
#### 云数据库 MongoDB(mongodb) 版本:2018-04-08
#### SSL 证书(ssl) 版本:2019-12-05
##### 第 55 次发布
发布时间:2024-04-09 01:21:02
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[DeployCertificateInstance](https://cloud.tencent.com/document/api/400/91667)
- 新增入参:IsCache
###
[`v1.0.894`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10894)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.893...v1.0.894)
#### 云联络中心(ccc) 版本:2020-02-10
##### 第 64 次发布
发布时间:2024-04-08 01:09:16
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeIvrAudioList](https://cloud.tencent.com/document/api/679/104895)
- [UploadIvrAudio](https://cloud.tencent.com/document/api/679/104894)
新增数据结构:
-
[AudioFileInfo](https://cloud.tencent.com/document/api/679/47715#AudioFileInfo)
-
[UploadAudioInfo](https://cloud.tencent.com/document/api/679/47715#UploadAudioInfo)
-
[UploadIvrAudioFailedInfo](https://cloud.tencent.com/document/api/679/47715#UploadIvrAudioFailedInfo)
#### 云安全一体化平台(csip) 版本:2022-11-21
##### 第 34 次发布
发布时间:2024-04-08 01:11:35
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[DescribeAssetViewVulRiskList](https://cloud.tencent.com/document/api/664/104896)
新增数据结构:
-
[AssetViewVULRiskData](https://cloud.tencent.com/document/api/664/90825#AssetViewVULRiskData)
#### 云直播CSS(live) 版本:2018-08-01
##### 第 124 次发布
发布时间:2024-04-08 01:18:24
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[RecordParam](https://cloud.tencent.com/document/api/267/20474#RecordParam)
- 新增成员:CosBucketName, CosBucketRegion, CosBucketPath
#### 私有网络(vpc) 版本:2017-03-12
##### 第 187 次发布
发布时间:2024-04-08 01:27:01
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
- [Address](https://cloud.tencent.com/document/api/215/15824#Address)
- 新增成员:BandwidthPackageId
###
[`v1.0.893`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10893)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.892...v1.0.893)
#### 消息队列 RocketMQ 版(trocket) 版本:2023-03-08
##### 第 12 次发布
发布时间:2024-04-04 01:25:24
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [ModifyTopic](https://cloud.tencent.com/document/api/1493/97944)
- 新增入参:MsgTTL
###
[`v1.0.892`](https://togithub.com/tencentcloud/tencentcloud-sdk-go/blob/HEAD/CHANGELOG.md#Release-v10892)
[Compare
Source](https://togithub.com/tencentcloud/tencentcloud-sdk-go/compare/v1.0.891...v1.0.892)
#### 域名注册(domain) 版本:2018-08-08
##### 第 33 次发布
发布时间:2024-04-03 11:17:24
本次发布包含了以下内容:
改善已有的文档。
新增接口:
- [DescribeTldList](https://cloud.tencent.com/document/api/242/104832)
#### 腾讯电子签(基础版)(essbasic) 版本:2021-05-26
##### 第 163 次发布
发布时间:2024-04-03 11:19:08
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[RegistrationOrganizationInfo](https://cloud.tencent.com/document/api/1420/61525#RegistrationOrganizationInfo)
- 新增成员:PowerOfAttorneys
#### 腾讯电子签(基础版)(essbasic) 版本:2020-12-22
#### 云直播CSS(live) 版本:2018-08-01
##### 第 123 次发布
发布时间:2024-04-03 11:22:46
本次发布包含了以下内容:
改善已有的文档。
修改接口:
-
[CreateLiveRecordTemplate](https://cloud.tencent.com/document/api/267/32614)
- 新增入参:CosStore
#### 文字识别(ocr) 版本:2018-11-19
##### 第 133 次发布
发布时间:2024-04-03 11:24:26
本次发布包含了以下内容:
改善已有的文档。
修改数据结构:
-
[DocumentElement](https://cloud.tencent.com/document/api/866/33527#DocumentElement)
- 新增成员:InsetImageName
#### 腾讯健康组学平台(omics) 版本:2022-11-28
##### 第 14 次发布
发布时间:2024-04-03 11:24:43
本次发布包含了以下内容:
改善已有的文档。
修改接口:
- [RunApplication](https://cloud.tencent.com/document/api/1643/89094)
- 新增入参:InputCosUri, AccessMode
- **修改入参**:InputBase64
#### 微瓴同业开放平台(weilingwith) 版本:2023-04-27
##### 第 8 次发布
发布时间:2024-04-03 11:34:07
本次发布包含了以下内容:
改善已有的文档。
新增接口:
-
[BatchDeleteDevice](https://cloud.tencent.com/document/api/1693/104841)
-
[DeleteDeviceGroup](https://cloud.tencent.com/document/api/1693/104840)
-
[DescribeDeviceGroupList](https://cloud.tencent.com/document/api/1693/104839)
-
[ModifyDeviceField](https://cloud.tencent.com/document/api/1693/104838)
-
[ModifyDeviceGroup](https://cloud.tencent.com/document/api/1693/104837)
- [ModifyDeviceTag](https://cloud.tencent.com/document/api/1693/104836)
- [SaveDeviceGroup](https://cloud.tencent.com/document/api/1693/104835)
新增数据结构:
-
[DescribeDeviceGroupListRes](https://cloud.tencent.com/document/api/1693/97961#DescribeDeviceGroupListRes)
-
[DescribeGroupInfo](https://cloud.tencent.com/document/api/1693/97961#DescribeGroupInfo)
-
[ModifyDeviceFieldInfo](https://cloud.tencent.com/document/api/1693/97961#ModifyDeviceFieldInfo)
-
[ModifyDeviceGroupInfo](https://cloud.tencent.com/document/api/1693/97961#ModifyDeviceGroupInfo)
-
[ModifyDeviceTagInfo](https://cloud.tencent.com/document/api/1693/97961#ModifyDeviceTagInfo)
-
[SaveDeviceGroupRes](https://cloud.tencent.com/document/api/1693/97961#SaveDeviceGroupRes)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Update module google.golang.org/grpc to v1.63.2 (#32274)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)
This PR contains the following updates:
| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [google.golang.org/grpc](https://togithub.com/grpc/grpc-go) |
`v1.62.1` -> `v1.63.2` |
[![age](https://developer.mend.io/api/mc/badges/age/go/google.golang.org%2fgrpc/v1.63.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/go/google.golang.org%2fgrpc/v1.63.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/go/google.golang.org%2fgrpc/v1.62.1/v1.63.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/go/google.golang.org%2fgrpc/v1.62.1/v1.63.2?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
---
> [!WARNING]
> Some dependencies could not be looked up. Check the Dependency
Dashboard for more information.
---
### Release Notes
grpc/grpc-go (google.golang.org/grpc)
### [`v1.63.2`](https://togithub.com/grpc/grpc-go/releases/tag/v1.63.2):
Release 1.63.2
[Compare
Source](https://togithub.com/grpc/grpc-go/compare/v1.63.1...v1.63.2)
### Bugs
- Fix the user agent string
### [`v1.63.1`](https://togithub.com/grpc/grpc-go/releases/tag/v1.63.1):
Release 1.63.1
[Compare
Source](https://togithub.com/grpc/grpc-go/compare/v1.63.0...v1.63.1)
- grpc: un-deprecate Dial and DialContext and cherry-pick
### [`v1.63.0`](https://togithub.com/grpc/grpc-go/releases/tag/v1.63.0):
Release 1.63.0
[Compare
Source](https://togithub.com/grpc/grpc-go/compare/v1.62.2...v1.63.0)
### Behavior Changes
- grpc: Return canonical target string from `resolver.Address.String()`
(experimental)
([#6923](https://togithub.com/grpc/grpc-go/issues/6923))
- client & server: when using write buffer pooling, use input value for
buffer size instead of size\*2
([#6983](https://togithub.com/grpc/grpc-go/issues/6983))
- Special Thanks:
[@raghav-stripe](https://togithub.com/raghav-stripe)
### New Features
- grpc: add `ClientConn.CanonicalTarget()` to return the canonical
target string.
([#7006](https://togithub.com/grpc/grpc-go/issues/7006))
- xds: implement LRS named metrics support ([gRFC
A64](https://togithub.com/grpc/proposal/blob/master/A64-lrs-custom-metrics.md))
([#7027](https://togithub.com/grpc/grpc-go/issues/7027))
- Special Thanks:
[@danielzhaotongliu](https://togithub.com/danielzhaotongliu)
- grpc: introduce `grpc.NewClient` to allow users to create new clients
in idle mode and with "dns" as the default resolver
([#7010](https://togithub.com/grpc/grpc-go/issues/7010))
- Special Thanks:
[@bruuuuuuuce](https://togithub.com/bruuuuuuuce)
### API Changes
- grpc: stabilize experimental method `ClientConn.Target()`
([#7006](https://togithub.com/grpc/grpc-go/issues/7006))
### Bug Fixes
- xds: fix an issue that would cause the client to send an empty list of
resources for LDS/CDS upon reconnecting with the management server
([#7026](https://togithub.com/grpc/grpc-go/issues/7026))
- server: Fix some errors returned by a server when using a
`grpc.Server` as an `http.Handler` with the Go stdlib HTTP server
([#6989](https://togithub.com/grpc/grpc-go/issues/6989))
- resolver/dns: add `SetResolvingTimeout` to allow configuring the DNS
resolver's global timeout
([#6917](https://togithub.com/grpc/grpc-go/issues/6917))
- Special Thanks: [@and1truong](https://togithub.com/and1truong)
- Set the security level of Windows named pipes to NoSecurity
([#6956](https://togithub.com/grpc/grpc-go/issues/6956))
- Special Thanks: [@irsl](https://togithub.com/irsl)
### [`v1.62.2`](https://togithub.com/grpc/grpc-go/releases/tag/v1.62.2):
Release 1.62.2
[Compare
Source](https://togithub.com/grpc/grpc-go/compare/v1.62.1...v1.62.2)
### Dependencies
- Update http2 library to address vulnerability
[CVE-2023-45288](https://www.kb.cert.org/vuls/id/421644)
---
### Configuration
📅 **Schedule**: Branch creation - "on tuesday" (UTC), Automerge - At any
time (no schedule defined).
🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.
♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.
🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.
---
- [ ] If you want to rebase/retry this PR, check
this box
---
This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/open-telemetry/opentelemetry-collector-contrib).
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
* Allow customers to set custom resource attributes as container Tags (#32224)
Currently users of DDconnector can only set fixed set of resource
attributes as container Tags , list is defined
[here](https://github.com/DataDog/opentelemetry-mapping-go/blob/ba4072f84888749a00f5748cca9f2a7fc2e42fc9/pkg/otlp/attributes/attributes.go#L41)
. This PR enables the customers to choose any resource attribute to be
set as container Tag on the APM Trace metrics payload.
---------
Co-authored-by: Pablo Baeyens
* Change the way that X-Ray exporter annotation converter work (#31732)
Description:
In the past, X-Ray doesn’t support “.”. So we have a translator in x-ray
export to translates it to “_” before sending traces to X-Ray Service.
To match otel naming style, x-ray service team decide to change their
service to support both "." type and "" type of naming. In this case the
translator that translate "." to "" is no-longer needed. This PR change
the way this translator work
X-Ray PMs agree on rolling out this change by using feature-gate
Testing:
Unit test
* [extension/awsproxy] add support for shutdown test (#31756)
**Description:**
Change the lifecycle of the extension so that the creation of the AWS
client happens in the Start method, which helps with supporting
component lifecycle.
**Link to tracking Issue:**
Relates to #27849
* [processor/deltatocumulative]: observe accumulation metrics (#31363)
**Description:**
Uses the otel meter to observe some key metrics about the accumulation:
| Name | Description |
|------------------------------------------|---------------------------------------------------------------------------------------|
| `streams_count` | Number of streams currently tracked by the
aggregation state |
| `datapoints_processed` | Total number of datapoints processed, whether
successful or not |
| `datapoints_dropped` | Faulty datapoints that were dropped due to the
reason given in the `reason` attribute |
| `seconds_lost` | Total length of all gaps in the streams, which occur
e.g. due to lost in transit |
**Link to tracking Issue:**
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30705
**Testing:** None
**Documentation:** Readme updated
* [exporter/elasticsearch] handle ecs mode mapping (#31553)
Description:
Initial pass in implementing the ecs mapping mode that is documented but
not implemented. This only covers a small subset of attribute mappings
from otel > ecs, but the core record fields should be properly mapped.
Link to tracking Issue:
Testing:
Added test for ecs mapping mode.
Documentation:
Updated the documentation to reflect the default behavior is the current
behavior with no mapping applied.
Reopening #30454
---------
Co-authored-by: Andrey Kaipov
Co-authored-by: Andrzej Stencel
* [chore][CI/CD] Upgrade golang 1.22 version for unittest-matrix (#32288)
Version 1.22.0 of golang only has a darwin OS build of arm architecture
available from `actions/setup-go` and `actions/go-versions`, so
hopefully upgrading to use 1.22.2 will help tests pass.
Fixes https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/32286
**Testing:**
None yet, but hopefully from this CI/CD run of
`build-and-test/unittest-matrix` we can confirm if the updated go
version resolves this issue for arm testing.
Run shows `1.22.2` got picked up successfully:
```
Setup go version spec 1.22.2
...
Attempting to download 1.22.2...
...
matching 1.22.2...
Acquiring 1.22.2 from https://github.com/actions/go-versions/releases/download/1.22.2-8[54](https://github.com/open-telemetry/opentelemetry-collector-contrib/actions/runs/8622703577/job/23634936527?pr=32288#step:6:55)8848001/go-1.22.2-linux-arm64.tar.gz
...
Extracting Go...
```
* [chore] Remove usage of go.opentelemetry.io/otel/attribute.Sortable (#32303)
It's deprecated in the latest OTel go library and gives linter failures
as reported in
https://github.com/open-telemetry/opentelemetry-collector-contrib/actions/runs/8636462987/job/23676618353?pr=32301#step:8:766
* [chore][cmd/telemetrygen] Fix deprecated method usage (#32300)
`grpc.DialContext` has been deprecated in favor of `grpc.NewClient`. The
only difference relevant to our usage is that the context is no longer
passed in. I investigated, and the context being cancelled and exiting
the running sub-goroutine is [handled
internally](https://github.com/grpc/grpc-go/blob/d32e66ce27447a0a217464a36fdd3935801c0453/clientconn.go#L135)
in an equivalent way to how we were using `grpc.DialContext`, so there
shouldn't be any impact here.
Resolves #32297
* [pkg/stanza] Fix tests on Windows (#32305)
Fix tests failing in
https://github.com/open-telemetry/opentelemetry-collector-contrib/actions/runs/8637187949/job/23678820573
Resolves
https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/32299
* [chore] Update core dependency (#32301)
0.98.0 release preparation
---------
Signed-off-by: Dmitrii Anoshin
* [chore] Prepare release 0.98.0 (#32310)
The following commands were run to prepare this release:
- make chlog-update VERSION=v0.98.0
- sed -i.bak s/0.97.0/0.98.0/g versions.yaml
- make multimod-prerelease
- make multimod-sync
* Fix Compile Issues
Fix Compile Export Test
Only Need To Unit Test 1.22.2
Add workflow_dispatch To build-and-test.yml
Add isWindowsHostProcessContainer To Kubelet To Fix Unit Test:
Add isWindowsHostProcessContainer To Clientset To Fix Unit Test
Fix Prometheus Integ Test:
Fix awscloudwatchlogsexporter Unit Test
Fix resourcetotelemetry Unit Tests
Fix translator Unit Tests
Fix gpu unit tests
Add Scrape Protocalls To TestSimplePrometheusEndToEnd
Fix awsmiddleware Unit Tests
Make FMT
Add IsWindowsHostProcessContainer Back
---------
Signed-off-by: Dominik Rosiek
Signed-off-by: Israel Blancas
Signed-off-by: Jared Tan
Signed-off-by: Bogdan Drutu
Signed-off-by: Robbie Lankford
Signed-off-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
Signed-off-by: Dan Jaglowski
Signed-off-by: Andreas Gerstmayr
Signed-off-by: ChrsMark
Signed-off-by: Arve Knudsen
Signed-off-by: sinkingpoint
Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com>
Signed-off-by: György Krajcsovits
Signed-off-by: Dmitrii Anoshin
Co-authored-by: Tyler Helmuth <12352919+TylerHelmuth@users.noreply.github.com>
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: opentelemetrybot <107717825+opentelemetrybot@users.noreply.github.com>
Co-authored-by: Mackenzie <63265430+mackjmr@users.noreply.github.com>
Co-authored-by: Antoine Toulme
Co-authored-by: Antoine Toulme
Co-authored-by: Yang Song
Co-authored-by: Dinesh Gurumurthy
Co-authored-by: Dominik Rosiek <58699848+sumo-drosiek@users.noreply.github.com>
Co-authored-by: Andrzej Stencel
Co-authored-by: Evan Bradley <11745660+evan-bradley@users.noreply.github.com>
Co-authored-by: Israel Blancas
Co-authored-by: Adam Boguszewski
Co-authored-by: zpzhuSplunk <127359723+zpzhuSplunk@users.noreply.github.com>
Co-authored-by: Spencer Torres
Co-authored-by: James Hughes (Splunk)
Co-authored-by: Jared Tan
Co-authored-by: Rohit Gorana
Co-authored-by: Pablo Baeyens
Co-authored-by: Bogdan Drutu
Co-authored-by: Curtis Robert
Co-authored-by: Robert Lankford
Co-authored-by: Juraci Paixão Kröhling
Co-authored-by: Janik K <10290002+led0nk@users.noreply.github.com>
Co-authored-by: David Ashpole
Co-authored-by: Adam Charrett <73886859+adcharre@users.noreply.github.com>
Co-authored-by: Daniel Jaglowski
Co-authored-by: Kevin Huff
Co-authored-by: Dmitrii Anoshin
Co-authored-by: paebersold-tyro
Co-authored-by: Sam Wright
Co-authored-by: Mike Dame
Co-authored-by: Steven Swartz
Co-authored-by: Andreas Gerstmayr
Co-authored-by: Povilas Versockas
Co-authored-by: Braydon Kains <93549768+braydonk@users.noreply.github.com>
Co-authored-by: Marc Tudurí
Co-authored-by: Conner <6269516+ElRojo@users.noreply.github.com>
Co-authored-by: Chris Mark
Co-authored-by: Thomas Prelle <59021490+tprelle@users.noreply.github.com>
Co-authored-by: Arve Knudsen
Co-authored-by: Murphy Chen
Co-authored-by: Stanley Liu
Co-authored-by: Jek Bao CHOO
Co-authored-by: Thomas Hamm
Co-authored-by: Colin Douch
Co-authored-by: Michal Pristas
Co-authored-by: Somesh Koli
Co-authored-by: Jacob Aronoff
Co-authored-by: leorinat <165731848+leorinat@users.noreply.github.com>
Co-authored-by: Sean Marciniak <30928402+MovieStoreGuy@users.noreply.github.com>
Co-authored-by: Kevin N <6809505+kevinnoel-be@users.noreply.github.com>
Co-authored-by: Irina
Co-authored-by: VihasMakwana <121151420+VihasMakwana@users.noreply.github.com>
Co-authored-by: Katarzyna Kujawa <73836361+kkujawa-sumo@users.noreply.github.com>
Co-authored-by: Shaunak Kashyap
Co-authored-by: Alex Boten <223565+codeboten@users.noreply.github.com>
Co-authored-by: shalper2 <99686388+shalper2@users.noreply.github.com>
Co-authored-by: Medik
Co-authored-by: Sergey Lanzman
Co-authored-by: Tiffany Hrabusa <30397949+tiffany76@users.noreply.github.com>
Co-authored-by: Joshua MacDonald
Co-authored-by: Srikanth Chekuri
Co-authored-by: Roger Coll
Co-authored-by: George Krajcsovits
Co-authored-by: Pablo Baeyens
Co-authored-by: XinRan Zhang
Co-authored-by: sh0rez
Co-authored-by: j-kap-t <116100821+j-kap-t@users.noreply.github.com>
Co-authored-by: Andrey Kaipov
---
...-standard-exporterhelper-queuesettings.yml | 27 -
.github/ALLOWLIST | 3 +-
.github/CODEOWNERS | 471 +-
.github/ISSUE_TEMPLATE/bug_report.yaml | 29 +-
.github/ISSUE_TEMPLATE/feature_request.yaml | 29 +-
.github/ISSUE_TEMPLATE/other.yaml | 29 +-
.github/auto_assign.yml | 4 +-
.github/dependabot.yml | 1104 -
.github/workflows/auto-assign-owners.yml | 0
.github/workflows/build-and-test-windows.yml | 19 +-
.github/workflows/build-and-test.yml | 235 +-
.github/workflows/changelog.yml | 6 +-
.github/workflows/close-stale.yaml | 2 +-
.github/workflows/codeql-analysis.yml | 9 +-
.github/workflows/create-dependabot-pr.yml | 20 -
.github/workflows/e2e-tests.yml | 130 +-
.github/workflows/generate-weekly-report.yml | 1 +
.github/workflows/load-tests.yml | 32 +-
.github/workflows/ping-codeowners-issues.yml | 1 -
.github/workflows/prepare-release.yml | 4 +-
.../workflows/prometheus-compliance-tests.yml | 7 +-
.../scripts/add-component-options.sh | 51 -
.github/workflows/scripts/check-codeowners.sh | 2 +-
.../scripts/check-collector-module-version.sh | 20 +-
.github/workflows/scripts/dependabot-pr.sh | 50 -
.github/workflows/scripts/get-codeowners.sh | 32 +-
.../scripts/ping-codeowners-issues.sh | 9 +-
.../scripts/release-prepare-release.sh | 5 +
.github/workflows/telemetrygen.yml | 90 +-
.github/workflows/tidy-dependencies.yml | 24 +-
.golangci.yml | 3 +
CHANGELOG-API.md | 126 +
CHANGELOG.md | 718 +
CONTRIBUTING.md | 62 +-
Makefile | 141 +-
Makefile.Common | 102 +-
NOTICE | 27 +
README.md | 19 +-
cmd/checkapi/main.go | 14 +-
cmd/configschema/README.md | 3 +
.../cfgmetadatagen/cfgmetadatagen/README.md | 3 +
.../cfgmetadatagen/cfgmetadatagen/cli.go | 6 +-
.../cfgmetadatagen/metadata_writer_test.go | 3 +-
.../cfgmetadatagen/package_test.go | 14 +
cmd/configschema/cfgmetadatagen/main.go | 3 +
cmd/configschema/comments.go | 4 +-
cmd/configschema/comments_test.go | 6 +-
cmd/configschema/common_test.go | 18 +-
cmd/configschema/configs.go | 15 +-
cmd/configschema/configs_test.go | 4 -
cmd/configschema/docsgen/README.md | 3 +
cmd/configschema/docsgen/docsgen/cli.go | 6 +-
cmd/configschema/docsgen/docsgen/cli_test.go | 11 +-
.../docsgen/docsgen/package_test.go | 31 +
cmd/configschema/docsgen/docsgen/template.go | 4 +-
.../docsgen/docsgen/template_test.go | 4 -
.../docsgen/testdata/otlp-receiver.json | 8 +-
cmd/configschema/docsgen/main.go | 2 +
cmd/configschema/fields_test.go | 4 -
cmd/configschema/go.mod | 1007 +-
cmd/configschema/go.sum | 1307 +-
cmd/configschema/metadata.yaml | 3 +-
cmd/configschema/package_test.go | 31 +
cmd/configschema/resolver_test.go | 8 +-
cmd/githubgen/allowlist.txt | 24 +-
cmd/githubgen/codeowners.go | 226 +
cmd/githubgen/distributions.go | 63 +
cmd/githubgen/go.mod | 23 +-
cmd/githubgen/go.sum | 77 +-
cmd/githubgen/issuetemplates.go | 70 +
cmd/githubgen/main.go | 359 +-
cmd/mdatagen/README.md | 56 -
cmd/mdatagen/doc.go | 7 -
cmd/mdatagen/documentation.md | 96 -
cmd/mdatagen/embeded_templates.go | 13 -
cmd/mdatagen/embeded_templates_test.go | 46 -
cmd/mdatagen/go.mod | 51 -
.../internal/metadata/generated_config.go | 122 -
.../metadata/generated_config_test.go | 144 -
.../internal/metadata/generated_metrics.go | 425 -
.../metadata/generated_metrics_test.go | 214 -
.../internal/metadata/generated_resource.go | 92 -
.../metadata/generated_resource_test.go | 82 -
.../internal/metadata/generated_status.go | 14 -
.../internal/metadata/testdata/config.yaml | 55 -
cmd/mdatagen/lint.go | 63 -
cmd/mdatagen/lint_test.go | 50 -
cmd/mdatagen/loader.go | 294 -
cmd/mdatagen/loader_test.go | 281 -
cmd/mdatagen/main.go | 236 -
cmd/mdatagen/main_test.go | 379 -
cmd/mdatagen/metadata-sample.yaml | 136 -
cmd/mdatagen/metadata-schema.yaml | 106 -
cmd/mdatagen/metadata.yaml | 6 -
cmd/mdatagen/metricdata.go | 182 -
cmd/mdatagen/metricdata_test.go | 26 -
cmd/mdatagen/statusdata.go | 59 -
cmd/mdatagen/statusdata_test.go | 59 -
cmd/mdatagen/templates/config.go.tmpl | 103 -
cmd/mdatagen/templates/config_test.go.tmpl | 131 -
cmd/mdatagen/templates/documentation.md.tmpl | 98 -
cmd/mdatagen/templates/metrics.go.tmpl | 319 -
cmd/mdatagen/templates/metrics_test.go.tmpl | 174 -
cmd/mdatagen/templates/readme.md.tmpl | 55 -
cmd/mdatagen/templates/resource.go.tmpl | 51 -
cmd/mdatagen/templates/resource_test.go.tmpl | 65 -
cmd/mdatagen/templates/status.go.tmpl | 18 -
.../templates/testdata/config.yaml.tmpl | 31 -
cmd/mdatagen/testdata/invalid.yaml | 1 -
.../testdata/invalid_aggregation.yaml | 22 -
cmd/mdatagen/testdata/invalid_class.yaml | 8 -
cmd/mdatagen/testdata/invalid_input_type.yaml | 20 -
cmd/mdatagen/testdata/invalid_stability.yaml | 7 -
.../testdata/invalid_stability_component.yaml | 7 -
cmd/mdatagen/testdata/invalid_type_attr.yaml | 24 -
cmd/mdatagen/testdata/invalid_type_rattr.yaml | 19 -
cmd/mdatagen/testdata/metrics_and_type.yaml | 19 -
cmd/mdatagen/testdata/no_aggregation.yaml | 22 -
cmd/mdatagen/testdata/no_class.yaml | 7 -
.../testdata/no_description_attr.yaml | 33 -
.../testdata/no_description_rattr.yaml | 12 -
cmd/mdatagen/testdata/no_enabled.yaml | 18 -
.../testdata/no_metric_description.yaml | 22 -
cmd/mdatagen/testdata/no_metric_type.yaml | 13 -
cmd/mdatagen/testdata/no_metric_unit.yaml | 22 -
cmd/mdatagen/testdata/no_monotonic.yaml | 22 -
cmd/mdatagen/testdata/no_stability.yaml | 4 -
.../testdata/no_stability_component.yaml | 6 -
cmd/mdatagen/testdata/no_status.yaml | 1 -
cmd/mdatagen/testdata/no_type.yaml | 6 -
cmd/mdatagen/testdata/no_type_attr.yaml | 23 -
cmd/mdatagen/testdata/no_type_rattr.yaml | 18 -
cmd/mdatagen/testdata/no_value_type.yaml | 22 -
cmd/mdatagen/testdata/parent.yaml | 3 -
.../testdata/readme_with_cmd_class.md | 14 -
.../testdata/readme_with_multiple_signals.md | 15 -
cmd/mdatagen/testdata/readme_with_status.md | 14 -
.../testdata/readme_with_status_codeowners.md | 15 -
...dme_with_status_codeowners_and_emeritus.md | 16 -
.../testdata/readme_with_status_extension.md | 14 -
cmd/mdatagen/testdata/readme_with_warnings.md | 16 -
.../testdata/readme_without_status.md | 3 -
.../testdata/resource_attributes_only.yaml | 17 -
cmd/mdatagen/testdata/status_only.yaml | 6 -
cmd/mdatagen/testdata/two_metric_types.yaml | 21 -
.../testdata/unknown_metric_attribute.yaml | 19 -
cmd/mdatagen/testdata/unknown_value_type.yaml | 18 -
cmd/mdatagen/testdata/unused_attribute.yaml | 29 -
cmd/mdatagen/third_party/golint/LICENSE | 27 -
cmd/mdatagen/third_party/golint/golint.go | 51 -
cmd/mdatagen/validate.go | 193 -
cmd/mdatagen/validate_test.go | 153 -
cmd/opampsupervisor/Makefile | 4 +
cmd/opampsupervisor/README.md | 2 +-
cmd/opampsupervisor/e2e_test.go | 520 +
.../supervisor_darwin.yaml | 2 +-
.../supervisor_linux.yaml | 2 +-
.../supervisor_windows.yaml | 2 +-
cmd/opampsupervisor/go.mod | 34 +-
cmd/opampsupervisor/go.sum | 79 +-
cmd/opampsupervisor/specification/README.md | 22 +-
.../supervisor/commander/commander.go | 9 +-
.../supervisor/config/config.go | 16 +-
cmd/opampsupervisor/supervisor/logger.go | 33 +
.../supervisor/package_test.go | 14 +
cmd/opampsupervisor/supervisor/server.go | 46 +
cmd/opampsupervisor/supervisor/supervisor.go | 442 +-
.../supervisor/supervisor_test.go | 60 +
.../supervisor/templates/bootstrap.yaml | 24 +
.../supervisor/templates/extraconfig.yaml | 16 +
.../supervisor/templates/owntelemetry.yaml | 21 +
.../testdata/collector/bad_config.yaml | 11 +
.../testdata/collector/effective_config.yaml | 11 +
.../testdata/collector/simple_pipeline.yaml | 14 +
.../supervisor/supervisor_accepts_conn.yaml | 15 +
.../testdata/supervisor/supervisor_basic.yaml | 14 +
.../testdata/supervisor/supervisor_nocap.yaml | 14 +
.../testdata/supervisor/supervisor_test.yaml | 14 +
cmd/otelcontribcol/Makefile | 3 +
cmd/otelcontribcol/builder-config.yaml | 420 +-
cmd/otelcontribcol/components.go | 54 +-
.../distribution_metadata_test.go | 44 +-
cmd/otelcontribcol/exporters_test.go | 182 +-
cmd/otelcontribcol/extensions_test.go | 68 +-
cmd/otelcontribcol/go.mod | 1062 +-
cmd/otelcontribcol/go.sum | 1329 +-
cmd/otelcontribcol/main.go | 2 +-
cmd/otelcontribcol/main_others.go | 1 -
cmd/otelcontribcol/main_windows.go | 39 +-
cmd/otelcontribcol/processors_test.go | 290 -
cmd/otelcontribcol/receivers_test.go | 147 +-
cmd/oteltestbedcol/Makefile | 3 +
cmd/oteltestbedcol/builder-config.yaml | 75 +-
cmd/oteltestbedcol/components.go | 4 +-
cmd/oteltestbedcol/go.mod | 387 +-
cmd/oteltestbedcol/go.sum | 772 +-
cmd/oteltestbedcol/main.go | 2 +-
cmd/oteltestbedcol/main_others.go | 1 -
cmd/oteltestbedcol/main_windows.go | 39 +-
cmd/oteltestbedcol/package_test.go | 14 +
cmd/telemetrygen/Dockerfile | 12 +-
cmd/telemetrygen/README.md | 18 +-
cmd/telemetrygen/config.go | 6 +-
cmd/telemetrygen/go.mod | 65 +-
cmd/telemetrygen/go.sum | 137 +-
cmd/telemetrygen/internal/common/config.go | 37 +-
.../internal/common/package_test.go | 14 +
cmd/telemetrygen/internal/common/tls_utils.go | 89 +
cmd/telemetrygen/internal/e2etest/go.mod | 105 +-
cmd/telemetrygen/internal/e2etest/go.sum | 267 +-
cmd/telemetrygen/internal/logs/config.go | 8 +-
cmd/telemetrygen/internal/logs/exporter.go | 42 +-
cmd/telemetrygen/internal/logs/logs.go | 52 +-
.../internal/logs/package_test.go | 14 +
cmd/telemetrygen/internal/logs/worker.go | 26 +-
cmd/telemetrygen/internal/logs/worker_test.go | 23 +-
cmd/telemetrygen/internal/metrics/exporter.go | 28 +-
cmd/telemetrygen/internal/metrics/metrics.go | 22 +-
.../internal/metrics/package_test.go | 14 +
cmd/telemetrygen/internal/traces/config.go | 7 +
cmd/telemetrygen/internal/traces/exporter.go | 28 +-
.../internal/traces/package_test.go | 14 +
cmd/telemetrygen/internal/traces/traces.go | 32 +-
cmd/telemetrygen/internal/traces/worker.go | 47 +-
.../internal/traces/worker_test.go | 57 +
cmd/telemetrygen/package_test.go | 14 +
confmap/provider/s3provider/go.mod | 48 +-
confmap/provider/s3provider/go.sum | 114 +-
confmap/provider/s3provider/package_test.go | 14 +
confmap/provider/s3provider/provider_test.go | 3 +-
.../provider/secretsmanagerprovider}/Makefile | 0
.../provider/secretsmanagerprovider/README.md | 11 +
.../provider/secretsmanagerprovider/go.mod | 29 +
.../provider/secretsmanagerprovider/go.sum | 412 +
.../secretsmanagerprovider/metadata.yaml | 3 +
.../secretsmanagerprovider/provider.go | 60 +
.../secretsmanagerprovider/provider_test.go | 76 +
connector/countconnector/README.md | 3 +-
connector/countconnector/config.go | 2 +-
connector/countconnector/config_test.go | 10 +-
.../generated_component_test.go | 75 +
connector/countconnector/go.mod | 75 +-
connector/countconnector/go.sum | 134 +-
.../internal/metadata/generated_status.go | 15 +-
connector/countconnector/metadata.yaml | 6 +-
connector/countconnector/package_test.go | 14 +
connector/datadogconnector/README.md | 81 +-
connector/datadogconnector/config.go | 98 +
connector/datadogconnector/config_test.go | 84 +
connector/datadogconnector/connector.go | 188 +-
connector/datadogconnector/connector_test.go | 209 +-
connector/datadogconnector/example_test.go | 66 +
.../datadogconnector/examples/config.yaml | 93 +
connector/datadogconnector/factory.go | 25 +-
connector/datadogconnector/factory_test.go | 27 +
.../generated_component_test.go | 68 +
connector/datadogconnector/go.mod | 273 +-
connector/datadogconnector/go.sum | 980 +-
.../internal/metadata/generated_status.go | 15 +-
connector/datadogconnector/metadata.yaml | 6 +-
.../datadogconnector/traces_connector.go | 47 +
connector/exceptionsconnector/README.md | 10 +-
.../exceptionsconnector/connector_logs.go | 21 +-
connector/exceptionsconnector/factory_test.go | 4 +-
.../generated_component_test.go | 68 +
connector/exceptionsconnector/go.mod | 67 +-
connector/exceptionsconnector/go.sum | 127 +-
.../internal/metadata/generated_status.go | 19 +-
connector/exceptionsconnector/metadata.yaml | 8 +-
connector/exceptionsconnector/package_test.go | 14 +
.../exceptionsconnector/testdata/logs.yml | 60 +
.../failoverconnector}/Makefile | 0
connector/failoverconnector/README.md | 98 +
connector/failoverconnector/config.go | 48 +
connector/failoverconnector/config_test.go | 115 +
connector/failoverconnector/doc.go | 6 +
connector/failoverconnector/factory.go | 60 +
connector/failoverconnector/factory_test.go | 44 +
connector/failoverconnector/failover.go | 88 +
connector/failoverconnector/failover_test.go | 205 +
connector/failoverconnector/go.mod | 55 +
connector/failoverconnector/go.sum | 146 +
.../internal/metadata/generated_status.go | 27 +
.../internal/state/pipeline_selector.go | 251 +
.../internal/state/pipeline_selector_test.go | 89 +
.../failoverconnector/internal/state/utils.go | 51 +
connector/failoverconnector/logs.go | 83 +
connector/failoverconnector/logs_test.go | 149 +
connector/failoverconnector/metadata.yaml | 14 +
connector/failoverconnector/metrics.go | 83 +
connector/failoverconnector/metrics_test.go | 151 +
connector/failoverconnector/package_test.go | 14 +
.../failoverconnector/testdata/config.yaml | 22 +
connector/failoverconnector/traces.go | 84 +
connector/failoverconnector/traces_test.go | 153 +
.../grafanacloudconnector}/Makefile | 0
connector/grafanacloudconnector/README.md | 38 +
connector/grafanacloudconnector/config.go | 34 +
.../grafanacloudconnector/config_test.go | 88 +
connector/grafanacloudconnector/connector.go | 163 +
.../grafanacloudconnector/connector_test.go | 110 +
connector/grafanacloudconnector/doc.go | 6 +
connector/grafanacloudconnector/factory.go | 39 +
.../grafanacloudconnector/factory_test.go | 24 +
.../generated_component_test.go | 61 +
connector/grafanacloudconnector/go.mod | 58 +
connector/grafanacloudconnector/go.sum | 148 +
.../grafanacloudconnector/host_metrics.go | 78 +
.../host_metrics_test.go | 65 +
.../internal/metadata/generated_status.go | 25 +
connector/grafanacloudconnector/metadata.yaml | 15 +
.../grafanacloudconnector/package_test.go | 14 +
.../testdata/config.yaml | 10 +
connector/routingconnector/README.md | 14 +-
connector/routingconnector/config.go | 6 +-
connector/routingconnector/factory_test.go | 9 +-
connector/routingconnector/go.mod | 64 +-
connector/routingconnector/go.sum | 128 +-
.../internal/metadata/generated_status.go | 15 +-
connector/routingconnector/logs.go | 7 +-
connector/routingconnector/logs_test.go | 189 +-
connector/routingconnector/metadata.yaml | 5 +
connector/routingconnector/metrics.go | 7 +-
connector/routingconnector/metrics_test.go | 204 +-
connector/routingconnector/package_test.go | 14 +
connector/routingconnector/router.go | 16 +-
connector/routingconnector/traces.go | 7 +-
connector/routingconnector/traces_test.go | 166 +-
connector/servicegraphconnector/README.md | 33 +-
.../servicegraphconnector}/config.go | 6 +-
.../servicegraphconnector/config_test.go | 46 +
.../servicegraphconnector/connector.go | 150 +-
.../servicegraphconnector/connector_test.go | 479 +
connector/servicegraphconnector/factory.go | 67 +-
.../servicegraphconnector/factory_test.go | 54 +-
.../generated_component_test.go | 61 +
connector/servicegraphconnector/go.mod | 104 +-
connector/servicegraphconnector/go.sum | 267 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/store/edge.go | 2 +-
.../internal/store/package_test.go | 14 +
.../internal/store/store.go | 2 +-
.../internal/store/store_test.go | 2 +-
connector/servicegraphconnector/metadata.yaml | 6 +-
.../servicegraphconnector/package_test.go | 14 +
.../service-graph-connector-config.yaml | 1 +
.../servicegraphconnector}/util.go | 2 +-
connector/spanmetricsconnector/README.md | 32 +-
connector/spanmetricsconnector/config.go | 29 +-
connector/spanmetricsconnector/config_test.go | 50 +-
connector/spanmetricsconnector/connector.go | 124 +-
.../spanmetricsconnector/connector_test.go | 387 +-
connector/spanmetricsconnector/factory.go | 9 +-
.../spanmetricsconnector/factory_test.go | 2 +-
.../generated_component_test.go | 61 +
connector/spanmetricsconnector/go.mod | 63 +-
connector/spanmetricsconnector/go.sum | 127 +-
.../internal/cache/cache.go | 19 +
.../internal/cache/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/metrics/metrics.go | 76 +-
.../internal/metrics/metrics_test.go | 184 +
.../internal/metrics/package_test.go | 14 +
connector/spanmetricsconnector/metadata.yaml | 10 +-
.../spanmetricsconnector/package_test.go | 14 +
.../spanmetricsconnector/testdata/config.yaml | 19 +-
distributions.yaml | 8 +
docs/testing.md | 14 +
examples/couchbase/docker-compose.yaml | 4 +-
examples/demo/client/Dockerfile | 4 +-
examples/demo/client/go.mod | 39 +-
examples/demo/client/go.sum | 88 +-
examples/demo/docker-compose.yaml | 2 +
examples/demo/server/Dockerfile | 4 +-
examples/demo/server/go.mod | 39 +-
examples/demo/server/go.sum | 88 +-
.../fault-tolerant-logs-collection/README.md | 9 +
.../otel-col-config.yaml | 24 +
examples/logline-filtering/README.md | 13 +
.../otel-col-config-filter-in-logs.yaml | 17 +
.../otel-col-config-filter-out-logs.yaml | 17 +
examples/secure-tracing/README.md | 117 +
examples/secure-tracing/certs/Makefile | 39 +
examples/secure-tracing/certs/ca.ext | 11 +
examples/secure-tracing/certs/envoy.ext | 22 +
.../secure-tracing/certs/otel-collector.ext | 23 +
.../secure-tracing/certs/tracing-client.ext | 20 +
examples/secure-tracing/docker-compose.yaml | 26 +
examples/secure-tracing/envoy-config.yaml | 70 +
.../secure-tracing/otel-collector-config.yaml | 23 +
exporter/alertmanagerexporter/README.md | 16 +-
.../alertmanager_exporter.go | 173 +-
.../alertmanager_exporter_test.go | 421 +
exporter/alertmanagerexporter/config.go | 20 +-
exporter/alertmanagerexporter/config_test.go | 52 +-
exporter/alertmanagerexporter/factory.go | 12 +-
.../generated_component_test.go | 126 +
exporter/alertmanagerexporter/go.mod | 85 +-
exporter/alertmanagerexporter/go.sum | 253 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/alertmanagerexporter/metadata.yaml | 16 +-
exporter/alertmanagerexporter/package_test.go | 14 +
.../testdata/test_cert.pem | 29 +
.../alibabacloudlogserviceexporter/README.md | 3 +-
.../generated_component_test.go | 142 +
.../alibabacloudlogserviceexporter/go.mod | 71 +-
.../alibabacloudlogserviceexporter/go.sum | 160 +-
.../internal/metadata/generated_status.go | 15 +-
.../metadata.yaml | 9 +-
.../metrics_exporter_test.go | 5 +-
.../uploader.go | 6 +-
exporter/awscloudwatchlogsexporter/README.md | 3 +-
exporter/awscloudwatchlogsexporter/config.go | 3 +-
.../awscloudwatchlogsexporter/config_test.go | 29 +-
.../awscloudwatchlogsexporter/exporter.go | 42 +-
.../exporter_test.go | 58 +-
exporter/awscloudwatchlogsexporter/factory.go | 3 +-
.../awscloudwatchlogsexporter/factory_test.go | 3 +-
.../generated_component_test.go | 126 +
exporter/awscloudwatchlogsexporter/go.mod | 74 +-
exporter/awscloudwatchlogsexporter/go.sum | 234 +-
.../internal/metadata/generated_status.go | 15 +-
.../awscloudwatchlogsexporter/metadata.yaml | 13 +-
.../awscloudwatchlogsexporter/package_test.go | 17 +
exporter/awsemfexporter/README.md | 6 +-
exporter/awsemfexporter/datapoint.go | 37 +-
exporter/awsemfexporter/datapoint_test.go | 524 +-
exporter/awsemfexporter/emf_exporter.go | 2 +-
exporter/awsemfexporter/emf_exporter_test.go | 69 +-
exporter/awsemfexporter/factory_test.go | 4 +-
.../generated_component_test.go | 126 +
exporter/awsemfexporter/go.mod | 87 +-
exporter/awsemfexporter/go.sum | 252 +-
exporter/awsemfexporter/grouped_metric.go | 18 +-
.../awsemfexporter/grouped_metric_test.go | 47 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/awsemfexporter/metadata.yaml | 10 +-
.../awsemfexporter/metric_declaration_test.go | 38 +-
exporter/awsemfexporter/metric_translator.go | 2 +-
.../awsemfexporter/metric_translator_test.go | 18 +-
exporter/awskinesisexporter/README.md | 3 +-
exporter/awskinesisexporter/config.go | 3 +-
exporter/awskinesisexporter/config_test.go | 5 +-
exporter/awskinesisexporter/factory.go | 9 +-
.../generated_component_test.go | 101 +
exporter/awskinesisexporter/go.mod | 110 +-
exporter/awskinesisexporter/go.sum | 305 +-
.../internal/batch/batch.go | 2 +-
.../internal/batch/batch_max_records_test.go | 18 +
.../internal/batch/package_test.go | 14 +
.../internal/compress/compresser.go | 7 +
.../internal/compress/noop_compression.go | 2 +
.../internal/compress/package_test.go | 14 +
.../internal/key/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/producer/package_test.go | 14 +
exporter/awskinesisexporter/metadata.yaml | 8 +-
exporter/awskinesisexporter/package_test.go | 14 +
exporter/awss3exporter/README.md | 56 +-
exporter/awss3exporter/body_marshaler.go | 52 +
exporter/awss3exporter/body_marshaler_test.go | 81 +
exporter/awss3exporter/config.go | 39 +-
exporter/awss3exporter/config_test.go | 103 +-
exporter/awss3exporter/exporter.go | 39 +-
exporter/awss3exporter/factory.go | 24 +-
.../awss3exporter/generated_component_test.go | 140 +
exporter/awss3exporter/go.mod | 124 +-
exporter/awss3exporter/go.sum | 638 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/awss3exporter/marshaler.go | 25 +
exporter/awss3exporter/marshaler_test.go | 71 +
exporter/awss3exporter/metadata.yaml | 6 +-
exporter/awss3exporter/s3_writer.go | 52 +-
exporter/awss3exporter/s3_writer_test.go | 44 +-
.../awss3exporter/testdata/compression.yaml | 26 +
.../config-s3-compatible-systems.yaml | 22 +
exporter/awss3exporter/testdata/default.yaml | 2 +
.../awss3exporter/testdata/marshaler.yaml | 8 +-
exporter/awsxrayexporter/README.md | 4 +-
exporter/awsxrayexporter/awsxray.go | 4 +-
exporter/awsxrayexporter/awsxray_test.go | 23 +-
exporter/awsxrayexporter/factory_test.go | 4 +-
.../generated_component_test.go | 126 +
exporter/awsxrayexporter/go.mod | 78 +-
exporter/awsxrayexporter/go.sum | 240 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/translator/package_test.go | 14 +
.../internal/translator/segment.go | 12 +-
.../internal/translator/segment_test.go | 95 +-
exporter/awsxrayexporter/metadata.yaml | 8 +-
.../adx_exporter_test.go | 36 +-
exporter/azuredataexplorerexporter/config.go | 3 +-
.../azuredataexplorerexporter/config_test.go | 3 +-
exporter/azuredataexplorerexporter/factory.go | 6 +-
.../generated_component_test.go | 101 +
exporter/azuredataexplorerexporter/go.mod | 93 +-
exporter/azuredataexplorerexporter/go.sum | 288 +-
.../internal/metadata/generated_status.go | 15 +-
.../azuredataexplorerexporter/metadata.yaml | 12 +-
.../azuredataexplorerexporter/package_test.go | 17 +
.../azuremonitorexporter/AUTHENTICATION.md | 19 +-
exporter/azuremonitorexporter/README.md | 20 +-
exporter/azuremonitorexporter/config_test.go | 2 +-
.../connection_string_parser.go | 21 +-
.../connection_string_parser_test.go | 40 +-
exporter/azuremonitorexporter/factory_test.go | 6 +-
.../generated_component_test.go | 140 +
exporter/azuremonitorexporter/go.mod | 70 +-
exporter/azuremonitorexporter/go.sum | 227 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/azuremonitorexporter/metadata.yaml | 11 +-
.../azuremonitorexporter/trace_to_envelope.go | 72 +-
.../trace_to_envelope_test.go | 28 +-
exporter/carbonexporter/README.md | 13 +-
exporter/carbonexporter/config.go | 36 +-
exporter/carbonexporter/config_test.go | 46 +-
exporter/carbonexporter/exporter.go | 215 +-
exporter/carbonexporter/exporter_test.go | 431 +-
exporter/carbonexporter/factory.go | 21 +-
.../generated_component_test.go | 126 +
exporter/carbonexporter/go.mod | 81 +-
exporter/carbonexporter/go.sum | 222 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/carbonexporter/metadata.yaml | 6 +-
.../carbonexporter/metricdata_to_plaintext.go | 107 +-
.../metricdata_to_plaintext_test.go | 136 +-
exporter/carbonexporter/package_test.go | 14 +
exporter/carbonexporter/testdata/config.yaml | 14 +
exporter/cassandraexporter/README.md | 12 +-
exporter/cassandraexporter/config.go | 26 +-
exporter/cassandraexporter/constants.go | 2 +-
.../example/otel-collector-config.yml | 3 +-
exporter/cassandraexporter/exporter_logs.go | 53 +-
.../cassandraexporter/exporter_logs_test.go | 66 +
exporter/cassandraexporter/exporter_traces.go | 34 +-
exporter/cassandraexporter/factory.go | 15 +-
.../generated_component_test.go | 94 +
exporter/cassandraexporter/go.mod | 67 +-
exporter/cassandraexporter/go.sum | 223 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/cassandraexporter/metadata.yaml | 4 +
exporter/cassandraexporter/package_test.go | 14 +
.../cassandraexporter/testdata/config.yaml | 1 +
exporter/clickhouseexporter/Makefile | 4 +-
exporter/clickhouseexporter/README.md | 42 +-
exporter/clickhouseexporter/config.go | 50 +-
exporter/clickhouseexporter/config_test.go | 85 +-
.../example/docker-compose.yml | 5 +-
.../example/otel-collector-config.yml | 2 +-
exporter/clickhouseexporter/exporter_logs.go | 13 +-
.../clickhouseexporter/exporter_logs_test.go | 34 +-
.../clickhouseexporter/exporter_metrics.go | 4 +-
.../exporter_metrics_test.go | 88 +-
.../clickhouseexporter/exporter_sql_test.go | 186 +
.../clickhouseexporter/exporter_traces.go | 26 +-
.../exporter_traces_test.go | 33 +-
exporter/clickhouseexporter/factory.go | 38 +-
.../generated_component_test.go | 101 +
exporter/clickhouseexporter/go.mod | 119 +-
exporter/clickhouseexporter/go.sum | 360 +-
.../clickhouseexporter/integration_test.go | 607 +
.../internal/exponential_histogram_metrics.go | 21 +-
.../internal/gauge_metrics.go | 19 +-
.../internal/histogram_metrics.go | 19 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metrics_model.go | 8 +-
.../internal/package_test.go | 14 +
.../internal/sum_metrics.go | 19 +-
.../internal/summary_metrics.go | 17 +-
exporter/clickhouseexporter/metadata.yaml | 7 +-
exporter/clickhouseexporter/package_test.go | 14 +
.../clickhouseexporter/testdata/config.yaml | 18 +-
exporter/coralogixexporter/README.md | 7 +-
exporter/coralogixexporter/config.go | 27 +-
exporter/coralogixexporter/config_test.go | 72 +-
exporter/coralogixexporter/factory.go | 27 +-
exporter/coralogixexporter/factory_test.go | 51 +-
.../generated_component_test.go | 140 +
exporter/coralogixexporter/go.mod | 89 +-
exporter/coralogixexporter/go.sum | 266 +-
.../internal/metadata/generated_status.go | 17 +-
exporter/coralogixexporter/metadata.yaml | 12 +-
exporter/coralogixexporter/package_test.go | 14 +
exporter/datadogexporter/README.md | 16 +-
exporter/datadogexporter/config.go | 90 +-
exporter/datadogexporter/config_test.go | 91 +-
.../datadogexporter/config_warnings_test.go | 5 +-
.../examples/batch-memory.yaml | 36 +
.../examples/collector-metrics.yaml | 27 +
.../datadogexporter/examples/collector.yaml | 56 +-
.../examples/docker-stats.yaml | 37 +
.../examples/host-metadata.yaml | 43 +
.../examples/host-metrics.yaml | 46 +
.../examples/k8s-chart/configmap.yaml | 2 +-
.../examples/k8s-chart/k8s-values.yaml | 92 +
exporter/datadogexporter/examples/kafka.yaml | 61 +
exporter/datadogexporter/examples/logs.yaml | 36 +
.../datadogexporter/examples/ootb-ec2.yaml | 113 +
exporter/datadogexporter/examples/otlp.yaml | 35 +
.../examples/trace-metrics.yaml | 34 +
exporter/datadogexporter/examples_test.go | 20 +
exporter/datadogexporter/factory.go | 147 +-
exporter/datadogexporter/factory_test.go | 79 +-
.../generated_component_test.go | 140 +
exporter/datadogexporter/go.mod | 369 +-
exporter/datadogexporter/go.sum | 774 +-
exporter/datadogexporter/hostmetadata.go | 4 +-
.../datadogexporter/integrationtest/go.mod | 284 +-
.../datadogexporter/integrationtest/go.sum | 830 +-
.../integrationtest/integration_test.go | 41 +-
.../internal/clientutil/api.go | 6 +-
.../internal/clientutil/http.go | 59 +-
.../internal/clientutil/http_test.go | 74 +
.../internal/clientutil/package_test.go | 14 +
.../internal/clientutil/retrier.go | 6 +-
.../internal/clientutil/retrier_test.go | 8 +-
.../internal/hostmetadata/config.go | 9 +-
.../internal/azure/package_test.go | 14 +
.../hostmetadata/internal/ec2/package_test.go | 14 +
.../hostmetadata/internal/ecs/package_test.go | 14 +
.../hostmetadata/internal/gcp/package_test.go | 14 +
.../hostmetadata/internal/gohai/gohai.go | 30 +-
.../hostmetadata/internal/gohai/gohai_test.go | 3 +
.../hostmetadata/internal/gohai/processes.go | 2 +-
.../internal/gohai/processes_other.go | 2 +-
.../hostmetadata/internal/k8s/package_test.go | 14 +
.../hostmetadata/internal/system/host_unix.go | 1 -
.../internal/system/host_unix_test.go | 1 -
.../internal/system/host_windows.go | 1 -
.../internal/system/package_test.go | 14 +
.../internal/hostmetadata/metadata.go | 2 +-
.../internal/hostmetadata/metadata_test.go | 2 +-
.../hostmetadata/valid/package_test.go | 14 +
.../internal/logs/package_test.go | 14 +
.../datadogexporter/internal/logs/sender.go | 6 +-
.../internal/logs/sender_test.go | 5 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metrics/consumer_test.go | 8 +-
.../internal/metrics/sketches/package_test.go | 14 +
.../internal/scrub/package_test.go | 14 +
.../internal/testutil/test_utils.go | 8 +-
exporter/datadogexporter/logs_exporter.go | 51 +-
.../datadogexporter/logs_exporter_test.go | 21 +-
exporter/datadogexporter/metadata.yaml | 18 +-
exporter/datadogexporter/metrics_exporter.go | 73 +-
.../datadogexporter/metrics_exporter_test.go | 84 +-
exporter/datadogexporter/traces_exporter.go | 29 +-
.../datadogexporter/traces_exporter_test.go | 16 +-
exporter/datasetexporter/README.md | 48 +-
exporter/datasetexporter/config.go | 19 +-
exporter/datasetexporter/config_test.go | 20 +-
exporter/datasetexporter/datasetexporter.go | 15 +-
exporter/datasetexporter/factory.go | 4 +-
exporter/datasetexporter/factory_test.go | 33 +-
.../generated_component_test.go | 94 +
exporter/datasetexporter/go.mod | 73 +-
exporter/datasetexporter/go.sum | 231 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/datasetexporter/logs_exporter.go | 4 +-
.../logs_exporter_stress_test.go | 8 +-
.../datasetexporter/logs_exporter_test.go | 337 +-
exporter/datasetexporter/metadata.yaml | 10 +-
exporter/datasetexporter/testdata/config.yaml | 4 +-
exporter/datasetexporter/traces_exporter.go | 6 +-
exporter/dynatraceexporter/README.md | 4 +-
exporter/dynatraceexporter/config/config.go | 15 +-
.../dynatraceexporter/config/config_test.go | 4 +-
.../dynatraceexporter/config/package_test.go | 14 +
exporter/dynatraceexporter/factory.go | 9 +-
exporter/dynatraceexporter/factory_test.go | 15 +-
.../generated_component_test.go | 126 +
exporter/dynatraceexporter/go.mod | 85 +-
exporter/dynatraceexporter/go.sum | 251 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/serialization/package_test.go | 14 +
exporter/dynatraceexporter/metadata.yaml | 6 +-
.../dynatraceexporter/metrics_exporter.go | 4 +-
.../metrics_exporter_test.go | 86 +-
exporter/elasticsearchexporter/README.md | 20 +-
exporter/elasticsearchexporter/attribute.go | 15 +-
exporter/elasticsearchexporter/config.go | 32 +-
exporter/elasticsearchexporter/config_test.go | 45 +-
.../elasticsearch_bulk.go | 4 +-
exporter/elasticsearchexporter/factory.go | 43 +-
.../elasticsearchexporter/factory_test.go | 23 +
.../generated_component_test.go | 135 +
exporter/elasticsearchexporter/go.mod | 75 +-
exporter/elasticsearchexporter/go.sum | 235 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/objmodel/package_test.go | 14 +
.../elasticsearchexporter/logs_exporter.go | 40 +-
.../logs_exporter_test.go | 143 +-
exporter/elasticsearchexporter/metadata.yaml | 9 +-
exporter/elasticsearchexporter/model.go | 98 +-
exporter/elasticsearchexporter/model_test.go | 158 +-
.../elasticsearchexporter/package_test.go | 14 +
.../testdata/config.yaml | 8 +
.../elasticsearchexporter/trace_exporter.go | 43 +-
.../traces_exporter_test.go | 106 +-
exporter/elasticsearchexporter/util.go | 28 +
exporter/elasticsearchexporter/utils_test.go | 28 +-
exporter/f5cloudexporter/README.md | 51 -
exporter/f5cloudexporter/auth.go | 61 -
exporter/f5cloudexporter/auth_test.go | 143 -
exporter/f5cloudexporter/config.go | 62 -
exporter/f5cloudexporter/config_test.go | 191 -
exporter/f5cloudexporter/doc.go | 7 -
exporter/f5cloudexporter/factory.go | 124 -
exporter/f5cloudexporter/factory_test.go | 161 -
exporter/f5cloudexporter/go.mod | 82 -
exporter/f5cloudexporter/go.sum | 275 -
.../internal/metadata/generated_status.go | 14 -
exporter/f5cloudexporter/metadata.yaml | 9 -
exporter/f5cloudexporter/testdata/config.yaml | 23 -
.../testdata/empty_credential_file.json | 1 -
exporter/fileexporter/README.md | 24 +-
exporter/fileexporter/config.go | 57 +-
exporter/fileexporter/config_test.go | 66 +
exporter/fileexporter/encoding_test.go | 120 +
exporter/fileexporter/factory.go | 127 +-
exporter/fileexporter/factory_test.go | 51 +-
exporter/fileexporter/file_exporter.go | 145 +-
exporter/fileexporter/file_exporter_test.go | 256 +-
exporter/fileexporter/file_writer.go | 118 +
.../fileexporter/generated_component_test.go | 140 +
exporter/fileexporter/go.mod | 80 +-
exporter/fileexporter/go.sum | 230 +-
.../fileexporter/grouping_file_exporter.go | 289 +
.../grouping_file_exporter_test.go | 499 +
.../internal/metadata/generated_status.go | 15 +-
exporter/fileexporter/marshaller.go | 103 +
exporter/fileexporter/metadata.yaml | 8 +-
exporter/fileexporter/package_test.go | 16 +
exporter/fileexporter/testdata/.gitignore | 2 +
exporter/fileexporter/testdata/config.yaml | 28 +
exporter/googlecloudexporter/README.md | 41 +-
exporter/googlecloudexporter/factory.go | 3 +
.../generated_component_test.go | 101 +
exporter/googlecloudexporter/go.mod | 102 +-
exporter/googlecloudexporter/go.sum | 245 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/googlecloudexporter/metadata.yaml | 6 +-
exporter/googlecloudexporter/package_test.go | 17 +
exporter/googlecloudpubsubexporter/README.md | 8 +-
exporter/googlecloudpubsubexporter/config.go | 9 +-
.../googlecloudpubsubexporter/exporter.go | 8 +-
.../exporter_test.go | 14 +-
exporter/googlecloudpubsubexporter/factory.go | 6 +-
.../googlecloudpubsubexporter/factory_test.go | 11 +-
.../generated_component_test.go | 101 +
exporter/googlecloudpubsubexporter/go.mod | 94 +-
exporter/googlecloudpubsubexporter/go.sum | 226 +-
.../internal/metadata/generated_status.go | 15 +-
.../googlecloudpubsubexporter/metadata.yaml | 7 +-
.../googlemanagedprometheusexporter/README.md | 3 +-
.../config_test.go | 2 +-
.../factory.go | 1 +
.../generated_component_test.go | 87 +
.../googlemanagedprometheusexporter/go.mod | 162 +-
.../googlemanagedprometheusexporter/go.sum | 712 +-
.../internal/metadata/generated_status.go | 15 +-
.../metadata.yaml | 6 +-
.../package_test.go | 17 +
exporter/honeycombmarkerexporter/README.md | 61 +-
exporter/honeycombmarkerexporter/config.go | 43 +-
.../honeycombmarkerexporter/config_test.go | 31 +-
exporter/honeycombmarkerexporter/factory.go | 15 +-
.../generated_component_test.go | 126 +
exporter/honeycombmarkerexporter/go.mod | 90 +-
exporter/honeycombmarkerexporter/go.sum | 262 +-
.../internal/metadata/generated_status.go | 17 +-
.../honeycombmarkerexporter/logs_exporter.go | 159 +-
.../logs_exporter_test.go | 301 +
.../honeycombmarkerexporter/metadata.yaml | 8 +-
.../honeycombmarkerexporter/package_test.go | 14 +
.../testdata/config.yaml | 75 +-
exporter/influxdbexporter/README.md | 3 +-
exporter/influxdbexporter/config.go | 7 +-
exporter/influxdbexporter/config_test.go | 5 +-
exporter/influxdbexporter/factory.go | 11 +-
.../generated_component_test.go | 140 +
exporter/influxdbexporter/go.mod | 84 +-
exporter/influxdbexporter/go.sum | 257 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/influxdbexporter/metadata.yaml | 6 +-
exporter/influxdbexporter/package_test.go | 17 +
exporter/influxdbexporter/writer.go | 24 +-
exporter/influxdbexporter/writer_test.go | 27 +-
exporter/instanaexporter/README.md | 4 +-
exporter/instanaexporter/config.go | 2 +-
exporter/instanaexporter/config_test.go | 6 +-
exporter/instanaexporter/exporter.go | 4 +-
exporter/instanaexporter/exporter_test.go | 22 +-
exporter/instanaexporter/factory.go | 5 +-
exporter/instanaexporter/factory_test.go | 12 +-
.../generated_component_test.go | 126 +
exporter/instanaexporter/go.mod | 85 +-
exporter/instanaexporter/go.sum | 257 +-
.../internal/converter/model/package_test.go | 14 +
.../internal/converter/package_test.go | 14 +
.../internal/metadata/generated_status.go | 17 +-
exporter/instanaexporter/metadata.yaml | 6 +-
exporter/instanaexporter/package_test.go | 14 +
exporter/kafkaexporter/README.md | 9 +-
exporter/kafkaexporter/config.go | 12 +-
exporter/kafkaexporter/config_test.go | 27 +-
exporter/kafkaexporter/factory.go | 14 +-
exporter/kafkaexporter/factory_test.go | 17 +-
.../kafkaexporter/generated_component_test.go | 101 +
exporter/kafkaexporter/go.mod | 99 +-
exporter/kafkaexporter/go.sum | 270 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/kafkaexporter/kafka_exporter.go | 66 +-
exporter/kafkaexporter/kafka_exporter_test.go | 48 +-
exporter/kafkaexporter/marshaler_test.go | 224 +-
exporter/kafkaexporter/metadata.yaml | 7 +-
exporter/kafkaexporter/package_test.go | 14 +
exporter/kafkaexporter/pdata_marshaler.go | 54 +-
exporter/kafkaexporter/testdata/config.yaml | 2 +
exporter/kineticaexporter/common.go | 750 +
exporter/kineticaexporter/config.go | 1 -
exporter/kineticaexporter/config_test.go | 2 +-
.../kineticaexporter/exporter_metric_test.go | 524 +
.../generated_component_test.go | 101 +
exporter/kineticaexporter/go.mod | 81 +-
exporter/kineticaexporter/go.sum | 255 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/kineticaexporter/metadata.yaml | 6 +
exporter/kineticaexporter/metrics_exporter.go | 1603 +-
exporter/kineticaexporter/writer.go | 835 +
exporter/loadbalancingexporter/README.md | 78 +-
exporter/loadbalancingexporter/config.go | 22 +-
.../loadbalancingexporter/example/Dockerfile | 2 +-
exporter/loadbalancingexporter/factory.go | 1 +
.../loadbalancingexporter/factory_test.go | 16 +-
.../generated_component_test.go | 140 +
exporter/loadbalancingexporter/go.mod | 186 +-
exporter/loadbalancingexporter/go.sum | 2115 +-
exporter/loadbalancingexporter/helpers.go | 123 +
.../loadbalancingexporter/helpers_test.go | 175 +
.../internal/metadata/generated_status.go | 17 +-
.../loadbalancingexporter/loadbalancer.go | 86 +-
.../loadbalancer_test.go | 58 +-
.../loadbalancingexporter/log_exporter.go | 17 +-
.../log_exporter_test.go | 95 +-
exporter/loadbalancingexporter/metadata.yaml | 20 +-
.../loadbalancingexporter/metrics_exporter.go | 59 +-
.../metrics_exporter_test.go | 222 +-
.../loadbalancingexporter/package_test.go | 17 +
.../resolver_aws_cloudmap.go | 219 +
.../resolver_aws_cloudmap_test.go | 112 +
.../resolver_dns_test.go | 9 +-
.../loadbalancingexporter/resolver_k8s.go | 25 +-
.../resolver_k8s_test.go | 10 +-
.../loadbalancingexporter/resolver_static.go | 8 +-
.../resolver_static_test.go | 2 +-
.../testdata/config.yaml | 11 +
.../testdata/test-build-exporter-config.yaml | 2 +-
.../loadbalancingexporter/trace_exporter.go | 61 +-
.../trace_exporter_test.go | 211 +-
.../loadbalancingexporter/wrapped_exporter.go | 56 +
exporter/logicmonitorexporter/README.md | 18 +
exporter/logicmonitorexporter/config.go | 36 +-
exporter/logicmonitorexporter/config_test.go | 72 +-
exporter/logicmonitorexporter/factory.go | 12 +-
exporter/logicmonitorexporter/factory_test.go | 7 +-
.../generated_component_test.go | 133 +
exporter/logicmonitorexporter/go.mod | 88 +-
exporter/logicmonitorexporter/go.sum | 259 +-
.../internal/logs/package_test.go | 14 +
.../internal/logs/sender.go | 44 +-
.../internal/logs/sender_test.go | 34 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/traces/package_test.go | 14 +
.../internal/traces/sender.go | 32 +-
.../internal/traces/sender_test.go | 15 +-
.../logicmonitorexporter/logs_exporter.go | 43 +-
.../logs_exporter_test.go | 7 +-
exporter/logicmonitorexporter/metadata.yaml | 9 +
exporter/logicmonitorexporter/package_test.go | 14 +
.../logicmonitorexporter/testdata/config.yaml | 8 +
.../logicmonitorexporter/traces_exporter.go | 13 +-
.../traces_exporter_test.go | 7 +-
exporter/logzioexporter/README.md | 10 +-
exporter/logzioexporter/config.go | 21 +-
exporter/logzioexporter/config_test.go | 27 +-
exporter/logzioexporter/example/config.yaml | 1 +
exporter/logzioexporter/exporter.go | 54 +-
exporter/logzioexporter/exporter_test.go | 57 +-
exporter/logzioexporter/factory.go | 17 +-
exporter/logzioexporter/factory_test.go | 4 +-
.../generated_component_test.go | 133 +
exporter/logzioexporter/go.mod | 106 +-
exporter/logzioexporter/go.sum | 296 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/logzioexporter/jsonlog.go | 12 +-
exporter/logzioexporter/jsonlog_test.go | 9 +-
exporter/logzioexporter/metadata.yaml | 10 +-
exporter/logzioexporter/package_test.go | 14 +
exporter/lokiexporter/README.md | 3 +-
exporter/lokiexporter/config.go | 7 +-
exporter/lokiexporter/config_test.go | 11 +-
exporter/lokiexporter/exporter.go | 30 +-
exporter/lokiexporter/exporter_test.go | 8 +-
exporter/lokiexporter/factory.go | 16 +-
exporter/lokiexporter/factory_test.go | 24 +-
.../lokiexporter/generated_component_test.go | 126 +
exporter/lokiexporter/go.mod | 101 +-
exporter/lokiexporter/go.sum | 335 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/tenant/package_test.go | 14 +
exporter/lokiexporter/metadata.yaml | 5 +-
exporter/lokiexporter/metrics.go | 24 -
exporter/lokiexporter/package_test.go | 14 +
exporter/mezmoexporter/config.go | 11 +-
exporter/mezmoexporter/config_test.go | 5 +-
exporter/mezmoexporter/exporter.go | 9 +-
exporter/mezmoexporter/exporter_test.go | 4 +-
exporter/mezmoexporter/factory.go | 11 +-
exporter/mezmoexporter/factory_test.go | 8 +-
.../mezmoexporter/generated_component_test.go | 126 +
exporter/mezmoexporter/go.mod | 83 +-
exporter/mezmoexporter/go.sum | 255 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/mezmoexporter/metadata.yaml | 6 +
exporter/mezmoexporter/package_test.go | 14 +
exporter/opencensusexporter/README.md | 4 +-
exporter/opencensusexporter/config.go | 7 +-
exporter/opencensusexporter/config_test.go | 9 +-
exporter/opencensusexporter/factory.go | 6 +-
exporter/opencensusexporter/factory_test.go | 32 +-
.../generated_component_test.go | 133 +
exporter/opencensusexporter/go.mod | 100 +-
exporter/opencensusexporter/go.sum | 206 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/opencensusexporter/metadata.yaml | 8 +-
exporter/opencensusexporter/opencensus.go | 4 +-
.../opencensusexporter/opencensus_test.go | 42 +-
exporter/opencensusexporter/package_test.go | 14 +
exporter/opensearchexporter/README.md | 9 +-
exporter/opensearchexporter/config.go | 5 +-
exporter/opensearchexporter/config_test.go | 14 +-
exporter/opensearchexporter/factory.go | 17 +-
.../generated_component_test.go | 133 +
exporter/opensearchexporter/go.mod | 86 +-
exporter/opensearchexporter/go.sum | 249 +-
.../internal/metadata/generated_status.go | 17 +-
.../internal/objmodel/package_test.go | 14 +
.../opensearchexporter/log_bulk_indexer.go | 2 +-
exporter/opensearchexporter/metadata.yaml | 13 +-
exporter/opensearchexporter/package_test.go | 14 +
.../opensearchexporter/sso_log_exporter.go | 8 +-
.../opensearchexporter/sso_trace_exporter.go | 8 +-
.../opensearchexporter/trace_bulk_indexer.go | 2 +-
.../Makefile | 0
exporter/otelarrowexporter/README.md | 243 +
exporter/otelarrowexporter/config.go | 126 +
exporter/otelarrowexporter/config_test.go | 151 +
exporter/otelarrowexporter/doc.go | 10 +
exporter/otelarrowexporter/factory.go | 146 +
exporter/otelarrowexporter/factory_test.go | 235 +
exporter/otelarrowexporter/go.mod | 82 +
exporter/otelarrowexporter/go.sum | 208 +
.../internal/arrow/exporter.go | 44 +
.../internal/metadata/generated_status.go | 27 +
exporter/otelarrowexporter/metadata.yaml | 15 +
exporter/otelarrowexporter/otelarrow.go | 78 +
.../otelarrowexporter/testdata/config.yaml | 32 +
.../otelarrowexporter/testdata/default.yaml | 1 +
.../otelarrowexporter/testdata/test_cert.pem | 17 +
.../otelarrowexporter/testdata/test_key.pem | 28 +
exporter/prometheusexporter/README.md | 9 +-
exporter/prometheusexporter/accumulator.go | 101 +-
.../prometheusexporter/accumulator_test.go | 234 +-
exporter/prometheusexporter/config.go | 2 +-
exporter/prometheusexporter/config_test.go | 6 +-
.../prometheusexporter/end_to_end_test.go | 7 +-
exporter/prometheusexporter/factory.go | 2 +
.../generated_component_test.go | 128 +
exporter/prometheusexporter/go.mod | 212 +-
exporter/prometheusexporter/go.sum | 575 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/prometheusexporter/metadata.yaml | 10 +-
exporter/prometheusexporter/package_test.go | 17 +
exporter/prometheusexporter/prometheus.go | 6 +-
.../prometheusexporter/prometheus_test.go | 42 +-
.../prometheusremotewriteexporter/DESIGN.md | 2 +-
.../prometheusremotewriteexporter/README.md | 5 +-
.../prometheusremotewriteexporter/config.go | 8 +-
.../config_test.go | 9 +-
.../prometheusremotewriteexporter/exporter.go | 116 +-
.../exporter_test.go | 278 +-
.../prometheusremotewriteexporter/factory.go | 17 +-
.../factory_test.go | 7 +-
.../generated_component_test.go | 126 +
exporter/prometheusremotewriteexporter/go.mod | 96 +-
exporter/prometheusremotewriteexporter/go.sum | 271 +-
.../prometheusremotewriteexporter/helper.go | 34 +-
.../helper_test.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../metadata.yaml | 6 +-
.../package_test.go | 17 +
exporter/prometheusremotewriteexporter/wal.go | 7 +-
.../prometheusremotewriteexporter/wal_test.go | 31 +-
exporter/pulsarexporter/config.go | 3 +-
exporter/pulsarexporter/config_test.go | 3 +-
exporter/pulsarexporter/factory.go | 12 +-
exporter/pulsarexporter/factory_test.go | 20 +-
.../generated_component_test.go | 101 +
exporter/pulsarexporter/go.mod | 96 +-
exporter/pulsarexporter/go.sum | 228 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/pulsarexporter/metadata.yaml | 5 +
exporter/pulsarexporter/pulsar_exporter.go | 64 +-
.../pulsarexporter/pulsar_exporter_test.go | 2 +-
.../rabbitmqexporter}/Makefile | 0
exporter/rabbitmqexporter/README.md | 46 +
exporter/rabbitmqexporter/config.go | 43 +
exporter/rabbitmqexporter/config_test.go | 91 +
exporter/rabbitmqexporter/doc.go | 7 +
exporter/rabbitmqexporter/factory.go | 101 +
exporter/rabbitmqexporter/factory_test.go | 47 +
.../generated_component_test.go | 101 +
exporter/rabbitmqexporter/go.mod | 59 +
exporter/rabbitmqexporter/go.sum | 152 +
.../internal/metadata/generated_status.go | 27 +
exporter/rabbitmqexporter/metadata.yaml | 15 +
exporter/rabbitmqexporter/package_test.go | 14 +
.../rabbitmqexporter/rabbitmq_exporter.go | 54 +
.../testdata/test-config.yaml | 22 +
exporter/sapmexporter/README.md | 5 +-
exporter/sapmexporter/config.go | 3 +-
exporter/sapmexporter/config_test.go | 3 +-
exporter/sapmexporter/exporter.go | 2 +-
exporter/sapmexporter/exporter_test.go | 6 +-
exporter/sapmexporter/factory.go | 3 +-
exporter/sapmexporter/factory_test.go | 4 +-
.../sapmexporter/generated_component_test.go | 126 +
exporter/sapmexporter/go.mod | 90 +-
exporter/sapmexporter/go.sum | 186 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/sapmexporter/metadata.yaml | 7 +-
exporter/sapmexporter/package_test.go | 17 +
exporter/sentryexporter/factory_test.go | 4 +-
.../generated_component_test.go | 126 +
exporter/sentryexporter/go.mod | 69 +-
exporter/sentryexporter/go.sum | 228 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/sentryexporter/metadata.yaml | 5 +
exporter/sentryexporter/package_test.go | 14 +
.../sentryexporter/sentry_exporter_test.go | 2 +-
exporter/signalfxexporter/README.md | 14 +-
exporter/signalfxexporter/config.go | 23 +-
exporter/signalfxexporter/config_test.go | 43 +-
exporter/signalfxexporter/dpclient.go | 144 +-
exporter/signalfxexporter/exporter.go | 18 +-
exporter/signalfxexporter/exporter_test.go | 584 +-
exporter/signalfxexporter/factory.go | 33 +-
exporter/signalfxexporter/factory_test.go | 78 +-
.../generated_component_test.go | 140 +
exporter/signalfxexporter/go.mod | 105 +-
exporter/signalfxexporter/go.sum | 247 +-
.../internal/apm/correlations/client.go | 7 +
.../internal/apm/correlations/client_test.go | 23 +-
.../internal/apm/correlations/package_test.go | 14 +
.../requests/requestcounter/package_test.go | 14 +
.../internal/apm/requests/sender.go | 10 +-
.../internal/apm/tracetracker/package_test.go | 14 +
.../internal/apm/tracetracker/shims.go | 57 -
.../internal/apm/tracetracker/tracker.go | 192 +-
.../internal/apm/tracetracker/tracker_test.go | 113 +-
.../internal/correlation/config.go | 10 +-
.../internal/correlation/config_test.go | 4 +-
.../internal/correlation/correlation.go | 22 +-
.../internal/correlation/correlation_test.go | 12 +-
.../internal/correlation/package_test.go | 14 +
.../internal/correlation/spanshims.go | 74 -
.../internal/correlation/spanshims_test.go | 115 -
.../internal/dimensions/metadata_test.go | 1 +
.../internal/hostmetadata/host_linux.go | 1 -
.../internal/hostmetadata/host_linux_test.go | 1 -
.../internal/hostmetadata/host_others.go | 1 -
.../hostmetadata/metadata_others_test.go | 1 -
.../internal/hostmetadata/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/translation/converter.go | 12 +-
.../internal/translation/converter_test.go | 120 +-
.../translation/dpfilters/dimensions_test.go | 4 +-
.../translation/dpfilters/package_test.go | 14 +
.../dpfilters/propertyfilter_test.go | 2 +-
.../translation/dpfilters/string_test.go | 4 +-
.../internal/translation/translator_test.go | 2 +-
.../internal/utils/histogram_utils.go | 138 +
.../internal/utils/histogram_utils_test.go | 337 +
exporter/signalfxexporter/metadata.yaml | 13 +-
.../signalfxexporter/testdata/config.yaml | 1 +
exporter/skywalkingexporter/README.md | 7 +-
exporter/skywalkingexporter/config.go | 5 +-
exporter/skywalkingexporter/config_test.go | 13 +-
exporter/skywalkingexporter/factory.go | 9 +-
exporter/skywalkingexporter/factory_test.go | 26 +-
.../generated_component_test.go | 94 +
exporter/skywalkingexporter/go.mod | 91 +-
exporter/skywalkingexporter/go.sum | 242 +-
.../internal/metadata/generated_status.go | 19 +-
exporter/skywalkingexporter/metadata.yaml | 9 +-
exporter/skywalkingexporter/skywalking.go | 4 +-
.../skywalking_benchmark_test.go | 6 +-
.../skywalkingexporter/skywalking_test.go | 12 +-
exporter/splunkhecexporter/README.md | 11 +-
.../splunkhecexporter/batchperscope_test.go | 2 +-
exporter/splunkhecexporter/client.go | 8 +-
exporter/splunkhecexporter/client_test.go | 47 +-
exporter/splunkhecexporter/config.go | 14 +-
exporter/splunkhecexporter/config_test.go | 45 +-
exporter/splunkhecexporter/example/Dockerfile | 2 +-
exporter/splunkhecexporter/factory.go | 58 +-
exporter/splunkhecexporter/factory_test.go | 12 +-
.../generated_component_test.go | 140 +
exporter/splunkhecexporter/go.mod | 118 +-
exporter/splunkhecexporter/go.sum | 249 +-
exporter/splunkhecexporter/heartbeat_test.go | 6 +-
.../splunkhecexporter/integration_test.go | 284 +-
.../internal/integrationtestutils/splunk.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../splunkhecexporter/logdata_to_splunk.go | 7 +-
.../logdata_to_splunk_test.go | 8 +-
exporter/splunkhecexporter/metadata.yaml | 14 +-
exporter/splunkhecexporter/package_test.go | 17 +
exporter/sumologicexporter/config.go | 19 +-
exporter/sumologicexporter/config_test.go | 14 +-
exporter/sumologicexporter/exporter.go | 8 +-
exporter/sumologicexporter/exporter_test.go | 24 +-
exporter/sumologicexporter/factory.go | 7 +-
exporter/sumologicexporter/factory_test.go | 14 +-
.../generated_component_test.go | 94 +
exporter/sumologicexporter/go.mod | 81 +-
exporter/sumologicexporter/go.sum | 176 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/observability/observability.go | 126 +
.../observability/observability_test.go | 177 +
exporter/sumologicexporter/metadata.yaml | 5 +
exporter/sumologicexporter/sender.go | 2 +-
exporter/sumologicexporter/sender_test.go | 54 +-
exporter/syslogexporter/README.md | 6 +-
exporter/syslogexporter/config.go | 13 +-
exporter/syslogexporter/exporter.go | 20 +-
exporter/syslogexporter/exporter_test.go | 54 +
exporter/syslogexporter/factory.go | 3 +-
exporter/syslogexporter/factory_test.go | 8 +-
exporter/syslogexporter/formatter.go | 4 +-
.../generated_component_test.go | 87 +
exporter/syslogexporter/go.mod | 66 +-
exporter/syslogexporter/go.sum | 223 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/syslogexporter/metadata.yaml | 6 +
exporter/syslogexporter/package_test.go | 14 +
exporter/syslogexporter/rfc5424_formatter.go | 12 +-
.../syslogexporter/rfc5424_formatter_test.go | 12 +-
exporter/syslogexporter/sender.go | 4 +-
exporter/tanzuobservabilityexporter/README.md | 264 -
exporter/tanzuobservabilityexporter/config.go | 89 -
.../tanzuobservabilityexporter/config_test.go | 119 -
.../tanzuobservabilityexporter/factory.go | 96 -
.../factory_test.go | 113 -
exporter/tanzuobservabilityexporter/go.mod | 127 -
exporter/tanzuobservabilityexporter/go.sum | 713 -
.../internal/metadata/generated_status.go | 13 -
.../tanzuobservabilityexporter/metadata.yaml | 9 -
.../tanzuobservabilityexporter/metrics.go | 867 -
.../metrics_exporter.go | 72 -
.../metrics_exporter_test.go | 115 -
.../metrics_test.go | 1688 -
.../testdata/config.yaml | 30 -
.../trace_exporter.go | 173 -
.../trace_exporter_test.go | 331 -
.../tanzuobservabilityexporter/transformer.go | 308 -
.../transformer_test.go | 470 -
.../generated_component_test.go | 87 +
.../tencentcloudlogserviceexporter/go.mod | 70 +-
.../tencentcloudlogserviceexporter/go.sum | 229 +-
.../internal/metadata/generated_status.go | 15 +-
.../metadata.yaml | 4 +
exporter/zipkinexporter/README.md | 3 +-
exporter/zipkinexporter/config.go | 10 +-
exporter/zipkinexporter/config_test.go | 11 +-
exporter/zipkinexporter/factory.go | 22 +-
exporter/zipkinexporter/factory_test.go | 8 +-
.../generated_component_test.go | 128 +
exporter/zipkinexporter/go.mod | 101 +-
exporter/zipkinexporter/go.sum | 281 +-
.../internal/metadata/generated_status.go | 15 +-
exporter/zipkinexporter/metadata.yaml | 4 +-
exporter/zipkinexporter/package_test.go | 14 +
exporter/zipkinexporter/testdata/config.yaml | 2 +
exporter/zipkinexporter/zipkin.go | 8 +-
exporter/zipkinexporter/zipkin_test.go | 14 +-
.../ackextension}/Makefile | 0
extension/ackextension/README.md | 34 +
extension/ackextension/ackextension.go | 19 +
extension/ackextension/config.go | 18 +
.../ackextension}/doc.go | 2 +-
extension/ackextension/factory.go | 46 +
extension/ackextension/factory_test.go | 22 +
extension/ackextension/go.mod | 39 +
extension/ackextension/go.sum | 126 +
extension/ackextension/inmemory.go | 109 +
extension/ackextension/inmemory_test.go | 293 +
.../internal/metadata/generated_status.go | 25 +
extension/ackextension/metadata.yaml | 14 +
extension/ackextension/package_test.go | 14 +
extension/ackextension/testdata/config.yaml | 10 +
extension/asapauthextension/README.md | 3 +-
extension/asapauthextension/factory_test.go | 2 +-
extension/asapauthextension/go.mod | 60 +-
extension/asapauthextension/go.sum | 131 +-
.../internal/metadata/generated_status.go | 15 +-
extension/asapauthextension/metadata.yaml | 8 +-
extension/awsmiddleware/config_test.go | 2 +-
extension/awsmiddleware/go.mod | 57 +-
extension/awsmiddleware/go.sum | 122 +-
extension/awsmiddleware/helper_test.go | 2 +-
extension/awsproxy/README.md | 10 +-
extension/awsproxy/config_test.go | 5 +-
extension/awsproxy/extension.go | 38 +-
extension/awsproxy/extension_test.go | 12 +-
extension/awsproxy/factory.go | 11 +-
extension/awsproxy/factory_test.go | 33 +-
.../awsproxy/generated_component_test.go | 30 +
extension/awsproxy/go.mod | 64 +-
extension/awsproxy/go.sum | 125 +-
.../internal/metadata/generated_status.go | 15 +-
extension/awsproxy/metadata.yaml | 6 +-
extension/awsproxy/testdata/config.yaml | 1 +
extension/basicauthextension/README.md | 10 +-
extension/basicauthextension/extension.go | 8 +-
.../basicauthextension/extension_test.go | 16 +-
extension/basicauthextension/factory.go | 2 +-
extension/basicauthextension/factory_test.go | 11 +-
.../generated_component_test.go | 42 +
extension/basicauthextension/go.mod | 62 +-
extension/basicauthextension/go.sum | 137 +-
.../internal/metadata/generated_status.go | 15 +-
extension/basicauthextension/metadata.yaml | 12 +-
extension/basicauthextension/package_test.go | 14 +
extension/bearertokenauthextension/README.md | 6 +-
.../bearertokenauth.go | 3 +
.../bearertokenauth_test.go | 5 +-
.../generated_component_test.go | 42 +
extension/bearertokenauthextension/go.mod | 56 +-
extension/bearertokenauthextension/go.sum | 119 +-
.../internal/metadata/generated_status.go | 15 +-
.../bearertokenauthextension/metadata.yaml | 8 +-
.../bearertokenauthextension/package_test.go | 14 +
extension/encoding/README.md | 6 +-
.../avrologencodingextension/Makefile | 1 +
.../avrologencodingextension/README.md | 14 +
.../encoding/avrologencodingextension/avro.go | 38 +
.../avrologencodingextension/avro_test.go | 42 +
.../avrologencodingextension/config.go | 20 +
.../avrologencodingextension/config_test.go | 20 +
.../encoding/avrologencodingextension/doc.go | 5 +
.../avrologencodingextension/extension.go | 89 +
.../extension_test.go | 53 +
.../avrologencodingextension/factory.go | 30 +
.../generated_component_test.go | 42 +
.../encoding/avrologencodingextension/go.mod | 58 +
.../encoding/avrologencodingextension/go.sum | 144 +
.../internal/metadata/generated_status.go | 25 +
.../avrologencodingextension/metadata.yaml | 22 +
.../avrologencodingextension/package_test.go | 14 +
.../testdata/schema1.avro | 53 +
.../avrologencodingextension/testutil.go | 66 +
extension/encoding/go.mod | 38 +-
extension/encoding/go.sum | 104 +-
.../jaegerencodingextension/config.go | 2 +
.../jaegerencodingextension/extension.go | 3 +
.../jaegerencodingextension/extension_test.go | 44 +-
.../generated_component_test.go | 42 +
.../encoding/jaegerencodingextension/go.mod | 67 +-
.../encoding/jaegerencodingextension/go.sum | 121 +-
.../internal/metadata/generated_status.go | 15 +-
.../jaegerencodingextension/jaeger.go | 19 +
.../jaegerencodingextension/jaeger_test.go | 60 +
.../jaegerencodingextension/metadata.yaml | 6 +-
.../jaegerencodingextension/package_test.go | 14 +
.../encoding/jsonlogencodingextension/doc.go | 5 +
.../generated_component_test.go | 42 +
.../encoding/jsonlogencodingextension/go.mod | 57 +-
.../encoding/jsonlogencodingextension/go.sum | 111 +-
.../internal/metadata/generated_status.go | 15 +-
.../jsonlogencodingextension/metadata.yaml | 4 +
.../jsonlogencodingextension/package_test.go | 14 +
.../otlpencodingextension/extension_test.go | 47 +
.../generated_component_test.go | 42 +
.../encoding/otlpencodingextension/go.mod | 57 +-
.../encoding/otlpencodingextension/go.sum | 111 +-
.../internal/metadata/generated_status.go | 15 +-
.../otlpencodingextension/metadata.yaml | 6 +-
.../otlpencodingextension/package_test.go | 14 +
.../textencodingextension/extension_test.go | 65 +
.../generated_component_test.go | 42 +
.../encoding/textencodingextension/go.mod | 59 +-
.../encoding/textencodingextension/go.sum | 111 +-
.../internal/metadata/generated_status.go | 15 +-
.../textencodingextension/metadata.yaml | 6 +-
.../textencodingextension/package_test.go | 14 +
.../zipkinencodingextension/extension_test.go | 74 +-
.../generated_component_test.go | 42 +
.../encoding/zipkinencodingextension/go.mod | 69 +-
.../encoding/zipkinencodingextension/go.sum | 131 +-
.../internal/metadata/generated_status.go | 15 +-
.../zipkinencodingextension/metadata.yaml | 6 +-
.../zipkinencodingextension/package_test.go | 14 +
.../googleclientauthextension}/Makefile | 0
extension/googleclientauthextension/README.md | 45 +
extension/googleclientauthextension/config.go | 12 +
extension/googleclientauthextension/doc.go | 7 +
.../googleclientauthextension/factory.go | 27 +
.../generated_component_test.go | 42 +
extension/googleclientauthextension/go.mod | 53 +
extension/googleclientauthextension/go.sum | 129 +
.../internal/metadata/generated_status.go | 25 +
.../googleclientauthextension/metadata.yaml | 12 +
.../googleclientauthextension/package_test.go | 14 +
extension/headerssetterextension/README.md | 19 +-
.../generated_component_test.go | 42 +
extension/headerssetterextension/go.mod | 56 +-
extension/headerssetterextension/go.sum | 125 +-
.../internal/action/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/source/package_test.go | 14 +
.../headerssetterextension/metadata.yaml | 5 +-
.../headerssetterextension/package_test.go | 14 +
extension/healthcheckextension/README.md | 18 +-
extension/healthcheckextension/config.go | 2 +-
extension/healthcheckextension/config_test.go | 6 +-
extension/healthcheckextension/factory.go | 11 +-
.../healthcheckextension/factory_test.go | 4 +-
.../generated_component_test.go | 42 +
extension/healthcheckextension/go.mod | 79 +-
extension/healthcheckextension/go.sum | 159 +-
.../healthcheckextension.go | 10 +-
.../healthcheckextension_test.go | 52 +-
.../healthcheckextension/integration_test.go | 50 +
.../internal/metadata/generated_status.go | 15 +-
extension/healthcheckextension/metadata.yaml | 7 +-
.../healthcheckextension/package_test.go | 17 +
extension/httpforwarder/doc.go | 7 -
extension/httpforwarder/go.mod | 64 -
extension/httpforwarder/go.sum | 137 -
.../internal/metadata/generated_status.go | 12 -
extension/httpforwarder/metadata.yaml | 9 -
.../httpforwarderextension}/Makefile | 0
.../README.md | 5 +-
.../config.go | 6 +-
.../config_test.go | 14 +-
extension/httpforwarderextension/doc.go | 7 +
.../extension.go | 12 +-
.../extension_test.go | 24 +-
.../factory.go | 12 +-
.../factory_test.go | 10 +-
.../generated_component_test.go | 42 +
extension/httpforwarderextension/go.mod | 69 +
extension/httpforwarderextension/go.sum | 167 +
.../internal/metadata/generated_status.go | 25 +
.../httpforwarderextension/metadata.yaml | 17 +
.../httpforwarderextension/package_test.go | 14 +
.../testdata/config.yaml | 2 +
extension/jaegerremotesampling/README.md | 14 +-
extension/jaegerremotesampling/config.go | 8 +-
extension/jaegerremotesampling/config_test.go | 24 +-
extension/jaegerremotesampling/extension.go | 8 +-
.../jaegerremotesampling/extension_test.go | 12 +-
extension/jaegerremotesampling/factory.go | 26 +-
.../jaegerremotesampling/factory_test.go | 8 +-
.../generated_component_test.go | 30 +
extension/jaegerremotesampling/go.mod | 107 +-
extension/jaegerremotesampling/go.sum | 660 +-
.../jaegerremotesampling/internal/grpc.go | 12 +-
.../internal/grpc_test.go | 44 +-
.../jaegerremotesampling/internal/http.go | 12 +-
.../internal/http_test.go | 14 +-
.../jaegerremotesamplingdeprecated/README.md | 5 -
.../jaegerremotesamplingdeprecated/config.go | 59 -
.../config_test.go | 111 -
.../extension.go | 124 -
.../extension_test.go | 169 -
.../jaegerremotesamplingdeprecated/factory.go | 45 -
.../factory_test.go | 47 -
.../internal/grpc.go | 107 -
.../internal/grpc/manager.go | 55 -
.../internal/grpc_test.go | 91 -
.../internal/http.go | 117 -
.../internal/http_test.go | 123 -
.../internal/internal_test.go | 21 -
.../internal/metadata/generated_status.go | 12 -
.../internal/remote_strategy_cache.go | 136 -
.../internal/remote_strategy_cache_test.go | 259 -
.../internal/remote_strategy_store.go | 75 -
.../internal/sampling/grpc_handler.go | 48 -
.../internal/sampling/model/sampling.go | 45 -
.../sampling/strategystore/factory.go | 38 -
.../sampling/strategystore/interface.go | 43 -
.../internal/static/constants.go | 55 -
.../internal/static/factory.go | 72 -
.../internal/static/options.go | 52 -
.../internal/static/strategy.go | 44 -
.../internal/static/strategy_store.go | 339 -
.../metadata.yaml | 13 -
.../testdata/config.yaml | 8 -
.../testdata/strategy.json | 1 -
.../internal/metadata/generated_status.go | 15 +-
.../internal/package_test.go | 14 +
.../internal/remote_strategy_store.go | 2 +-
extension/jaegerremotesampling/metadata.yaml | 10 +-
.../jaegerremotesampling/package_test.go | 14 +
extension/oauth2clientauthextension/README.md | 8 +-
extension/oauth2clientauthextension/config.go | 2 +-
.../oauth2clientauthextension/config_test.go | 4 +-
.../oauth2clientauthextension/extension.go | 10 -
.../extension_test.go | 78 +-
.../oauth2clientauthextension/factory_test.go | 11 +-
.../generated_component_test.go | 42 +
extension/oauth2clientauthextension/go.mod | 79 +-
extension/oauth2clientauthextension/go.sum | 185 +-
.../internal/metadata/generated_status.go | 15 +-
.../oauth2clientauthextension/metadata.yaml | 7 +-
.../oauth2clientauthextension/package_test.go | 14 +
extension/observer/dockerobserver/README.md | 16 +-
extension/observer/dockerobserver/config.go | 8 +-
.../observer/dockerobserver/config_test.go | 35 +-
.../observer/dockerobserver/extension.go | 6 +-
extension/observer/dockerobserver/go.mod | 83 +-
extension/observer/dockerobserver/go.sum | 177 +-
.../dockerobserver/integration_test.go | 37 +-
.../internal/metadata/generated_status.go | 15 +-
.../observer/dockerobserver/metadata.yaml | 8 +-
.../dockerobserver/testdata/config.yaml | 4 +
extension/observer/ecsobserver/README.md | 7 +-
extension/observer/ecsobserver/extension.go | 14 +-
.../observer/ecsobserver/extension_test.go | 80 +-
extension/observer/ecsobserver/factory.go | 4 +-
extension/observer/ecsobserver/go.mod | 53 +-
extension/observer/ecsobserver/go.sum | 109 +-
.../internal/ecsmock/package_test.go | 14 +
.../internal/ecsmock/service_test.go | 16 +-
.../internal/errctx/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
extension/observer/ecsobserver/metadata.yaml | 8 +-
.../observer/ecsobserver/package_test.go | 14 +
extension/observer/ecsobserver/sd_test.go | 2 +-
extension/observer/ecsobserver/service.go | 2 +-
extension/observer/ecsobserver/task_test.go | 10 +-
extension/observer/ecstaskobserver/README.md | 4 +-
extension/observer/ecstaskobserver/config.go | 2 +-
.../observer/ecstaskobserver/config_test.go | 2 +-
extension/observer/ecstaskobserver/factory.go | 2 +-
extension/observer/ecstaskobserver/go.mod | 77 +-
extension/observer/ecstaskobserver/go.sum | 153 +-
.../internal/metadata/generated_status.go | 15 +-
.../observer/ecstaskobserver/metadata.yaml | 8 +-
.../observer/ecstaskobserver/package_test.go | 14 +
extension/observer/endpoints.go | 37 +
extension/observer/endpoints_test.go | 38 +-
extension/observer/go.mod | 9 +-
extension/observer/go.sum | 28 +-
extension/observer/hostobserver/README.md | 4 +-
.../observer/hostobserver/extension_test.go | 2 +-
.../hostobserver/generated_component_test.go | 42 +
extension/observer/hostobserver/go.mod | 57 +-
extension/observer/hostobserver/go.sum | 115 +-
.../internal/metadata/generated_status.go | 15 +-
extension/observer/hostobserver/metadata.yaml | 3 +-
.../observer/hostobserver/package_test.go | 14 +
extension/observer/k8sobserver/README.md | 8 +-
extension/observer/k8sobserver/config.go | 6 +-
extension/observer/k8sobserver/config_test.go | 11 +-
extension/observer/k8sobserver/extension.go | 47 +-
.../observer/k8sobserver/extension_test.go | 90 +
extension/observer/k8sobserver/go.mod | 80 +-
extension/observer/k8sobserver/go.sum | 182 +-
extension/observer/k8sobserver/handler.go | 21 +
.../observer/k8sobserver/handler_test.go | 61 +
.../internal/metadata/generated_status.go | 15 +-
.../observer/k8sobserver/k8s_fixtures_test.go | 30 +
extension/observer/k8sobserver/metadata.yaml | 8 +-
.../observer/k8sobserver/service_endpoint.go | 40 +
.../k8sobserver/service_endpoint_test.go | 31 +
.../observer/k8sobserver/testdata/config.yaml | 2 +
extension/observer/package_test.go | 14 +
extension/oidcauthextension/README.md | 4 +-
extension/oidcauthextension/config.go | 10 +
extension/oidcauthextension/extension.go | 13 +-
extension/oidcauthextension/extension_test.go | 31 +-
extension/oidcauthextension/factory.go | 2 +-
.../generated_component_test.go | 30 +
extension/oidcauthextension/go.mod | 65 +-
extension/oidcauthextension/go.sum | 164 +-
.../internal/metadata/generated_status.go | 15 +-
extension/oidcauthextension/metadata.yaml | 7 +-
.../oidcauthextension/oidc_server_test.go | 4 +-
extension/opampextension/README.md | 9 +-
extension/opampextension/config.go | 99 +-
extension/opampextension/config_test.go | 233 +-
extension/opampextension/factory.go | 5 +-
.../generated_component_test.go | 42 +
extension/opampextension/go.mod | 73 +-
extension/opampextension/go.sum | 465 +-
.../internal/metadata/generated_status.go | 17 +-
extension/opampextension/logger.go | 33 +
extension/opampextension/metadata.yaml | 7 +-
extension/opampextension/opamp_agent.go | 103 +-
extension/opampextension/opamp_agent_test.go | 20 +-
extension/opampextension/package_test.go | 14 +
.../opampextension/testdata/config_http.yaml | 4 +
.../opampextension/testdata/effective.yaml | 14 +
extension/pprofextension/README.md | 64 +-
extension/pprofextension/config.go | 2 +-
extension/pprofextension/config_test.go | 2 +-
extension/pprofextension/factory.go | 4 +-
extension/pprofextension/factory_test.go | 2 +-
.../generated_component_test.go | 42 +
extension/pprofextension/go.mod | 55 +-
extension/pprofextension/go.sum | 109 +-
.../internal/metadata/generated_status.go | 15 +-
extension/pprofextension/metadata.yaml | 6 +-
extension/pprofextension/package_test.go | 14 +
extension/pprofextension/pprofextension.go | 24 +-
.../pprofextension/pprofextension_test.go | 40 +-
extension/remotetapextension/config.go | 4 +-
extension/remotetapextension/extension.go | 6 +-
.../generated_component_test.go | 42 +
extension/remotetapextension/go.mod | 73 +-
extension/remotetapextension/go.sum | 157 +-
.../internal/metadata/generated_status.go | 15 +-
extension/remotetapextension/metadata.yaml | 4 +
extension/remotetapextension/package_test.go | 14 +
extension/sigv4authextension/README.md | 5 +-
extension/sigv4authextension/design.md | 1 -
.../sigv4authextension/extension_test.go | 2 +-
extension/sigv4authextension/factory_test.go | 2 +-
.../generated_component_test.go | 42 +
extension/sigv4authextension/go.mod | 78 +-
extension/sigv4authextension/go.sum | 165 +-
.../internal/metadata/generated_status.go | 15 +-
extension/sigv4authextension/metadata.yaml | 7 +-
.../signingroundtripper_test.go | 2 +-
.../solarwindsapmsettingsextension/Makefile | 1 +
.../solarwindsapmsettingsextension/README.md | 38 +
.../solarwindsapmsettingsextension/config.go | 41 +
.../config_test.go | 66 +
.../solarwindsapmsettingsextension/doc.go | 7 +
.../extension.go | 37 +
.../extension_test.go | 53 +
.../solarwindsapmsettingsextension/factory.go | 36 +
.../factory_test.go | 23 +
.../generated_component_test.go | 42 +
.../solarwindsapmsettingsextension/go.mod | 49 +
.../solarwindsapmsettingsextension/go.sum | 127 +
.../internal/metadata/generated_status.go | 25 +
.../metadata.yaml | 10 +
extension/storage/dbstorage/Makefile | 1 +
extension/storage/dbstorage/README.md | 3 +-
extension/storage/dbstorage/config_test.go | 4 -
extension/storage/dbstorage/doc.go | 5 +
extension/storage/dbstorage/extension_test.go | 6 +-
.../dbstorage/generated_component_test.go | 30 +
extension/storage/dbstorage/go.mod | 61 +
extension/storage/dbstorage/go.sum | 284 +
.../internal/metadata/generated_status.go | 15 +-
extension/storage/dbstorage/metadata.yaml | 7 +-
extension/storage/dbstorage/package_test.go | 14 +
extension/storage/filestorage/Makefile | 1 +
extension/storage/filestorage/README.md | 9 +-
extension/storage/filestorage/client.go | 10 +-
.../storage/filestorage/default_others.go | 1 -
.../storage/filestorage/default_windows.go | 1 -
extension/storage/filestorage/doc.go | 5 +
extension/storage/filestorage/extension.go | 4 +-
.../storage/filestorage/extension_test.go | 6 +-
.../filestorage/generated_component_test.go | 42 +
extension/storage/filestorage/go.mod | 54 +
extension/storage/filestorage/go.sum | 135 +
.../internal/metadata/generated_status.go | 15 +-
extension/storage/filestorage/metadata.yaml | 4 +-
extension/storage/filestorage/package_test.go | 14 +
extension/storage/go.mod | 61 +-
extension/storage/go.sum | 282 +-
extension/storage/package_test.go | 14 +
extension/storage/storagetest/extension.go | 4 +-
.../storage/storagetest/extension_test.go | 4 +-
extension/storage/storagetest/package_test.go | 14 +
extension/sumologicextension/.gitignore | 1 +
extension/sumologicextension/Makefile | 1 +
extension/sumologicextension/README.md | 163 +
extension/sumologicextension/api/error.go | 14 +
extension/sumologicextension/api/metadata.go | 26 +
extension/sumologicextension/api/register.go | 22 +
extension/sumologicextension/config.go | 99 +
.../credentials/credentialsstore_localfs.go | 257 +
.../credentialsstore_localfs_test.go | 87 +
.../sumologicextension/credentials/encrypt.go | 124 +
.../sumologicextension/credentials/store.go | 43 +
extension/sumologicextension/extension.go | 1052 +
.../extension_darwin_test.go | 13 +
.../sumologicextension/extension_test.go | 1574 +
extension/sumologicextension/factory.go | 61 +
extension/sumologicextension/factory_test.go | 68 +
extension/sumologicextension/go.mod | 74 +
extension/sumologicextension/go.sum | 199 +
extension/sumologicextension/headers.go | 11 +
.../internal/metadata/generated_status.go | 25 +
extension/sumologicextension/metadata.yaml | 15 +
.../sumologicextension/testdata/config.yaml | 28 +
go.mod | 994 +-
go.sum | 1294 +-
internal/aws/awsutil/conn_test.go | 8 +-
internal/aws/awsutil/go.mod | 13 +-
internal/aws/awsutil/go.sum | 28 +-
internal/aws/awsutil/package_test.go | 14 +
internal/aws/containerinsight/const.go | 2 +-
internal/aws/containerinsight/go.mod | 19 +-
internal/aws/containerinsight/go.sum | 42 +-
internal/aws/containerinsight/package_test.go | 14 +
internal/aws/containerinsight/utils.go | 18 +-
internal/aws/cwlogs/cwlog_client_test.go | 5 +-
internal/aws/cwlogs/go.mod | 41 +-
internal/aws/cwlogs/go.sum | 92 +-
internal/aws/cwlogs/handler/package_test.go | 14 +
internal/aws/cwlogs/package_test.go | 14 +
internal/aws/cwlogs/pusher_test.go | 12 +-
internal/aws/ecsutil/client.go | 11 +-
internal/aws/ecsutil/client_test.go | 5 +-
.../aws/ecsutil/endpoints/package_test.go | 14 +
internal/aws/ecsutil/go.mod | 72 +-
internal/aws/ecsutil/go.sum | 148 +-
internal/aws/ecsutil/metadata_provider.go | 2 +-
.../aws/ecsutil/metadata_provider_test.go | 2 +-
internal/aws/ecsutil/package_test.go | 14 +
internal/aws/ecsutil/rest_client.go | 2 +-
internal/aws/ecsutil/rest_client_test.go | 4 +-
internal/aws/k8s/go.mod | 49 +-
internal/aws/k8s/go.sum | 123 +-
internal/aws/k8s/k8sclient/clientset.go | 20 +-
internal/aws/k8s/k8sclient/endpoint_test.go | 3 +-
internal/aws/k8s/k8sclient/job_test.go | 2 +-
internal/aws/k8s/k8sclient/node_test.go | 2 +-
internal/aws/k8s/k8sclient/obj_store_test.go | 16 +-
internal/aws/k8s/k8sclient/package_test.go | 14 +
internal/aws/k8s/k8sclient/pod_test.go | 2 +-
internal/aws/k8s/k8sclient/replicaset_test.go | 2 +-
internal/aws/k8s/k8sutil/package_test.go | 14 +
internal/aws/metrics/go.mod | 7 +-
internal/aws/metrics/go.sum | 11 +-
internal/aws/metrics/metric_calculator.go | 3 +-
internal/aws/metrics/package_test.go | 14 +
internal/aws/proxy/cfg.go | 16 +-
internal/aws/proxy/go.mod | 24 +-
internal/aws/proxy/go.sum | 61 +-
internal/aws/proxy/server.go | 14 +-
internal/aws/proxy/server_test.go | 21 +-
internal/aws/xray/go.mod | 43 +-
internal/aws/xray/go.sum | 93 +-
internal/aws/xray/telemetry/registry_test.go | 6 +-
.../telemetrytest/nop_registry_test.go | 8 +-
.../telemetry/telemetrytest/package_test.go | 14 +
internal/aws/xray/testdata/sampleapp/go.mod | 18 +-
internal/aws/xray/testdata/sampleapp/go.sum | 52 +-
.../aws/xray/testdata/sampleserver/go.mod | 16 +-
.../aws/xray/testdata/sampleserver/go.sum | 48 +-
.../aws/xray/testdata/sampleserver/sample.go | 2 +-
internal/buildscripts/modules | 9 +-
.../buildscripts/packaging/fpm/Dockerfile | 2 +-
internal/buildscripts/packaging/fpm/common.sh | 14 +-
.../packaging/fpm/deb/Dockerfile.test | 12 +-
.../packaging/fpm/rpm/Dockerfile.test | 13 +-
internal/buildscripts/packaging/fpm/test.sh | 34 +-
internal/buildscripts/update-dep | 30 -
internal/collectd/go.mod | 2 +-
internal/common/docker/package_test.go | 14 +
internal/common/go.mod | 9 +-
internal/common/go.sum | 19 +-
internal/common/localhostgate/featuregate.go | 68 +
.../common/localhostgate/featuregate_test.go | 56 +
internal/common/maps/package_test.go | 14 +
internal/common/sanitize/package_test.go | 14 +
internal/common/testutil/package_test.go | 14 +
internal/common/testutil/testutil.go | 12 +
internal/components/components.go | 38 +-
.../coreinternal/attraction/attraction.go | 16 +-
.../attraction/attraction_test.go | 41 +-
internal/coreinternal/attraction/hasher.go | 39 -
.../coreinternal/attraction/package_test.go | 14 +
.../consumerretry/package_test.go | 14 +
internal/coreinternal/go.mod | 94 +-
internal/coreinternal/go.sum | 193 +-
.../goldendataset/package_test.go | 14 +
.../goldendataset/resource_generator_test.go | 4 +-
.../goldendataset/traces_generator_test.go | 2 +-
internal/coreinternal/idutils/package_test.go | 14 +
.../metricstestutil/package_test.go | 14 +
internal/coreinternal/parseutils/csv.go | 85 +
internal/coreinternal/parseutils/csv_test.go | 175 +
internal/coreinternal/parseutils/doc.go | 4 +
.../coreinternal/parseutils/package_test.go | 14 +
internal/coreinternal/parseutils/parser.go | 73 +
.../coreinternal/parseutils/parser_test.go | 276 +
.../coreinternal/scraperinttest/scraperint.go | 35 -
.../coreinternal/textutils/package_test.go | 14 +
.../timeutils/internal/ctimefmt/ctimefmt.go | 2 +-
.../internal/ctimefmt/ctimefmt_test.go | 22 +
.../internal/ctimefmt/package_test.go | 14 +
.../coreinternal/timeutils/package_test.go | 14 +
.../coreinternal/traceutil/package_test.go | 14 +
internal/datadog/agent.go | 23 +-
internal/datadog/agent_test.go | 36 +-
internal/datadog/go.mod | 75 +-
internal/datadog/go.sum | 180 +-
internal/datadog/metadata.yaml | 3 +-
internal/datadog/metrics_client.go | 160 +
internal/datadog/metrics_client_test.go | 229 +
internal/docker/config.go | 71 +-
internal/docker/config_test.go | 80 +
internal/docker/docker.go | 29 +-
internal/docker/docker_test.go | 17 +-
internal/docker/go.mod | 26 +-
internal/docker/go.sum | 71 +-
internal/docker/matcher_test.go | 2 +-
internal/docker/package_test.go | 14 +
internal/exp/metrics/Makefile | 1 +
internal/exp/metrics/go.mod | 30 +
.../exp/metrics}/go.sum | 75 +-
internal/exp/metrics/identity/doc.go | 8 +
internal/exp/metrics/identity/metric.go | 71 +
internal/exp/metrics/identity/resource.go | 31 +
internal/exp/metrics/identity/scope.go | 43 +
internal/exp/metrics/identity/stream.go | 35 +
internal/exp/metrics/identity/strings.go | 24 +
internal/exp/metrics/metadata.yaml | 3 +
.../exp/metrics/staleness/priority_queue.go | 111 +
.../metrics/staleness/priority_queue_test.go | 116 +
internal/exp/metrics/staleness/staleness.go | 95 +
.../exp/metrics/staleness/staleness_test.go | 94 +
internal/exp/metrics/streams/streams.go | 58 +
internal/filter/filterconfig/config.go | 3 +-
internal/filter/filterconfig/package_test.go | 14 +
internal/filter/filterexpr/matcher.go | 4 +-
internal/filter/filterexpr/matcher_test.go | 2 +-
internal/filter/filterexpr/package_test.go | 14 +
internal/filter/filterlog/filterlog_test.go | 4 +-
internal/filter/filterlog/package_test.go | 14 +
.../filtermatcher/filtermatcher_test.go | 2 +-
internal/filter/filtermatcher/package_test.go | 14 +
internal/filter/filtermetric/config_test.go | 3 +-
internal/filter/filtermetric/package_test.go | 14 +
internal/filter/filterottl/filter.go | 74 +-
internal/filter/filterottl/functions.go | 37 +-
internal/filter/filterottl/package_test.go | 14 +
internal/filter/filterset/config_test.go | 5 +-
internal/filter/filterset/package_test.go | 14 +
.../filter/filterset/regexp/config_test.go | 3 +-
.../filter/filterset/regexp/package_test.go | 14 +
.../filterset/regexp/regexpfilterset.go | 35 +-
.../filterset/regexp/regexpfilterset_test.go | 18 +-
.../filter/filterset/strict/package_test.go | 14 +
internal/filter/filterspan/filterspan_test.go | 2 +-
internal/filter/filterspan/package_test.go | 14 +
internal/filter/go.mod | 67 +-
internal/filter/go.sum | 128 +-
internal/k8sconfig/go.mod | 31 +-
internal/k8sconfig/go.sum | 78 +-
internal/k8stest/client.go | 46 +
internal/k8stest/go.mod | 56 +-
internal/k8stest/go.sum | 144 +-
internal/k8stest/k8s_collector.go | 65 +-
internal/k8stest/k8s_objects.go | 43 +-
internal/k8stest/k8s_telemetrygen.go | 30 +-
internal/kafka/authentication.go | 10 +-
internal/kafka/authentication_test.go | 8 +-
internal/kafka/awsmsk/package_test.go | 14 +
internal/kafka/go.mod | 25 +-
internal/kafka/go.sum | 70 +-
internal/kafka/package_test.go | 14 +
internal/kubelet/client.go | 20 +-
internal/kubelet/client_config.go | 4 +-
internal/kubelet/client_test.go | 7 +-
internal/kubelet/go.mod | 58 +-
internal/kubelet/go.sum | 142 +-
internal/kubelet/package_test.go | 14 +
.../metadataproviders/azure/metadata_test.go | 4 +-
.../metadataproviders/consul/package_test.go | 14 +
.../metadataproviders/docker/metadata_test.go | 2 +-
.../metadataproviders/docker/package_test.go | 14 +
internal/metadataproviders/go.mod | 75 +-
internal/metadataproviders/go.sum | 180 +-
.../internal/package_test.go | 14 +
.../metadataproviders/k8snode/package_test.go | 14 +
.../openshift/metadata_test.go | 16 +-
.../openshift/package_test.go | 14 +
internal/metadataproviders/system/metadata.go | 57 +
.../metadataproviders/system/metadata_test.go | 12 +-
.../metadataproviders/system/package_test.go | 14 +
internal/sharedcomponent/go.mod | 48 +-
internal/sharedcomponent/go.sum | 99 +-
internal/sharedcomponent/package_test.go | 14 +
.../sharedcomponent/sharedcomponent_test.go | 6 +-
internal/splunk/go.mod | 51 +-
internal/splunk/go.sum | 218 +-
internal/splunk/package_test.go | 14 +
internal/sqlquery/Makefile | 1 +
internal/sqlquery/config.go | 177 +
internal/sqlquery/db_client.go | 93 +
.../sqlquery}/db_client_test.go | 71 +-
.../sqlquery}/db_wrappers.go | 14 +-
internal/sqlquery/go.mod | 112 +
internal/sqlquery/go.sum | 341 +
internal/sqlquery/metadata.yaml | 3 +
.../sqlquery}/metrics.go | 6 +-
.../sqlquery}/metrics_test.go | 2 +-
.../sqlquery}/row_scanner.go | 6 +-
internal/sqlquery/scraper.go | 106 +
.../sqlquery}/scraper_test.go | 160 +-
internal/tools/go.mod | 220 +-
internal/tools/go.sum | 559 +-
internal/tools/package_test.go | 14 +
internal/tools/tools.go | 4 +-
override/aws/imdsretryer.go | 5 +-
.../batchperresourceattr.go | 68 +-
.../batchperresourceattr_test.go | 106 +-
pkg/batchperresourceattr/go.mod | 19 +-
pkg/batchperresourceattr/go.sum | 44 +-
pkg/batchperresourceattr/package_test.go | 14 +
pkg/batchpersignal/go.mod | 17 +-
pkg/batchpersignal/go.sum | 36 +-
pkg/batchpersignal/package_test.go | 14 +
pkg/experimentalmetricmetadata/go.mod | 17 +-
pkg/experimentalmetricmetadata/go.sum | 36 +-
.../package_test.go | 14 +
pkg/golden/README.md | 6 +-
pkg/golden/go.mod | 21 +-
pkg/golden/go.sum | 41 +-
pkg/golden/golden.go | 23 +-
pkg/golden/golden_test.go | 23 +
pkg/golden/metrics_options.go | 18 +
pkg/golden/package_test.go | 14 +
.../skip-timestamp-norm/expected.yaml | 66 +
pkg/ottl/CONTRIBUTING.md | 2 +-
pkg/ottl/LANGUAGE.md | 298 +
pkg/ottl/README.md | 306 +-
pkg/ottl/boolean_value_test.go | 34 +-
pkg/ottl/compare.go | 85 +-
pkg/ottl/compare_test.go | 36 +-
pkg/ottl/config.go | 46 +
pkg/ottl/contexts/internal/errors.go | 22 +
pkg/ottl/contexts/internal/map.go | 33 +-
pkg/ottl/contexts/internal/map_test.go | 191 +-
pkg/ottl/contexts/internal/metric.go | 45 +-
pkg/ottl/contexts/internal/metric_test.go | 50 +-
pkg/ottl/contexts/internal/package_test.go | 14 +
pkg/ottl/contexts/internal/path.go | 52 +
pkg/ottl/contexts/internal/resource.go | 34 +-
pkg/ottl/contexts/internal/resource_test.go | 202 +-
pkg/ottl/contexts/internal/scope.go | 40 +-
pkg/ottl/contexts/internal/scope_test.go | 214 +-
pkg/ottl/contexts/internal/slice.go | 29 +-
pkg/ottl/contexts/internal/slice_test.go | 85 +-
pkg/ottl/contexts/internal/span.go | 225 +-
pkg/ottl/contexts/internal/span_test.go | 368 +-
pkg/ottl/contexts/internal/value.go | 68 +-
pkg/ottl/contexts/internal/value_test.go | 7 +-
pkg/ottl/contexts/ottldatapoint/README.md | 6 +-
pkg/ottl/contexts/ottldatapoint/datapoint.go | 221 +-
.../contexts/ottldatapoint/datapoint_test.go | 1166 +-
.../contexts/ottldatapoint/package_test.go | 14 +
pkg/ottl/contexts/ottllog/log.go | 191 +-
pkg/ottl/contexts/ottllog/log_test.go | 459 +-
pkg/ottl/contexts/ottllog/package_test.go | 14 +
pkg/ottl/contexts/ottlmetric/metrics.go | 63 +-
pkg/ottl/contexts/ottlmetric/metrics_test.go | 88 +-
pkg/ottl/contexts/ottlmetric/package_test.go | 14 +
.../contexts/ottlresource/package_test.go | 14 +
pkg/ottl/contexts/ottlresource/resource.go | 59 +-
.../contexts/ottlresource/resource_test.go | 268 +-
pkg/ottl/contexts/ottlscope/package_test.go | 14 +
pkg/ottl/contexts/ottlscope/scope.go | 61 +-
pkg/ottl/contexts/ottlscope/scope_test.go | 292 +-
pkg/ottl/contexts/ottlspan/README.md | 1 -
pkg/ottl/contexts/ottlspan/package_test.go | 14 +
pkg/ottl/contexts/ottlspan/span.go | 63 +-
pkg/ottl/contexts/ottlspan/span_test.go | 535 +-
.../contexts/ottlspanevent/package_test.go | 14 +
.../contexts/ottlspanevent/span_events.go | 100 +-
.../ottlspanevent/span_events_test.go | 312 +-
pkg/ottl/e2e/e2e_test.go | 801 +
pkg/ottl/e2e/package_test.go | 14 +
pkg/ottl/expression.go | 17 +-
pkg/ottl/expression_test.go | 242 +-
pkg/ottl/functions.go | 193 +-
pkg/ottl/functions_test.go | 400 +-
pkg/ottl/go.mod | 60 +-
pkg/ottl/go.sum | 114 +-
pkg/ottl/grammar.go | 98 +-
pkg/ottl/lexer_test.go | 9 +
pkg/ottl/math.go | 16 +-
pkg/ottl/math_test.go | 88 +-
pkg/ottl/ottlfuncs/README.md | 408 +-
pkg/ottl/ottlfuncs/func_base64decode.go | 45 +
pkg/ottl/ottlfuncs/func_base64decode_test.go | 92 +
pkg/ottl/ottlfuncs/func_concat_test.go | 42 +-
pkg/ottl/ottlfuncs/func_convert_case_test.go | 36 +-
pkg/ottl/ottlfuncs/func_delete_key_test.go | 8 +-
.../func_delete_matching_keys_test.go | 10 +-
pkg/ottl/ottlfuncs/func_duration_test.go | 32 +-
.../ottlfuncs/func_extract_patterns_test.go | 14 +-
pkg/ottl/ottlfuncs/func_flatten.go | 81 +
pkg/ottl/ottlfuncs/func_flatten_test.go | 189 +
pkg/ottl/ottlfuncs/func_hour.go | 38 +
pkg/ottl/ottlfuncs/func_hour_test.go | 54 +
pkg/ottl/ottlfuncs/func_hours_test.go | 8 +-
pkg/ottl/ottlfuncs/func_is_double.go | 45 +
pkg/ottl/ottlfuncs/func_is_double_test.go | 84 +
pkg/ottl/ottlfuncs/func_is_int.go | 45 +
pkg/ottl/ottlfuncs/func_is_int_test.go | 89 +
pkg/ottl/ottlfuncs/func_is_match_test.go | 20 +-
pkg/ottl/ottlfuncs/func_keep_keys.go | 2 +-
pkg/ottl/ottlfuncs/func_keep_keys_test.go | 12 +-
pkg/ottl/ottlfuncs/func_len_test.go | 2 +-
pkg/ottl/ottlfuncs/func_limit.go | 2 +-
pkg/ottl/ottlfuncs/func_limit_test.go | 6 +-
pkg/ottl/ottlfuncs/func_merge_maps_test.go | 22 +-
pkg/ottl/ottlfuncs/func_microseconds_test.go | 8 +-
pkg/ottl/ottlfuncs/func_milliseconds_test.go | 8 +-
pkg/ottl/ottlfuncs/func_minutes_test.go | 8 +-
pkg/ottl/ottlfuncs/func_nanoseconds_test.go | 8 +-
pkg/ottl/ottlfuncs/func_now.go | 2 +-
pkg/ottl/ottlfuncs/func_parse_csv.go | 145 +
pkg/ottl/ottlfuncs/func_parse_csv_test.go | 560 +
pkg/ottl/ottlfuncs/func_parse_json_test.go | 22 +-
pkg/ottl/ottlfuncs/func_parse_key_value.go | 81 +
.../ottlfuncs/func_parse_key_value_test.go | 376 +
pkg/ottl/ottlfuncs/func_parse_xml.go | 134 +
pkg/ottl/ottlfuncs/func_parse_xml_test.go | 309 +
.../ottlfuncs/func_replace_all_matches.go | 20 +-
.../func_replace_all_matches_test.go | 57 +-
.../ottlfuncs/func_replace_all_patterns.go | 66 +-
.../func_replace_all_patterns_test.go | 295 +-
pkg/ottl/ottlfuncs/func_replace_match.go | 18 +-
pkg/ottl/ottlfuncs/func_replace_match_test.go | 65 +-
pkg/ottl/ottlfuncs/func_replace_pattern.go | 118 +-
.../ottlfuncs/func_replace_pattern_test.go | 216 +-
pkg/ottl/ottlfuncs/func_seconds_test.go | 10 +-
pkg/ottl/ottlfuncs/func_set_test.go | 10 +-
pkg/ottl/ottlfuncs/func_split_test.go | 10 +-
pkg/ottl/ottlfuncs/func_string.go | 42 +
pkg/ottl/ottlfuncs/func_string_test.go | 99 +
pkg/ottl/ottlfuncs/func_substring_test.go | 16 +-
pkg/ottl/ottlfuncs/func_time_test.go | 32 +-
pkg/ottl/ottlfuncs/func_truncate_all.go | 2 +-
pkg/ottl/ottlfuncs/func_truncate_all_test.go | 6 +-
pkg/ottl/ottlfuncs/func_truncate_time_test.go | 32 +-
pkg/ottl/ottlfuncs/func_unix.go | 50 +
pkg/ottl/ottlfuncs/func_unix_micro_test.go | 8 +-
pkg/ottl/ottlfuncs/func_unix_milli_test.go | 8 +-
pkg/ottl/ottlfuncs/func_unix_nano_test.go | 8 +-
pkg/ottl/ottlfuncs/func_unix_seconds_test.go | 8 +-
pkg/ottl/ottlfuncs/func_unix_test.go | 44 +
pkg/ottl/ottlfuncs/func_uuid.go | 2 +-
pkg/ottl/ottlfuncs/functions.go | 10 +
pkg/ottl/ottlfuncs/package_test.go | 14 +
pkg/ottl/ottltest/package_test.go | 14 +
pkg/ottl/package_test.go | 14 +
pkg/ottl/parser.go | 235 +-
pkg/ottl/parser_test.go | 674 +-
pkg/pdatatest/go.mod | 23 +-
pkg/pdatatest/go.sum | 41 +-
pkg/pdatatest/plogtest/package_test.go | 14 +
pkg/pdatatest/pmetrictest/package_test.go | 14 +
pkg/pdatatest/ptracetest/package_test.go | 14 +
.../ignore-attribute-value/actual.yaml | 2 +-
.../ignore-attribute-value/expected.yaml | 2 +-
.../testdata/ignore-end-timestamp/actual.yaml | 2 -
.../ignore-end-timestamp/expected.yaml | 1 +
.../testdata/ignore-spanid/actual.yaml | 2 -
.../testdata/ignore-spanid/expected.yaml | 1 +
.../ignore-start-timestamp/actual.yaml | 2 -
.../ignore-start-timestamp/expected.yaml | 1 +
.../testdata/ignore-traceid/actual.yaml | 2 -
.../testdata/ignore-traceid/expected.yaml | 1 +
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 1 +
.../expected.yaml | 1 -
.../actual.yaml | 1 +
.../expected.yaml | 1 -
.../actual.yaml | 1 +
.../expected.yaml | 1 -
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 2 -
.../expected.yaml | 2 +
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 10 -
.../expected.yaml | 10 +
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 3 +-
.../expected.yaml | 3 +-
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
.../actual.yaml | 2 +-
.../expected.yaml | 2 +-
pkg/pdatatest/ptracetest/traces.go | 6 +-
pkg/pdatautil/go.mod | 19 +-
pkg/pdatautil/go.sum | 40 +-
pkg/pdatautil/hash.go | 2 +-
pkg/pdatautil/package_test.go | 14 +
pkg/resourcetotelemetry/go.mod | 43 +-
pkg/resourcetotelemetry/go.sum | 106 +-
pkg/resourcetotelemetry/package_test.go | 14 +
.../resource_to_telemetry.go | 5 +-
.../resource_to_telemetry_test.go | 103 +-
pkg/sampling/Makefile | 1 +
pkg/sampling/README.md | 23 +
pkg/sampling/common.go | 125 +
pkg/sampling/doc.go | 94 +
pkg/sampling/encoding_test.go | 302 +
pkg/sampling/go.mod | 24 +
pkg/sampling/go.sum | 75 +
pkg/sampling/metadata.yaml | 4 +
pkg/sampling/oteltracestate.go | 246 +
pkg/sampling/oteltracestate_test.go | 344 +
pkg/sampling/probability.go | 82 +
pkg/sampling/probability_test.go | 292 +
pkg/sampling/randomness.go | 116 +
pkg/sampling/randomness_test.go | 51 +
pkg/sampling/threshold.go | 156 +
pkg/sampling/threshold_test.go | 87 +
pkg/sampling/w3ctracestate.go | 177 +
pkg/sampling/w3ctracestate_test.go | 161 +
pkg/stanza/adapter/benchmark_test.go | 10 +-
pkg/stanza/adapter/converter.go | 20 +-
pkg/stanza/adapter/converter_test.go | 111 +
pkg/stanza/adapter/factory.go | 2 +-
pkg/stanza/adapter/integration_test.go | 44 +-
pkg/stanza/adapter/mocks_test.go | 4 +-
pkg/stanza/adapter/package_test.go | 14 +
pkg/stanza/adapter/receiver_test.go | 4 +-
pkg/stanza/adapter/register.go | 2 +
pkg/stanza/adapter/storage_test.go | 3 +-
pkg/stanza/attrs/attrs.go | 11 -
pkg/stanza/docs/operators/README.md | 2 +
pkg/stanza/docs/operators/add.md | 6 +-
pkg/stanza/docs/operators/assign_keys.md | 99 +
pkg/stanza/docs/operators/file_input.md | 2 +
pkg/stanza/docs/operators/journald_input.md | 1 +
.../docs/operators/json_array_parser.md | 170 +
pkg/stanza/docs/operators/recombine.md | 2 +-
pkg/stanza/docs/operators/regex_parser.md | 2 +-
pkg/stanza/docs/operators/syslog_parser.md | 1 +
pkg/stanza/docs/types/expression.md | 2 +-
pkg/stanza/docs/types/timestamp.md | 86 +-
pkg/stanza/entry/package_test.go | 14 +
pkg/stanza/errors/error_test.go | 4 +-
pkg/stanza/errors/package_test.go | 14 +
pkg/stanza/fileconsumer/attrs/attrs.go | 72 +
pkg/stanza/fileconsumer/attrs/attrs_test.go | 92 +
pkg/stanza/fileconsumer/attrs/owner_other.go | 37 +
.../fileconsumer/attrs/owner_windows.go | 15 +
pkg/stanza/fileconsumer/benchmark_test.go | 111 +-
pkg/stanza/fileconsumer/config.go | 218 +-
pkg/stanza/fileconsumer/config_test.go | 87 +-
pkg/stanza/fileconsumer/design.md | 135 +-
pkg/stanza/fileconsumer/file.go | 100 +-
pkg/stanza/fileconsumer/file_other.go | 19 +-
pkg/stanza/fileconsumer/file_test.go | 1064 +-
pkg/stanza/fileconsumer/file_windows.go | 7 +-
.../internal/checkpoint/checkpoint.go | 3 +
.../internal/checkpoint/checkpoint_test.go | 26 +-
.../internal/checkpoint/package_test.go | 14 +
.../fileconsumer/internal/emittest/nop.go | 12 +
.../internal/emittest/nop_test.go | 15 +
.../internal/emittest/package_test.go | 14 +
.../fileconsumer/internal/emittest/sink.go | 155 +
.../internal/emittest/sink_test.go | 209 +
.../fileconsumer/internal/fileset/fileset.go | 76 +
.../internal/fileset/fileset_test.go | 110 +
.../internal/filetest/filetest.go | 49 +
.../internal/filetest/package_test.go | 14 +
.../internal/fingerprint/fingerprint.go | 60 +-
.../internal/fingerprint/fingerprint_test.go | 67 +-
.../internal/fingerprint/package_test.go | 14 +
.../internal/header/package_test.go | 14 +
.../fileconsumer/internal/reader/factory.go | 122 +-
.../internal/reader/factory_test.go | 158 +
.../internal/reader/fingerprint_test.go | 349 +
.../internal/reader/package_test.go | 14 +
.../fileconsumer/internal/reader/reader.go | 195 +-
.../internal/reader/reader_test.go | 185 +
.../reader/split_test.go} | 76 +-
.../internal/reader/validate_test.go | 142 +
.../internal/scanner/package_test.go | 14 +
.../fileconsumer/internal/tracker/tracker.go | 106 +
.../internal/tracker/tracker_other.go | 21 +
.../internal/tracker/tracker_windows.go | 20 +
.../internal/trie/package_test.go | 14 +
.../internal/util/package_test.go | 14 +
.../matcher/internal/filter/package_test.go | 14 +
.../matcher/internal/finder/package_test.go | 14 +
.../fileconsumer/matcher/matcher_test.go | 35 +-
.../fileconsumer/matcher/package_test.go | 14 +
pkg/stanza/fileconsumer/package_test.go | 14 +
pkg/stanza/fileconsumer/rotation_test.go | 385 +-
pkg/stanza/fileconsumer/util_test.go | 235 +-
pkg/stanza/flush/package_test.go | 14 +
pkg/stanza/go.mod | 82 +-
pkg/stanza/go.sum | 259 +-
pkg/stanza/operator/config.go | 2 +-
pkg/stanza/operator/helper/expr_string.go | 6 +-
pkg/stanza/operator/helper/input.go | 4 +-
.../operator/helper/ip_resolver_test.go | 2 +
pkg/stanza/operator/helper/package_test.go | 14 +
pkg/stanza/operator/helper/time.go | 4 +-
pkg/stanza/operator/helper/transformer.go | 4 +-
.../operator/helper/transformer_test.go | 6 +-
pkg/stanza/operator/helper/writer.go | 4 +-
pkg/stanza/operator/input/file/config_test.go | 10 +-
.../operator/input/file/{file.go => input.go} | 16 +-
.../file/{file_test.go => input_test.go} | 6 +
.../operator/input/file/package_test.go | 14 +
pkg/stanza/operator/input/generate/config.go | 50 +
.../input/generate/{generate.go => input.go} | 64 +-
.../{generate_test.go => input_test.go} | 0
.../operator/input/generate/package_test.go | 14 +
.../operator/input/journald/config_all.go | 42 +
.../operator/input/journald/config_linux.go | 152 +
.../input/journald/config_nonlinux.go | 18 +
.../input/journald/{journald.go => input.go} | 167 +-
.../{journald_test.go => input_test.go} | 16 +-
.../operator/input/journald/package_test.go | 14 +
.../operator/input/namedpipe/config_all.go | 41 +
.../operator/input/namedpipe/config_linux.go | 52 +
pkg/stanza/operator/input/namedpipe/input.go | 144 +
.../input/namedpipe/input_nonlinux.go | 18 +
.../operator/input/namedpipe/input_test.go | 148 +
.../operator/input/namedpipe/package_test.go | 14 +
.../operator/input/namedpipe/watcher.go | 70 +
pkg/stanza/operator/input/stdin/config.go | 44 +
.../input/stdin/{stdin.go => input.go} | 55 +-
.../stdin/{stdin_test.go => input_test.go} | 0
.../operator/input/stdin/package_test.go | 14 +
.../input/syslog/{syslog.go => config.go} | 75 +-
.../operator/input/syslog/config_test.go | 4 +-
pkg/stanza/operator/input/syslog/input.go | 84 +
.../syslog/{syslog_test.go => input_test.go} | 83 +-
.../operator/input/syslog/package_test.go | 14 +
pkg/stanza/operator/input/tcp/config.go | 149 +
pkg/stanza/operator/input/tcp/config_test.go | 4 +-
pkg/stanza/operator/input/tcp/input.go | 224 +
.../input/tcp/{tcp_test.go => input_test.go} | 8 +-
pkg/stanza/operator/input/tcp/package_test.go | 14 +
pkg/stanza/operator/input/tcp/tcp.go | 354 -
pkg/stanza/operator/input/udp/config.go | 144 +
pkg/stanza/operator/input/udp/input.go | 268 +
.../input/udp/{udp_test.go => input_test.go} | 0
pkg/stanza/operator/input/udp/package_test.go | 14 +
pkg/stanza/operator/input/udp/udp.go | 390 -
pkg/stanza/operator/input/windows/api.go | 24 +-
pkg/stanza/operator/input/windows/api_test.go | 1 -
pkg/stanza/operator/input/windows/bookmark.go | 6 +-
.../operator/input/windows/bookmark_test.go | 1 -
.../operator/input/windows/config_all.go | 38 +
.../operator/input/windows/config_windows.go | 49 +
pkg/stanza/operator/input/windows/event.go | 11 +-
.../operator/input/windows/event_test.go | 1 -
pkg/stanza/operator/input/windows/input.go | 245 +
pkg/stanza/operator/input/windows/operator.go | 311 -
pkg/stanza/operator/input/windows/os_test.go | 1 -
.../operator/input/windows/package_test.go | 14 +
.../operator/input/windows/publisher.go | 1 -
.../operator/input/windows/publisher_test.go | 1 -
.../operator/input/windows/publishercache.go | 1 -
.../input/windows/publishercache_test.go | 13 +-
.../operator/input/windows/subscription.go | 7 +-
.../output/drop/{drop.go => config.go} | 19 +-
pkg/stanza/operator/output/drop/output.go | 21 +
.../drop/{drop_test.go => output_test.go} | 0
.../operator/output/drop/package_test.go | 14 +
.../output/file/{file.go => config.go} | 66 +-
pkg/stanza/operator/output/file/output.go | 71 +
.../output/stdout/{stdout.go => config.go} | 29 +-
pkg/stanza/operator/output/stdout/output.go | 33 +
.../stdout/{stdout_test.go => output_test.go} | 0
.../operator/output/stdout/package_test.go | 14 +
pkg/stanza/operator/package_test.go | 14 +
pkg/stanza/operator/parser/csv/config.go | 99 +
pkg/stanza/operator/parser/csv/csv.go | 251 -
.../operator/parser/csv/package_test.go | 14 +
pkg/stanza/operator/parser/csv/parser.go | 107 +
.../csv/{csv_test.go => parser_test.go} | 0
.../parser/json/{json.go => config.go} | 30 -
.../operator/parser/json/package_test.go | 14 +
pkg/stanza/operator/parser/json/parser.go | 40 +
.../json/{json_test.go => parser_test.go} | 4 +-
.../operator/parser/jsonarray/config.go | 70 +
.../operator/parser/jsonarray/config_test.go | 67 +
.../operator/parser/jsonarray/parser.go | 125 +
.../operator/parser/jsonarray/parser_test.go | 388 +
.../parser/jsonarray/testdata/config.yaml | 18 +
pkg/stanza/operator/parser/keyvalue/config.go | 67 +
.../operator/parser/keyvalue/keyvalue.go | 135 -
.../operator/parser/keyvalue/package_test.go | 14 +
pkg/stanza/operator/parser/keyvalue/parser.go | 48 +
.../{keyvalue_test.go => parser_test.go} | 203 +-
pkg/stanza/operator/parser/regex/cache.go | 24 +-
.../operator/parser/regex/cache_test.go | 8 +
.../parser/regex/{regex.go => config.go} | 56 -
.../operator/parser/regex/package_test.go | 14 +
pkg/stanza/operator/parser/regex/parser.go | 74 +
.../regex/{regex_test.go => parser_test.go} | 7 +
.../parser/scope/{scope_name.go => config.go} | 14 -
.../operator/parser/scope/config_test.go | 4 -
.../operator/parser/scope/package_test.go | 14 +
pkg/stanza/operator/parser/scope/parser.go | 22 +
.../{scope_name_test.go => parser_test.go} | 0
.../severity/{severity.go => config.go} | 14 -
.../operator/parser/severity/config_test.go | 4 -
.../operator/parser/severity/package_test.go | 14 +
pkg/stanza/operator/parser/severity/parser.go | 22 +
.../{severity_test.go => parser_test.go} | 0
pkg/stanza/operator/parser/syslog/config.go | 109 +
pkg/stanza/operator/parser/syslog/data.go | 128 +
.../operator/parser/syslog/package_test.go | 14 +
.../parser/syslog/{syslog.go => parser.go} | 235 +-
.../syslog/{syslog_test.go => parser_test.go} | 0
.../parser/time/{time.go => config.go} | 14 -
.../operator/parser/time/config_test.go | 4 -
.../operator/parser/time/package_test.go | 14 +
pkg/stanza/operator/parser/time/parser.go | 22 +
.../time/{time_test.go => parser_test.go} | 0
.../parser/trace/{trace.go => config.go} | 14 -
.../operator/parser/trace/package_test.go | 14 +
pkg/stanza/operator/parser/trace/parser.go | 22 +
.../trace/{trace_test.go => parser_test.go} | 0
pkg/stanza/operator/parser/uri/config.go | 46 +
.../operator/parser/uri/package_test.go | 14 +
.../operator/parser/uri/{uri.go => parser.go} | 44 +-
.../uri/{uri_test.go => parser_test.go} | 0
.../transformer/add/{add.go => config.go} | 38 -
.../operator/transformer/add/package_test.go | 14 +
.../operator/transformer/add/transformer.go | 51 +
.../add/{add_test.go => transformer_test.go} | 0
.../operator/transformer/assignkeys/config.go | 86 +
.../transformer/assignkeys/config_test.go | 55 +
.../transformer/assignkeys/package_test.go | 14 +
.../assignkeys/testdata/config.yaml | 12 +
.../transformer/assignkeys/transformer.go | 57 +
.../assignkeys/transformer_test.go | 155 +
.../transformer/copy/{copy.go => config.go} | 22 -
.../operator/transformer/copy/package_test.go | 14 +
.../operator/transformer/copy/transformer.go | 33 +
.../{copy_test.go => transformer_test.go} | 0
.../filter/{filter.go => config.go} | 44 -
.../transformer/filter/config_test.go | 57 +
.../transformer/filter/package_test.go | 14 +
.../transformer/filter/testdata/config.yaml | 14 +
.../transformer/filter/transformer.go | 57 +
.../{filter_test.go => transformer_test.go} | 24 +-
.../flatten/{flatten.go => config.go} | 46 -
.../transformer/flatten/package_test.go | 14 +
.../transformer/flatten/transformer.go | 57 +
.../{flatten_test.go => transformer_test.go} | 0
.../transformer/move/{move.go => config.go} | 22 -
.../operator/transformer/move/package_test.go | 14 +
.../operator/transformer/move/transformer.go | 33 +
.../{move_test.go => transformer_test.go} | 0
.../transformer/noop/{noop.go => config.go} | 14 -
.../operator/transformer/noop/config_test.go | 26 +
.../operator/transformer/noop/package_test.go | 14 +
.../operator/transformer/noop/transformer.go | 22 +
.../{noop_test.go => transformer_test.go} | 14 -
.../operator/transformer/recombine/config.go | 130 +
.../transformer/recombine/package_test.go | 14 +
.../transformer/recombine/recombine.go | 384 -
.../transformer/recombine/transformer.go | 236 +
...{recombine_test.go => transformer_test.go} | 120 +-
.../remove/{remove.go => config.go} | 31 -
.../transformer/remove/package_test.go | 14 +
.../transformer/remove/transformer.go | 42 +
.../{remove_test.go => transformer_test.go} | 0
.../retain/{retain.go => config.go} | 46 -
.../transformer/retain/package_test.go | 14 +
.../transformer/retain/transformer.go | 56 +
.../{retain_test.go => transformer_test.go} | 0
.../operator/transformer/router/config.go | 86 +
.../transformer/router/package_test.go | 14 +
.../operator/transformer/router/router.go | 199 -
.../transformer/router/transformer.go | 126 +
.../{router_test.go => transformer_test.go} | 0
.../unquote/{unquote.go => config.go} | 34 -
.../transformer/unquote/package_test.go | 14 +
.../transformer/unquote/transformer.go | 43 +
.../{unquote_test.go => transformer_test.go} | 0
pkg/stanza/pipeline/config.go | 10 +-
pkg/stanza/pipeline/package_test.go | 14 +
pkg/stanza/split/package_test.go | 14 +
pkg/stanza/split/splittest/package_test.go | 14 +
pkg/stanza/split/splittest/splittest.go | 2 +-
pkg/stanza/testutil/mocks.go | 21 +-
pkg/stanza/trim/package_test.go | 14 +
pkg/stanza/trim/trim.go | 3 +
pkg/translator/azure/go.mod | 52 +-
pkg/translator/azure/go.sum | 423 +-
pkg/translator/azure/package_test.go | 14 +
pkg/translator/azure/resourcelogs_to_logs.go | 27 +-
.../azure/resourcelogs_to_logs_test.go | 56 +
.../azure/testdata/log-bad-time.json | 45 +
pkg/translator/jaeger/README.md | 171 +
pkg/translator/jaeger/go.mod | 35 +-
pkg/translator/jaeger/go.sum | 72 +-
.../jaeger/jaegerproto_to_traces_test.go | 3 +-
.../jaeger/jaegerthrift_to_traces.go | 29 +-
pkg/translator/jaeger/package_test.go | 14 +
.../jaeger/traces_to_jaegerproto.go | 30 +-
.../jaeger/traces_to_jaegerproto_test.go | 2 +-
pkg/translator/loki/convert.go | 2 +-
pkg/translator/loki/go.mod | 47 +-
pkg/translator/loki/go.sum | 152 +-
pkg/translator/loki/package_test.go | 14 +
pkg/translator/opencensus/go.mod | 31 +-
pkg/translator/opencensus/go.sum | 57 +-
pkg/translator/opencensus/metrics_to_oc.go | 2 +-
.../opencensus/oc_to_resource_test.go | 2 +-
pkg/translator/opencensus/package_test.go | 14 +
pkg/translator/prometheus/go.mod | 21 +-
pkg/translator/prometheus/go.sum | 40 +-
pkg/translator/prometheus/package_test.go | 14 +
pkg/translator/prometheusremotewrite/go.mod | 32 +-
pkg/translator/prometheusremotewrite/go.sum | 63 +-
.../prometheusremotewrite/helper.go | 139 +-
.../prometheusremotewrite/helper_test.go | 125 +-
.../prometheusremotewrite/histograms.go | 17 +-
.../prometheusremotewrite/histograms_test.go | 6 +-
.../prometheusremotewrite/metrics_to_prw.go | 16 +-
.../number_data_points.go | 34 +-
.../number_data_points_test.go | 18 +-
.../otlp_to_openmetrics_metadata.go | 64 +
.../otlp_to_openmetrics_metadata_test.go | 226 +
.../prometheusremotewrite/package_test.go | 14 +
pkg/translator/signalfx/from_metrics.go | 10 +-
pkg/translator/signalfx/from_metrics_test.go | 41 +-
pkg/translator/signalfx/go.mod | 25 +-
pkg/translator/signalfx/go.sum | 41 +-
pkg/translator/signalfx/package_test.go | 14 +
pkg/translator/skywalking/go.mod | 23 +-
pkg/translator/skywalking/go.sum | 59 +-
pkg/translator/skywalking/package_test.go | 14 +
.../skywalking/skywalkingproto_to_traces.go | 5 +-
.../skywalkingproto_to_traces_test.go | 4 +-
pkg/translator/zipkin/go.mod | 37 +-
pkg/translator/zipkin/go.sum | 74 +-
.../zipkin/zipkinv1/package_test.go | 14 +
.../zipkin/zipkinv2/package_test.go | 14 +
pkg/winperfcounters/go.mod | 7 +-
pkg/winperfcounters/go.sum | 10 +-
.../telegraf/win_perf_counters/kernel32.go | 1 -
.../telegraf/win_perf_counters/pdh.go | 1 -
.../telegraf/win_perf_counters/pdh_386.go | 1 -
.../telegraf/win_perf_counters/pdh_amd64.go | 1 -
.../win_perf_counters/performance_query.go | 1 -
.../performance_query_test.go | 1 -
.../win_perf_counters_notwindows.go | 1 -
pkg/winperfcounters/package_test.go | 14 +
pkg/winperfcounters/watcher.go | 6 +-
pkg/winperfcounters/watcher_test.go | 1 -
.../win_perf_counters_notwindows.go | 1 -
processor/attributesprocessor/README.md | 16 +-
.../attributes_log_test.go | 10 +-
.../attributes_metric_test.go | 10 +-
.../attributes_trace_test.go | 12 +-
processor/attributesprocessor/factory_test.go | 15 +-
.../generated_component_test.go | 141 +
processor/attributesprocessor/go.mod | 79 +-
processor/attributesprocessor/go.sum | 229 +-
.../internal/metadata/generated_status.go | 15 +-
processor/attributesprocessor/metadata.yaml | 13 +-
processor/attributesprocessor/package_test.go | 14 +
.../cumulativetodeltaprocessor/README.md | 9 +-
.../factory_test.go | 5 +-
.../generated_component_test.go | 127 +
processor/cumulativetodeltaprocessor/go.mod | 64 +-
processor/cumulativetodeltaprocessor/go.sum | 208 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/tracking/package_test.go | 14 +
.../cumulativetodeltaprocessor/metadata.yaml | 7 +-
.../package_test.go | 14 +
.../processor_test.go | 2 +-
processor/datadogprocessor/README.md | 109 -
processor/datadogprocessor/config.go | 26 -
processor/datadogprocessor/doc.go | 19 -
processor/datadogprocessor/factory.go | 27 -
processor/datadogprocessor/go.mod | 104 -
processor/datadogprocessor/go.sum | 267 -
.../internal/metadata/generated_status.go | 12 -
processor/datadogprocessor/metadata.yaml | 9 -
processor/datadogprocessor/processor.go | 164 -
processor/datadogprocessor/processor_test.go | 386 -
.../Makefile | 0
.../deltatocumulativeprocessor/README.md | 49 +
.../deltatocumulativeprocessor/config.go | 38 +
.../deltatocumulativeprocessor/config_test.go | 65 +
processor/deltatocumulativeprocessor/doc.go | 8 +
.../deltatocumulativeprocessor/factory.go | 33 +
.../generated_component_test.go | 127 +
processor/deltatocumulativeprocessor/go.mod | 61 +
processor/deltatocumulativeprocessor/go.sum | 144 +
.../internal/data/add.go | 29 +
.../internal/data/data.go | 76 +
.../internal/delta/delta.go | 84 +
.../internal/delta/delta_test.go | 215 +
.../internal/maybe/ptr.go | 52 +
.../internal/maybe/ptr_test.go | 64 +
.../internal/metadata/generated_status.go | 25 +
.../internal/metrics/data.go | 59 +
.../internal/metrics/metrics.go | 27 +
.../internal/metrics/util.go | 25 +
.../internal/streams/data.go | 46 +
.../internal/streams/data_test.go | 126 +
.../internal/streams/errors.go | 21 +
.../internal/streams/limit.go | 61 +
.../internal/streams/limit_test.go | 59 +
.../internal/streams/streams.go | 37 +
.../internal/telemetry/faults_test.go | 150 +
.../internal/telemetry/metrics.go | 199 +
.../internal/testdata/random/random.go | 75 +
.../deltatocumulativeprocessor/metadata.yaml | 11 +
.../deltatocumulativeprocessor/processor.go | 137 +
.../testdata/config.yaml | 7 +
processor/deltatorateprocessor/README.md | 5 +-
.../deltatorateprocessor/factory_test.go | 4 +-
.../generated_component_test.go | 127 +
processor/deltatorateprocessor/go.mod | 57 +-
processor/deltatorateprocessor/go.sum | 202 +-
.../internal/metadata/generated_status.go | 15 +-
processor/deltatorateprocessor/metadata.yaml | 7 +-
.../deltatorateprocessor/package_test.go | 14 +
.../deltatorateprocessor/processor_test.go | 2 +-
processor/filterprocessor/README.md | 362 +-
processor/filterprocessor/config_test.go | 68 +-
processor/filterprocessor/factory.go | 6 +-
processor/filterprocessor/factory_test.go | 3 +-
.../generated_component_test.go | 141 +
processor/filterprocessor/go.mod | 77 +-
processor/filterprocessor/go.sum | 229 +-
.../internal/metadata/generated_status.go | 15 +-
processor/filterprocessor/logs.go | 27 +-
processor/filterprocessor/logs_test.go | 23 +-
processor/filterprocessor/metadata.yaml | 7 +-
processor/filterprocessor/metrics.go | 22 +-
processor/filterprocessor/metrics_test.go | 78 +-
processor/filterprocessor/package_test.go | 14 +
processor/filterprocessor/telemetry.go | 88 +
processor/filterprocessor/telemetry_test.go | 134 +
processor/filterprocessor/traces.go | 22 +-
processor/filterprocessor/traces_test.go | 27 +-
processor/groupbyattrsprocessor/README.md | 25 +-
processor/groupbyattrsprocessor/factory.go | 34 +-
.../groupbyattrsprocessor/factory_test.go | 8 +-
.../generated_component_test.go | 141 +
processor/groupbyattrsprocessor/go.mod | 60 +-
processor/groupbyattrsprocessor/go.sum | 205 +-
.../internal/metadata/generated_status.go | 15 +-
processor/groupbyattrsprocessor/metadata.yaml | 7 +-
processor/groupbyattrsprocessor/metrics.go | 184 +-
.../groupbyattrsprocessor/metrics_test.go | 22 -
.../groupbyattrsprocessor/package_test.go | 14 +
processor/groupbyattrsprocessor/processor.go | 24 +-
.../groupbyattrsprocessor/processor_test.go | 35 +-
.../groupbyattrsprocessor/telemetry_test.go | 258 +
processor/groupbytraceprocessor/README.md | 5 +-
processor/groupbytraceprocessor/event_test.go | 36 +-
.../generated_component_test.go | 127 +
processor/groupbytraceprocessor/go.mod | 57 +-
processor/groupbytraceprocessor/go.sum | 128 +-
.../internal/metadata/generated_status.go | 15 +-
processor/groupbytraceprocessor/metadata.yaml | 7 +-
processor/groupbytraceprocessor/metrics.go | 16 +-
.../groupbytraceprocessor/metrics_test.go | 16 +-
.../groupbytraceprocessor/processor_test.go | 6 +-
processor/intervalprocessor/Makefile | 1 +
processor/intervalprocessor/README.md | 34 +
processor/intervalprocessor/config.go | 24 +
processor/intervalprocessor/doc.go | 8 +
processor/intervalprocessor/factory.go | 36 +
.../generated_component_test.go | 127 +
processor/intervalprocessor/go.mod | 54 +
processor/intervalprocessor/go.sum | 142 +
.../internal/metadata/generated_status.go | 25 +
processor/intervalprocessor/metadata.yaml | 13 +
processor/intervalprocessor/processor.go | 56 +
processor/k8sattributesprocessor/README.md | 57 +-
processor/k8sattributesprocessor/config.go | 19 +-
processor/k8sattributesprocessor/e2e_test.go | 731 +-
processor/k8sattributesprocessor/factory.go | 39 +-
.../generated_component_test.go | 141 +
processor/k8sattributesprocessor/go.mod | 128 +-
processor/k8sattributesprocessor/go.sum | 295 +-
.../internal/kube/client.go | 17 +-
.../internal/kube/fake_informer.go | 8 +-
.../internal/kube/kube.go | 1 +
.../internal/metadata/generated_config.go | 6 +-
.../metadata/generated_config_test.go | 2 +
.../internal/metadata/generated_resource.go | 7 +
.../metadata/generated_resource_test.go | 8 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
.../k8sattributesprocessor/metadata.yaml | 10 +-
processor/k8sattributesprocessor/options.go | 5 +
processor/k8sattributesprocessor/processor.go | 50 +-
.../k8sattributesprocessor/processor_test.go | 124 +-
.../clusterrbac/collector/clusterrole.yaml | 14 +
.../collector/clusterrolebinding.yaml | 12 +
.../collector/configmap.yaml | 4 +-
.../e2e/clusterrbac/collector/deployment.yaml | 59 +
.../e2e/clusterrbac/collector/service.yaml | 16 +
.../clusterrbac/collector/serviceaccount.yaml | 5 +
.../testdata/e2e/clusterrbac/namespace.yaml | 6 +
.../telemetrygen/daemonset.yaml | 2 +-
.../clusterrbac/telemetrygen/deployment.yaml | 34 +
.../{ => clusterrbac}/telemetrygen/job.yaml | 2 +-
.../telemetrygen/statefulset.yaml | 2 +-
.../e2e/mixrbac/collector/clusterrole.yaml | 11 +
.../collector/clusterrolebinding.yaml | 2 +-
.../e2e/mixrbac/collector/configmap.yaml | 78 +
.../{ => mixrbac}/collector/deployment.yaml | 4 +-
.../mixrbac/collector/role-workloadns.yaml | 12 +
.../collector/rolebinding-workloadns.yaml | 13 +
.../e2e/{ => mixrbac}/collector/service.yaml | 2 +-
.../collector/serviceaccount.yaml | 2 +-
.../e2e/mixrbac/otelcol-namespace.yaml | 6 +
.../telemetrygen/deployment.yaml | 2 +-
.../e2e/mixrbac/workload-namespace.yaml | 6 +
.../namespacedrbac/collector/configmap.yaml | 82 +
.../namespacedrbac/collector/deployment.yaml | 65 +
.../collector/role.yaml} | 5 +-
.../namespacedrbac/collector/rolebinding.yaml | 13 +
.../e2e/namespacedrbac/collector/service.yaml | 16 +
.../collector/serviceaccount.yaml | 5 +
.../e2e/namespacedrbac/namespace.yaml | 6 +
.../telemetrygen/deployment.yaml | 35 +
processor/logstransformprocessor/README.md | 6 +-
.../generated_component_test.go | 127 +
processor/logstransformprocessor/go.mod | 79 +-
processor/logstransformprocessor/go.sum | 252 +-
.../internal/metadata/generated_status.go | 15 +-
.../logstransformprocessor/metadata.yaml | 11 +-
.../logstransformprocessor/package_test.go | 14 +
processor/logstransformprocessor/processor.go | 143 +-
.../logstransformprocessor/processor_test.go | 86 +
.../metricsgenerationprocessor/README.md | 4 +-
.../factory_test.go | 4 +-
.../generated_component_test.go | 127 +
processor/metricsgenerationprocessor/go.mod | 57 +-
processor/metricsgenerationprocessor/go.sum | 202 +-
.../internal/metadata/generated_status.go | 15 +-
.../metricsgenerationprocessor/metadata.yaml | 8 +-
.../package_test.go | 14 +
.../processor_test.go | 2 +-
processor/metricstransformprocessor/README.md | 6 +-
.../metricstransformprocessor/factory_test.go | 4 +-
.../generated_component_test.go | 127 +
processor/metricstransformprocessor/go.mod | 64 +-
processor/metricstransformprocessor/go.sum | 205 +-
.../internal/metadata/generated_status.go | 15 +-
.../metricstransformprocessor/metadata.yaml | 8 +-
.../operation_aggregate_labels.go | 2 +-
.../metricstransformprocessor/package_test.go | 14 +
.../probabilisticsamplerprocessor/README.md | 7 +-
.../probabilisticsamplerprocessor/config.go | 3 +-
.../fnvhasher.go | 5 +-
.../fnvhasher_test.go | 16 +
.../generated_component_test.go | 134 +
.../probabilisticsamplerprocessor/go.mod | 125 +-
.../probabilisticsamplerprocessor/go.sum | 638 +-
.../internal/metadata/generated_status.go | 15 +-
.../logsprocessor_test.go | 7 -
.../metadata.yaml | 6 +-
.../probabilisticsamplerprocessor/metrics.go | 4 +-
.../package_test.go | 17 +
.../tracesprocessor_test.go | 7 -
processor/redactionprocessor/README.md | 6 +-
.../generated_component_test.go | 127 +
processor/redactionprocessor/go.mod | 57 +-
processor/redactionprocessor/go.sum | 202 +-
.../internal/metadata/generated_status.go | 15 +-
processor/redactionprocessor/metadata.yaml | 9 +-
processor/redactionprocessor/package_test.go | 14 +
processor/remotetapprocessor/README.md | 5 +-
processor/remotetapprocessor/config.go | 10 +-
processor/remotetapprocessor/config_test.go | 2 +-
processor/remotetapprocessor/factory_test.go | 4 +-
.../generated_component_test.go | 141 +
processor/remotetapprocessor/go.mod | 83 +-
processor/remotetapprocessor/go.sum | 245 +-
.../internal/metadata/generated_status.go | 15 +-
processor/remotetapprocessor/metadata.yaml | 7 +-
processor/remotetapprocessor/processor.go | 8 +-
processor/remotetapprocessor/server_test.go | 6 +-
.../resourcedetectionprocessor/README.md | 53 +-
.../resourcedetectionprocessor/config.go | 2 +-
.../resourcedetectionprocessor/config_test.go | 62 +-
.../resourcedetectionprocessor/factory.go | 18 +-
.../generated_component_test.go | 141 +
processor/resourcedetectionprocessor/go.mod | 151 +-
processor/resourcedetectionprocessor/go.sum | 349 +-
.../internal/aws/ec2/ec2.go | 4 +-
.../ec2/internal/metadata/generated_config.go | 2 +-
.../aws/ec2/internal/metadata/package_test.go | 14 +
.../internal/aws/ec2/metadata.yaml | 6 +-
.../internal/aws/ec2/package_test.go | 14 +
.../internal/aws/ecs/ecs.go | 24 +-
.../internal/aws/ecs/ecs_test.go | 83 +-
.../ecs/internal/metadata/generated_config.go | 6 +-
.../metadata/generated_config_test.go | 2 +
.../internal/metadata/generated_resource.go | 7 +
.../metadata/generated_resource_test.go | 10 +-
.../aws/ecs/internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
.../internal/aws/ecs/metadata.yaml | 10 +-
.../internal/aws/ecs/package_test.go | 14 +
.../internal/aws/eks/detector.go | 80 +
.../internal/aws/eks/detector_test.go | 19 +-
.../eks/internal/metadata/generated_config.go | 10 +-
.../metadata/generated_config_test.go | 10 +-
.../internal/metadata/generated_resource.go | 7 +
.../metadata/generated_resource_test.go | 8 +-
.../aws/eks/internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
.../internal/aws/eks/metadata.yaml | 10 +-
.../internal/aws/eks/package_test.go | 14 +
.../elasticbeanstalk/elasticbeanstalk_test.go | 8 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/package_test.go | 14 +
.../aws/elasticbeanstalk/metadata.yaml | 6 +-
.../aws/elasticbeanstalk/package_test.go | 14 +
.../internal/metadata/generated_config.go | 2 +-
.../lambda/internal/metadata/package_test.go | 14 +
.../internal/aws/lambda/metadata.yaml | 6 +-
.../internal/aws/lambda/package_test.go | 14 +
.../internal/azure/aks/aks.go | 44 +-
.../internal/azure/aks/aks_test.go | 49 +
.../aks/internal/metadata/generated_config.go | 10 +-
.../metadata/generated_config_test.go | 10 +-
.../internal/metadata/generated_resource.go | 7 +
.../metadata/generated_resource_test.go | 8 +-
.../aks/internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
.../internal/azure/aks/metadata.yaml | 6 +-
.../internal/azure/aks/package_test.go | 14 +
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 7 -
.../azure/internal/metadata/package_test.go | 14 +
.../internal/azure/metadata.yaml | 4 +-
.../internal/azure/package_test.go | 14 +
.../internal/metadata/generated_config.go | 36 +-
.../metadata/generated_config_test.go | 26 +-
.../internal/metadata/generated_resource.go | 49 -
.../metadata/generated_resource_test.go | 48 +-
.../consul/internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 28 -
.../internal/consul/metadata.yaml | 28 -
.../internal/consul/package_test.go | 14 +
.../internal/metadata/generated_config.go | 2 +-
.../docker/internal/metadata/package_test.go | 14 +
.../internal/docker/metadata.yaml | 2 +-
.../internal/docker/package_test.go | 14 +
.../internal/env/package_test.go | 14 +
.../gcp/internal/metadata/generated_config.go | 2 +-
.../gcp/internal/metadata/package_test.go | 14 +
.../internal/gcp/package_test.go | 14 +
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 7 -
.../heroku/internal/metadata/package_test.go | 14 +
.../internal/heroku/metadata.yaml | 2 +-
.../internal/heroku/package_test.go | 14 +
.../internal/metadata/generated_config.go | 2 +-
.../k8snode/internal/metadata/package_test.go | 14 +
.../internal/k8snode/k8snode.go | 22 +-
.../internal/k8snode/k8snode_test.go | 24 +
.../internal/k8snode/metadata.yaml | 2 +-
.../internal/k8snode/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/openshift/config.go | 2 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 7 -
.../internal/metadata/package_test.go | 14 +
.../internal/openshift/metadata.yaml | 4 +-
.../internal/openshift/package_test.go | 14 +
.../internal/package_test.go | 14 +
.../internal/resourcedetection.go | 2 +-
.../internal/metadata/generated_config.go | 10 +-
.../metadata/generated_config_test.go | 4 +
.../internal/metadata/generated_resource.go | 18 +-
.../metadata/generated_resource_test.go | 18 +-
.../system/internal/metadata/package_test.go | 14 +
.../internal/metadata/resource_int_version.go | 7 +
.../internal/metadata/testdata/config.yaml | 8 +
.../internal/system/metadata.yaml | 10 +-
.../internal/system/package_test.go | 14 +
.../internal/system/system.go | 70 +-
.../internal/system/system_test.go | 65 +
.../resourcedetectionprocessor/metadata.yaml | 3 +-
.../package_test.go | 14 +
.../resourcedetection_processor.go | 4 +-
.../resourcedetection_processor_test.go | 6 +-
processor/resourceprocessor/README.md | 7 +-
.../generated_component_test.go | 141 +
processor/resourceprocessor/go.mod | 64 +-
processor/resourceprocessor/go.sum | 205 +-
.../internal/metadata/generated_status.go | 15 +-
processor/resourceprocessor/metadata.yaml | 8 +-
processor/resourceprocessor/package_test.go | 14 +
processor/routingprocessor/README.md | 8 +-
processor/routingprocessor/factory_test.go | 8 +-
.../generated_component_test.go | 141 +
processor/routingprocessor/go.mod | 99 +-
processor/routingprocessor/go.sum | 315 +-
.../internal/metadata/generated_status.go | 15 +-
processor/routingprocessor/logs.go | 2 +-
processor/routingprocessor/logs_test.go | 26 +-
processor/routingprocessor/metadata.yaml | 8 +-
processor/routingprocessor/metrics.go | 2 +-
processor/routingprocessor/metrics_test.go | 30 +-
processor/routingprocessor/package_test.go | 14 +
processor/routingprocessor/traces.go | 2 +-
processor/routingprocessor/traces_test.go | 32 +-
processor/schemaprocessor/README.md | 3 +-
processor/schemaprocessor/config.go | 2 +-
processor/schemaprocessor/config_test.go | 2 +-
processor/schemaprocessor/factory.go | 2 +-
.../generated_component_test.go | 141 +
processor/schemaprocessor/go.mod | 77 +-
processor/schemaprocessor/go.sum | 241 +-
.../internal/alias/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/migrate/package_test.go | 14 +
.../schemaprocessor/internal/race/disable.go | 1 -
.../schemaprocessor/internal/race/enable.go | 1 -
.../internal/translation/package_test.go | 14 +
processor/schemaprocessor/metadata.yaml | 8 +-
processor/schemaprocessor/package_test.go | 14 +
processor/servicegraphprocessor/README.md | 174 -
.../servicegraphprocessor/config_test.go | 73 -
processor/servicegraphprocessor/doc.go | 6 -
processor/servicegraphprocessor/factory.go | 98 -
.../servicegraphprocessor/factory_test.go | 99 -
processor/servicegraphprocessor/go.mod | 120 -
processor/servicegraphprocessor/go.sum | 2084 --
.../internal/metadata/generated_status.go | 12 -
processor/servicegraphprocessor/metadata.yaml | 10 -
processor/servicegraphprocessor/metrics.go | 45 -
.../servicegraphprocessor/processor_test.go | 631 -
.../testdata/service-graph-config.yaml | 28 -
processor/spanmetricsprocessor/README.md | 154 -
processor/spanmetricsprocessor/config.go | 122 -
processor/spanmetricsprocessor/config_test.go | 156 -
processor/spanmetricsprocessor/factory.go | 49 -
.../spanmetricsprocessor/factory_test.go | 67 -
processor/spanmetricsprocessor/go.mod | 86 -
processor/spanmetricsprocessor/go.sum | 268 -
.../internal/cache/cache.go | 80 -
.../internal/cache/cache_test.go | 225 -
.../internal/metadata/generated_status.go | 12 -
processor/spanmetricsprocessor/metadata.yaml | 9 -
processor/spanmetricsprocessor/mocks/Host.go | 69 -
.../mocks/MetricsConsumer.go | 66 -
.../mocks/TracesConsumer.go | 37 -
processor/spanmetricsprocessor/processor.go | 529 -
.../spanmetricsprocessor/processor_test.go | 1050 -
.../testdata/config-exporter-not-found.yaml | 47 -
.../config-prometheusremotewrite.yaml | 73 -
.../testdata/config-simplest.yaml | 43 -
.../spanmetricsprocessor/testdata/config.yaml | 44 -
processor/spanprocessor/README.md | 8 +-
processor/spanprocessor/config_test.go | 12 +-
processor/spanprocessor/factory_test.go | 4 +-
.../spanprocessor/generated_component_test.go | 127 +
processor/spanprocessor/go.mod | 77 +-
processor/spanprocessor/go.sum | 225 +-
.../internal/metadata/generated_status.go | 15 +-
processor/spanprocessor/metadata.yaml | 10 +-
processor/spanprocessor/package_test.go | 14 +
processor/spanprocessor/span_test.go | 34 +-
processor/sumologicprocessor/README.md | 4 +-
processor/sumologicprocessor/config_test.go | 2 +-
.../generated_component_test.go | 141 +
processor/sumologicprocessor/go.mod | 124 +-
processor/sumologicprocessor/go.sum | 795 +-
.../internal/metadata/generated_status.go | 15 +-
processor/sumologicprocessor/metadata.yaml | 6 +-
processor/sumologicprocessor/package_test.go | 14 +
processor/tailsamplingprocessor/README.md | 19 +-
processor/tailsamplingprocessor/factory.go | 11 +
.../generated_component_test.go | 127 +
processor/tailsamplingprocessor/go.mod | 67 +-
processor/tailsamplingprocessor/go.sum | 140 +-
.../internal/idbatcher/id_batcher.go | 10 +-
.../internal/idbatcher/id_batcher_test.go | 10 +-
.../internal/idbatcher/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/sampling/always_sample_test.go | 2 +-
.../internal/sampling/package_test.go | 17 +
.../internal/sampling/rate_limiting_test.go | 8 +-
processor/tailsamplingprocessor/metadata.yaml | 9 +-
processor/tailsamplingprocessor/metrics.go | 161 +-
.../{main_test.go => package_test.go} | 0
processor/tailsamplingprocessor/processor.go | 18 +-
.../tailsamplingprocessor/processor_test.go | 76 +-
processor/transformprocessor/README.md | 37 +-
processor/transformprocessor/factory_test.go | 2 +-
.../generated_component_test.go | 141 +
processor/transformprocessor/go.mod | 71 +-
processor/transformprocessor/go.sum | 217 +-
.../internal/common/logs.go | 4 +-
.../internal/common/metrics.go | 8 +-
.../internal/common/processor.go | 8 +-
.../internal/common/traces.go | 8 +-
.../internal/logs/package_test.go | 14 +
.../internal/logs/processor_test.go | 14 +-
.../internal/metadata/generated_status.go | 15 +-
.../metrics/func_convert_gauge_to_sum.go | 10 +-
.../func_convert_gauge_to_sum_datapoint.go | 58 +
...unc_convert_gauge_to_sum_datapoint_test.go | 149 +
.../metrics/func_convert_gauge_to_sum_test.go | 6 +-
.../metrics/func_convert_sum_to_gauge.go | 10 +-
.../func_convert_sum_to_gauge_datapoint.go | 37 +
...unc_convert_sum_to_gauge_datapoint_test.go | 99 +
.../metrics/func_convert_sum_to_gauge_test.go | 6 +-
...c_convert_summary_count_val_to_sum_test.go | 2 +-
...unc_convert_summary_sum_val_to_sum_test.go | 2 +-
.../internal/metrics/func_copy_metric.go | 67 +
.../internal/metrics/func_copy_metric_test.go | 142 +
.../metrics/func_extract_count_metric.go | 3 +-
.../metrics/func_extract_count_metric_test.go | 6 +
.../internal/metrics/functions.go | 31 +-
.../internal/metrics/functions_test.go | 10 +-
.../internal/metrics/package_test.go | 14 +
.../internal/metrics/processor_test.go | 23 +-
.../internal/traces/package_test.go | 14 +
.../internal/traces/processor_test.go | 10 +-
processor/transformprocessor/metadata.yaml | 6 +-
processor/transformprocessor/package_test.go | 14 +
receiver/activedirectorydsreceiver/README.md | 7 +-
receiver/activedirectorydsreceiver/config.go | 4 +-
.../activedirectorydsreceiver/config_test.go | 2 +-
.../activedirectorydsreceiver/counters.go | 7 +-
.../counters_test.go | 1 -
receiver/activedirectorydsreceiver/factory.go | 6 +-
.../factory_others.go | 1 -
.../factory_others_test.go | 1 -
.../factory_windows.go | 7 +-
.../factory_windows_test.go | 5 +-
receiver/activedirectorydsreceiver/go.mod | 65 +-
receiver/activedirectorydsreceiver/go.sum | 204 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../activedirectorydsreceiver/metadata.yaml | 10 +-
.../activedirectorydsreceiver/package_test.go | 14 +
receiver/activedirectorydsreceiver/scraper.go | 11 +-
.../activedirectorydsreceiver/scraper_test.go | 1 -
receiver/aerospikereceiver/README.md | 6 +-
receiver/aerospikereceiver/client_test.go | 8 +-
.../aerospikereceiver/cluster/package_test.go | 14 +
receiver/aerospikereceiver/config.go | 18 +-
receiver/aerospikereceiver/config_test.go | 58 +-
receiver/aerospikereceiver/doc.go | 3 -
receiver/aerospikereceiver/factory.go | 14 +-
receiver/aerospikereceiver/factory_test.go | 2 +-
.../generated_component_test.go | 61 +
receiver/aerospikereceiver/go.mod | 103 +-
receiver/aerospikereceiver/go.sum | 288 +-
.../aerospikereceiver/integration_test.go | 15 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/aerospikereceiver/metadata.yaml | 4 +-
receiver/aerospikereceiver/scraper_test.go | 2 +-
receiver/apachereceiver/README.md | 4 +-
receiver/apachereceiver/config.go | 6 +-
receiver/apachereceiver/factory.go | 10 +-
receiver/apachereceiver/factory_test.go | 6 +-
.../generated_component_test.go | 61 +
receiver/apachereceiver/go.mod | 113 +-
receiver/apachereceiver/go.sum | 309 +-
receiver/apachereceiver/integration_test.go | 3 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/apachereceiver/metadata.yaml | 3 +-
receiver/apachereceiver/scraper.go | 4 +-
receiver/apachereceiver/scraper_test.go | 6 +-
receiver/apachesparkreceiver/client.go | 5 +-
receiver/apachesparkreceiver/client_test.go | 27 +-
receiver/apachesparkreceiver/config.go | 8 +-
receiver/apachesparkreceiver/config_test.go | 8 +-
receiver/apachesparkreceiver/factory.go | 10 +-
receiver/apachesparkreceiver/factory_test.go | 4 +-
.../generated_component_test.go | 61 +
receiver/apachesparkreceiver/go.mod | 115 +-
receiver/apachesparkreceiver/go.sum | 311 +-
.../apachesparkreceiver/integration_test.go | 3 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/apachesparkreceiver/metadata.yaml | 4 +
receiver/apachesparkreceiver/package_test.go | 14 +
receiver/apachesparkreceiver/scraper.go | 6 +-
receiver/apachesparkreceiver/scraper_test.go | 20 +-
.../awscloudwatchmetricsreceiver/README.md | 3 +-
.../generated_component_test.go | 61 +
receiver/awscloudwatchmetricsreceiver/go.mod | 53 +-
receiver/awscloudwatchmetricsreceiver/go.sum | 113 +-
.../internal/metadata/generated_status.go | 15 +-
.../metadata.yaml | 8 +-
.../package_test.go | 14 +
receiver/awscloudwatchreceiver/README.md | 6 +-
receiver/awscloudwatchreceiver/config.go | 2 +-
.../generated_component_test.go | 61 +
receiver/awscloudwatchreceiver/go.mod | 64 +-
receiver/awscloudwatchreceiver/go.sum | 128 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/awscloudwatchreceiver/metadata.yaml | 7 +-
.../awscloudwatchreceiver/package_test.go | 14 +
.../awscontainerinsightreceiver/README.md | 5 +-
.../awscontainerinsightreceiver/design.md | 2 +-
.../generated_component_test.go | 48 +
receiver/awscontainerinsightreceiver/go.mod | 235 +-
receiver/awscontainerinsightreceiver/go.sum | 594 +-
.../internal/cadvisor/cadvisor_linux.go | 1 -
.../internal/cadvisor/cadvisor_linux_test.go | 1 -
.../internal/cadvisor/cadvisor_nolinux.go | 5 +-
.../cadvisor/container_info_processor.go | 1 -
.../cadvisor/container_info_processor_test.go | 1 -
.../cadvisor/extractors/package_test.go | 14 +
.../internal/ecsInfo/cgroup_test.go | 6 +-
.../internal/ecsInfo/ecsinfo.go | 8 +-
.../internal/ecsInfo/utils_test.go | 10 +-
.../internal/gpu/dcgmscraper_test.go | 3 +-
.../internal/host/nodeCapacity.go | 5 +-
.../internal/host/nodeCapacity_test.go | 28 +-
.../internal/k8sapiserver/k8sapiserver.go | 36 +-
.../k8sapiserver/k8sapiserver_test.go | 2 +-
.../internal/k8sapiserver/leaderelection.go | 30 +-
.../k8sapiserver/prometheus_scraper.go | 2 +-
.../k8sapiserver/prometheus_scraper_test.go | 3 +-
.../extractors/mem_extractor_test.go | 3 +-
.../internal/metadata/generated_status.go | 15 +-
.../neuron/neuron_monitor_scraper_config.go | 1 +
.../prometheus_scraper_testutils.go | 3 +-
.../simple_prometheus_scraper.go | 2 +-
.../awscontainerinsightreceiver/metadata.yaml | 9 +-
.../awscontainerinsightreceiver/receiver.go | 3 -
.../receiver_test.go | 22 +-
.../awsecscontainermetricsreceiver/README.md | 5 +-
.../awsecscontainermetricsreceiver/factory.go | 2 +-
.../awsecscontainermetricsreceiver/go.mod | 83 +-
.../awsecscontainermetricsreceiver/go.sum | 163 +-
.../accumulator_test.go | 4 +-
.../awsecscontainermetrics/package_test.go | 14 +
.../internal/metadata/generated_status.go | 15 +-
.../metadata.yaml | 8 +-
.../package_test.go | 14 +
.../receiver.go | 4 -
.../receiver_test.go | 13 -
receiver/awsfirehosereceiver/README.md | 6 +-
receiver/awsfirehosereceiver/config.go | 4 +-
receiver/awsfirehosereceiver/config_test.go | 6 +-
receiver/awsfirehosereceiver/factory.go | 6 +-
.../generated_component_test.go | 61 +
receiver/awsfirehosereceiver/go.mod | 80 +-
receiver/awsfirehosereceiver/go.sum | 158 +-
.../internal/metadata/generated_status.go | 15 +-
.../cwmetricstream/package_test.go | 14 +
.../unmarshalertest/package_test.go | 14 +
receiver/awsfirehosereceiver/metadata.yaml | 6 +-
.../awsfirehosereceiver/metrics_receiver.go | 4 -
.../metrics_receiver_test.go | 4 -
receiver/awsfirehosereceiver/package_test.go | 14 +
receiver/awsfirehosereceiver/receiver.go | 8 +-
receiver/awsfirehosereceiver/receiver_test.go | 2 +-
receiver/awss3receiver/Makefile | 1 +
receiver/awss3receiver/README.md | 48 +
receiver/awss3receiver/config.go | 72 +
.../config_test.go | 41 +-
receiver/awss3receiver/doc.go | 9 +
receiver/awss3receiver/factory.go | 26 +
.../factory_test.go | 4 +-
.../awss3receiver/generated_component_test.go | 61 +
receiver/awss3receiver/go.mod | 54 +
receiver/awss3receiver/go.sum | 143 +
.../internal/metadata/generated_status.go | 25 +
receiver/awss3receiver/metadata.yaml | 9 +
receiver/awss3receiver/package_test.go | 13 +
receiver/awss3receiver/receiver.go | 27 +
receiver/awss3receiver/testdata/config.yaml | 11 +
receiver/awsxrayreceiver/README.md | 9 +-
receiver/awsxrayreceiver/config.go | 2 +-
receiver/awsxrayreceiver/config_test.go | 18 +-
receiver/awsxrayreceiver/factory.go | 9 +-
receiver/awsxrayreceiver/factory_test.go | 2 +-
receiver/awsxrayreceiver/go.mod | 93 +-
receiver/awsxrayreceiver/go.sum | 611 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/tracesegment/package_test.go | 14 +
.../internal/translator/package_test.go | 14 +
.../internal/translator/translator_test.go | 28 +-
.../internal/udppoller/poller.go | 10 +-
.../internal/udppoller/poller_test.go | 54 +-
receiver/awsxrayreceiver/metadata.yaml | 10 +-
receiver/awsxrayreceiver/package_test.go | 14 +
receiver/awsxrayreceiver/receiver.go | 12 +-
receiver/awsxrayreceiver/receiver_test.go | 71 +-
.../generated_component_test.go | 55 +
receiver/azureblobreceiver/go.mod | 137 +-
receiver/azureblobreceiver/go.sum | 668 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/azureblobreceiver/metadata.yaml | 7 +
receiver/azureblobreceiver/package_test.go | 14 +
receiver/azureblobreceiver/receiver.go | 4 +-
receiver/azureeventhubreceiver/README.md | 12 +-
receiver/azureeventhubreceiver/config_test.go | 2 +-
.../eventhubhandler_test.go | 2 +-
receiver/azureeventhubreceiver/factory.go | 4 +-
.../azureeventhubreceiver/factory_test.go | 5 +-
.../generated_component_test.go | 55 +
receiver/azureeventhubreceiver/go.mod | 143 +-
receiver/azureeventhubreceiver/go.sum | 667 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/azureeventhubreceiver/metadata.yaml | 10 +-
receiver/azureeventhubreceiver/receiver.go | 4 +-
receiver/azuremonitorreceiver/README.md | 11 +-
receiver/azuremonitorreceiver/config.go | 39 +-
receiver/azuremonitorreceiver/factory.go | 10 +-
receiver/azuremonitorreceiver/factory_test.go | 3 +-
.../generated_component_test.go | 61 +
receiver/azuremonitorreceiver/go.mod | 82 +-
receiver/azuremonitorreceiver/go.sum | 249 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/metrics.go | 2 +-
.../internal/metadata/package_test.go | 14 +
receiver/azuremonitorreceiver/metadata.yaml | 8 +-
receiver/azuremonitorreceiver/package_test.go | 14 +
receiver/azuremonitorreceiver/scraper.go | 56 +-
receiver/azuremonitorreceiver/scraper_test.go | 18 +-
receiver/bigipreceiver/README.md | 6 +-
receiver/bigipreceiver/client.go | 4 +-
receiver/bigipreceiver/client_test.go | 44 +-
receiver/bigipreceiver/config.go | 10 +-
receiver/bigipreceiver/config_test.go | 20 +-
receiver/bigipreceiver/factory.go | 8 +-
receiver/bigipreceiver/factory_test.go | 4 +-
.../bigipreceiver/generated_component_test.go | 61 +
receiver/bigipreceiver/go.mod | 115 +-
receiver/bigipreceiver/go.sum | 311 +-
receiver/bigipreceiver/integration_test.go | 3 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/bigipreceiver/metadata.yaml | 4 +-
receiver/bigipreceiver/package_test.go | 14 +
receiver/bigipreceiver/scraper.go | 36 +-
receiver/bigipreceiver/scraper_test.go | 38 +-
.../metrics_partial_with_members_golden.yaml | 272 +
receiver/carbonreceiver/README.md | 5 +-
receiver/carbonreceiver/config.go | 43 +-
receiver/carbonreceiver/config_test.go | 23 +-
receiver/carbonreceiver/factory.go | 13 +-
.../generated_component_test.go | 48 +
receiver/carbonreceiver/go.mod | 70 +-
receiver/carbonreceiver/go.sum | 589 +-
.../client/plaintext_client.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/transport/package_test.go | 14 +
.../{ => internal}/transport/server.go | 4 +-
.../{ => internal}/transport/server_test.go | 26 +-
.../{ => internal}/transport/tcp_server.go | 26 +-
.../{ => internal}/transport/udp_server.go | 2 +-
receiver/carbonreceiver/metadata.yaml | 6 +-
receiver/carbonreceiver/package_test.go | 14 +
receiver/carbonreceiver/protocol/config.go | 26 +-
.../carbonreceiver/protocol/config_test.go | 18 +-
.../carbonreceiver/protocol/package_test.go | 14 +
.../protocol/path_parser_helper.go | 18 +-
.../protocol/plaintext_parser_test.go | 75 +-
receiver/carbonreceiver/receiver.go | 17 +-
receiver/carbonreceiver/receiver_test.go | 40 +-
receiver/carbonreceiver/reporter.go | 18 +-
receiver/carbonreceiver/reporter_test.go | 6 +-
.../carbonreceiver/transport/mock_reporter.go | 44 -
receiver/chronyreceiver/config.go | 10 +-
receiver/chronyreceiver/config_test.go | 20 +-
receiver/chronyreceiver/factory.go | 16 +-
receiver/chronyreceiver/factory_test.go | 5 +-
.../generated_component_test.go | 48 +
receiver/chronyreceiver/go.mod | 60 +-
receiver/chronyreceiver/go.sum | 208 +-
.../internal/chrony/client_test.go | 10 +-
.../internal/chrony/package_test.go | 14 +
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/chronyreceiver/metadata.yaml | 6 +-
receiver/chronyreceiver/package_test.go | 14 +
receiver/chronyreceiver/scraper.go | 3 +-
receiver/chronyreceiver/scraper_test.go | 3 +-
receiver/cloudflarereceiver/README.md | 6 +-
receiver/cloudflarereceiver/config.go | 10 +-
receiver/cloudflarereceiver/config_test.go | 16 +-
.../generated_component_test.go | 61 +
receiver/cloudflarereceiver/go.mod | 66 +-
receiver/cloudflarereceiver/go.sum | 123 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/cloudflarereceiver/logs.go | 38 +-
.../logs_integration_test.go | 4 +-
receiver/cloudflarereceiver/logs_test.go | 4 +-
receiver/cloudflarereceiver/metadata.yaml | 4 +-
receiver/cloudflarereceiver/package_test.go | 14 +
receiver/cloudfoundryreceiver/README.md | 8 +-
receiver/cloudfoundryreceiver/config.go | 16 +-
receiver/cloudfoundryreceiver/config_test.go | 20 +-
receiver/cloudfoundryreceiver/factory.go | 6 +-
.../generated_component_test.go | 48 +
receiver/cloudfoundryreceiver/go.mod | 76 +-
receiver/cloudfoundryreceiver/go.sum | 224 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/cloudfoundryreceiver/metadata.yaml | 10 +-
receiver/cloudfoundryreceiver/package_test.go | 14 +
receiver/cloudfoundryreceiver/receiver.go | 20 +-
.../cloudfoundryreceiver/receiver_test.go | 16 -
receiver/cloudfoundryreceiver/stream.go | 5 +-
receiver/cloudfoundryreceiver/stream_test.go | 10 +-
receiver/cloudfoundryreceiver/uaa.go | 2 +-
receiver/cloudfoundryreceiver/uaa_test.go | 8 +-
receiver/collectdreceiver/README.md | 5 +-
receiver/collectdreceiver/config.go | 8 +-
receiver/collectdreceiver/config_test.go | 2 +-
receiver/collectdreceiver/factory.go | 2 +-
.../generated_component_test.go | 61 +
receiver/collectdreceiver/go.mod | 87 +-
receiver/collectdreceiver/go.sum | 244 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/collectdreceiver/metadata.yaml | 3 +-
receiver/collectdreceiver/package_test.go | 14 +
receiver/collectdreceiver/receiver.go | 25 +-
receiver/collectdreceiver/receiver_test.go | 19 +-
receiver/couchdbreceiver/README.md | 6 +-
receiver/couchdbreceiver/client.go | 5 +-
receiver/couchdbreceiver/client_test.go | 36 +-
receiver/couchdbreceiver/config.go | 10 +-
receiver/couchdbreceiver/config_test.go | 24 +-
receiver/couchdbreceiver/doc.go | 3 -
receiver/couchdbreceiver/factory.go | 12 +-
receiver/couchdbreceiver/factory_test.go | 17 +-
.../generated_component_test.go | 61 +
receiver/couchdbreceiver/go.mod | 85 +-
receiver/couchdbreceiver/go.sum | 246 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/couchdbreceiver/metadata.yaml | 4 +-
receiver/couchdbreceiver/package_test.go | 14 +
receiver/couchdbreceiver/scraper.go | 4 +-
receiver/couchdbreceiver/scraper_test.go | 10 +-
receiver/datadogreceiver/README.md | 3 +-
receiver/datadogreceiver/config.go | 2 +-
receiver/datadogreceiver/factory.go | 2 +-
.../generated_component_test.go | 61 +
receiver/datadogreceiver/go.mod | 86 +-
receiver/datadogreceiver/go.sum | 274 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/datadogreceiver/metadata.yaml | 3 +-
receiver/datadogreceiver/package_test.go | 14 +
receiver/datadogreceiver/receiver.go | 36 +-
receiver/datadogreceiver/translator.go | 79 +-
receiver/datadogreceiver/translator_test.go | 96 +-
receiver/dockerstatsreceiver/README.md | 7 +-
receiver/dockerstatsreceiver/config.go | 13 +-
receiver/dockerstatsreceiver/config_test.go | 21 +-
receiver/dockerstatsreceiver/documentation.md | 42 +
receiver/dockerstatsreceiver/factory.go | 23 +-
receiver/dockerstatsreceiver/factory_test.go | 2 +-
.../generated_component_test.go | 62 +
receiver/dockerstatsreceiver/go.mod | 95 +-
receiver/dockerstatsreceiver/go.sum | 273 +-
.../dockerstatsreceiver/integration_test.go | 31 +-
.../internal/metadata/generated_config.go | 24 +-
.../metadata/generated_config_test.go | 10 +
.../internal/metadata/generated_metrics.go | 289 +
.../metadata/generated_metrics_test.go | 79 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 20 +
receiver/dockerstatsreceiver/metadata.yaml | 43 +-
receiver/dockerstatsreceiver/metric_helper.go | 61 +
.../dockerstatsreceiver/metric_helper_test.go | 121 +
receiver/dockerstatsreceiver/package_test.go | 14 +
receiver/dockerstatsreceiver/receiver.go | 39 +-
receiver/dockerstatsreceiver/receiver_test.go | 69 +-
.../dockerstatsreceiver/testdata/config.yaml | 2 +-
.../mock/cgroups_v2/expected_metrics.yaml | 44 +-
.../testdata/mock/cpu_limit/container.json | 196 +
.../testdata/mock/cpu_limit/containers.json | 39 +
.../mock/cpu_limit/expected_metrics.yaml | 487 +
.../testdata/mock/cpu_limit/stats.json | 137 +
.../mock/no_pids_stats/expected_metrics.yaml | 44 +-
.../testdata/mock/no_pids_stats/stats.json | 1 +
.../mock/pids_stats_max/expected_metrics.yaml | 44 +-
.../testdata/mock/pids_stats_max/stats.json | 1 +
.../single_container/expected_metrics.yaml | 34 +
.../testdata/mock/single_container/stats.json | 1 +
.../expected_metrics.yaml | 36 +
.../stats.json | 1 +
.../mock/two_containers/expected_metrics.yaml | 68 +
.../testdata/mock/two_containers/stats1.json | 1 +
.../testdata/mock/two_containers/stats2.json | 1 +
receiver/elasticsearchreceiver/README.md | 18 +-
receiver/elasticsearchreceiver/client.go | 12 +-
receiver/elasticsearchreceiver/client_test.go | 318 +-
receiver/elasticsearchreceiver/config.go | 4 +-
receiver/elasticsearchreceiver/config_test.go | 4 +-
receiver/elasticsearchreceiver/doc.go | 3 -
.../elasticsearchreceiver/documentation.md | 4 +
receiver/elasticsearchreceiver/factory.go | 10 +-
.../elasticsearchreceiver/factory_test.go | 14 -
.../generated_component_test.go | 61 +
receiver/elasticsearchreceiver/go.mod | 115 +-
receiver/elasticsearchreceiver/go.sum | 311 +-
.../elasticsearchreceiver/integration_test.go | 1 -
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/elasticsearchreceiver/metadata.yaml | 9 +-
.../elasticsearchreceiver/package_test.go | 14 +
receiver/elasticsearchreceiver/scraper.go | 19 +-
.../elasticsearchreceiver/scraper_test.go | 119 +-
.../{full.yaml => full_linux.yaml} | 0
.../testdata/expected_metrics/full_other.yaml | 3047 ++
.../sample_payloads/nodes_stats_other.json | 743 +
receiver/expvarreceiver/README.md | 3 +-
receiver/expvarreceiver/config.go | 6 +-
receiver/expvarreceiver/config_test.go | 4 +-
receiver/expvarreceiver/factory.go | 8 +-
receiver/expvarreceiver/factory_test.go | 6 +-
.../generated_component_test.go | 61 +
receiver/expvarreceiver/go.mod | 83 +-
receiver/expvarreceiver/go.sum | 243 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/expvarreceiver/metadata.yaml | 3 +-
receiver/expvarreceiver/package_test.go | 14 +
receiver/expvarreceiver/scraper.go | 4 +-
receiver/expvarreceiver/scraper_test.go | 2 +-
receiver/filelogreceiver/README.md | 51 +-
receiver/filelogreceiver/filelog_test.go | 84 +-
.../generated_component_test.go | 61 +
receiver/filelogreceiver/go.mod | 76 +-
receiver/filelogreceiver/go.sum | 252 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/filelogreceiver/metadata.yaml | 7 +-
receiver/filelogreceiver/package_test.go | 14 +
receiver/filelogreceiver/storage_test.go | 7 +-
receiver/filereceiver/README.md | 45 -
receiver/filereceiver/config.go | 39 -
receiver/filereceiver/factory.go | 37 -
receiver/filereceiver/file_reader.go | 132 -
receiver/filereceiver/file_reader_test.go | 93 -
receiver/filereceiver/go.mod | 48 -
.../internal/metadata/generated_status.go | 12 -
receiver/filereceiver/metadata.yaml | 9 -
receiver/filereceiver/receiver.go | 53 -
receiver/filereceiver/receiver_test.go | 59 -
receiver/filereceiver/replay_timer.go | 53 -
receiver/filereceiver/replay_timer_test.go | 40 -
receiver/filereceiver/testdata/config.yaml | 6 -
receiver/filereceiver/testdata/metrics.json | 10 -
receiver/filestatsreceiver/README.md | 3 +-
receiver/filestatsreceiver/config.go | 6 +-
receiver/filestatsreceiver/config_test.go | 10 +-
receiver/filestatsreceiver/documentation.md | 8 +
receiver/filestatsreceiver/factory.go | 8 +-
.../filestatsreceiver/filestats_darwin.go | 1 -
receiver/filestatsreceiver/filestats_linux.go | 1 -
receiver/filestatsreceiver/filestats_other.go | 1 -
.../filestatsreceiver/filestats_windows.go | 3 +-
.../generated_component_test.go | 61 +
receiver/filestatsreceiver/go.mod | 105 +-
receiver/filestatsreceiver/go.sum | 304 +-
.../filestatsreceiver/integration_test.go | 50 +
.../internal/metadata/generated_config.go | 8 +-
.../metadata/generated_config_test.go | 2 +
.../internal/metadata/generated_metrics.go | 57 +
.../metadata/generated_metrics_test.go | 15 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
receiver/filestatsreceiver/metadata.yaml | 9 +-
receiver/filestatsreceiver/package_test.go | 14 +
receiver/filestatsreceiver/scraper.go | 11 +-
receiver/filestatsreceiver/scraper_test.go | 12 +-
.../testdata/integration/expected.yaml | 61 +
receiver/flinkmetricsreceiver/README.md | 6 +-
receiver/flinkmetricsreceiver/client.go | 4 +-
receiver/flinkmetricsreceiver/client_test.go | 42 +-
receiver/flinkmetricsreceiver/config.go | 6 +-
receiver/flinkmetricsreceiver/config_test.go | 8 +-
receiver/flinkmetricsreceiver/factory.go | 10 +-
receiver/flinkmetricsreceiver/factory_test.go | 4 +-
.../generated_component_test.go | 61 +
receiver/flinkmetricsreceiver/go.mod | 126 +-
receiver/flinkmetricsreceiver/go.sum | 334 +-
.../flinkmetricsreceiver/integration_test.go | 91 -
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/flinkmetricsreceiver/metadata.yaml | 6 +-
receiver/flinkmetricsreceiver/package_test.go | 14 +
receiver/flinkmetricsreceiver/scraper.go | 4 +-
receiver/flinkmetricsreceiver/scraper_test.go | 22 +-
receiver/fluentforwardreceiver/README.md | 5 +-
receiver/fluentforwardreceiver/ack_test.go | 6 +-
receiver/fluentforwardreceiver/config_test.go | 2 +-
.../fluentforwardreceiver/conversion_test.go | 16 +-
.../fluentforwardreceiver/factory_test.go | 5 +-
.../generated_component_test.go | 61 +
receiver/fluentforwardreceiver/go.mod | 61 +-
receiver/fluentforwardreceiver/go.sum | 130 +-
.../fluentforwardreceiver/heartbeat_test.go | 8 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/fluentforwardreceiver/metadata.yaml | 5 +-
.../observ/package_test.go | 17 +
.../fluentforwardreceiver/receiver_test.go | 2 +-
.../fluentforwardreceiver/timeext_test.go | 6 +-
receiver/gitproviderreceiver/README.md | 54 +-
receiver/gitproviderreceiver/config.go | 10 +-
receiver/gitproviderreceiver/config_test.go | 52 +-
receiver/gitproviderreceiver/documentation.md | 95 +-
receiver/gitproviderreceiver/factory.go | 4 +-
.../generated_component_test.go | 61 +
receiver/gitproviderreceiver/go.mod | 143 +-
receiver/gitproviderreceiver/go.sum | 683 +-
.../internal/metadata/generated_config.go | 46 +-
.../metadata/generated_config_test.go | 72 +-
.../internal/metadata/generated_metrics.go | 352 +-
.../metadata/generated_metrics_test.go | 152 +-
.../internal/metadata/generated_resource.go | 43 +
.../metadata/generated_resource_test.go | 46 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 24 +-
.../internal/scraper/githubscraper/config.go | 4 +-
.../scraper/githubscraper/config_test.go | 30 +
.../internal/scraper/githubscraper/factory.go | 2 +-
.../scraper/githubscraper/factory_test.go | 30 +
.../githubscraper/generated_graphql.go | 1082 +
.../scraper/githubscraper/genqlient.graphql | 113 +
.../scraper/githubscraper/genqlient.yaml | 14 +
.../scraper/githubscraper/github_scraper.go | 123 +-
.../internal/scraper/githubscraper/helpers.go | 212 +
.../scraper/githubscraper/helpers_test.go | 663 +
.../scraper/githubscraper/schema.graphql | 25872 ++++++++++++++++
receiver/gitproviderreceiver/metadata.yaml | 86 +-
receiver/gitproviderreceiver/package_test.go | 14 +
.../testdata/config-invalidscraperkey.yaml | 20 +
receiver/googlecloudpubsubreceiver/README.md | 39 +-
receiver/googlecloudpubsubreceiver/config.go | 3 +-
receiver/googlecloudpubsubreceiver/factory.go | 9 -
.../googlecloudpubsubreceiver/factory_test.go | 9 +-
receiver/googlecloudpubsubreceiver/go.mod | 102 +-
receiver/googlecloudpubsubreceiver/go.sum | 231 +-
.../internal/common_protos.go | 8 +
.../internal/handler_test.go | 2 +-
.../internal/log_entry.go | 598 +
.../internal/log_entry_test.go | 107 +
.../internal/metadata/generated_status.go | 15 +-
.../googlecloudpubsubreceiver/metadata.yaml | 13 +-
.../googlecloudpubsubreceiver/receiver.go | 33 +
receiver/googlecloudspannerreceiver/README.md | 7 +-
receiver/googlecloudspannerreceiver/config.go | 2 +-
.../googlecloudspannerreceiver/config_test.go | 4 +-
.../googlecloudspannerreceiver/factory.go | 6 +-
.../factory_test.go | 7 +-
.../generated_component_test.go | 61 +
receiver/googlecloudspannerreceiver/go.mod | 100 +-
receiver/googlecloudspannerreceiver/go.sum | 235 +-
.../internal/datasource/database_test.go | 6 +-
.../internal/filter/itemcardinality_test.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 17 +
.../internal/metadataconfig/package_test.go | 17 +
.../internal/metadataparser/package_test.go | 17 +
.../internal/statsreader/databasereader.go | 40 +-
.../statsreader/databasereader_test.go | 4 +-
.../internal/statsreader/projectreader.go | 18 +-
.../googlecloudspannerreceiver/metadata.yaml | 8 +-
.../googlecloudspannerreceiver/receiver.go | 24 +-
.../receiver_test.go | 6 +-
receiver/haproxyreceiver/README.md | 3 +-
receiver/haproxyreceiver/config.go | 8 +-
receiver/haproxyreceiver/factory.go | 8 +-
.../generated_component_test.go | 61 +
receiver/haproxyreceiver/go.mod | 110 +-
receiver/haproxyreceiver/go.sum | 309 +-
receiver/haproxyreceiver/integration_test.go | 11 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/haproxyreceiver/metadata.yaml | 3 +-
receiver/haproxyreceiver/package_test.go | 14 +
receiver/haproxyreceiver/scraper.go | 138 +-
receiver/haproxyreceiver/scraper_test.go | 43 +
.../haproxyreceiver/testdata/30252_stats.txt | 7 +
.../testdata/scraper/30252_expected.yaml | 842 +
receiver/hostmetricsreceiver/README.md | 21 +-
receiver/hostmetricsreceiver/config.go | 8 +-
receiver/hostmetricsreceiver/config_test.go | 2 +-
receiver/hostmetricsreceiver/factory.go | 4 +-
.../generated_component_test.go | 61 +
receiver/hostmetricsreceiver/go.mod | 161 +-
receiver/hostmetricsreceiver/go.sum | 352 +-
.../hostmetrics_receiver_test.go | 56 +-
.../hostmetricsreceiver/integration_test.go | 7 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/perfcounters/package_test.go | 14 +
.../perfcounters/perfcounter_scraper.go | 1 -
.../perfcounters/perfcounter_scraper_mock.go | 1 -
.../perfcounters/perfcounter_scraper_test.go | 1 -
.../scraper/cpuscraper/cpu_scraper_linux.go | 1 -
.../scraper/cpuscraper/cpu_scraper_others.go | 1 -
.../internal/scraper/cpuscraper/doc.go | 3 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/package_test.go | 14 +
.../internal/scraper/cpuscraper/metadata.yaml | 1 +
.../scraper/cpuscraper/package_test.go | 14 +
.../scraper/cpuscraper/ucal/package_test.go | 14 +
.../diskscraper/disk_scraper_others.go | 1 -
.../disk_scraper_others_fallback.go | 1 -
.../diskscraper/disk_scraper_others_linux.go | 1 -
.../diskscraper/disk_scraper_others_test.go | 3 +-
.../diskscraper/disk_scraper_windows_test.go | 1 -
.../internal/scraper/diskscraper/doc.go | 3 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/package_test.go | 14 +
.../scraper/diskscraper/metadata.yaml | 1 +
.../scraper/diskscraper/package_test.go | 14 +
.../internal/scraper/filesystemscraper/doc.go | 3 -
.../filesystem_scraper_others.go | 1 -
.../filesystem_scraper_test.go | 12 +-
.../filesystem_scraper_unix.go | 1 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/package_test.go | 14 +
.../scraper/filesystemscraper/metadata.yaml | 1 +
.../scraper/filesystemscraper/package_test.go | 14 +
.../internal/scraper/loadscraper/doc.go | 3 -
.../scraper/loadscraper/documentation.md | 6 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_metrics.go | 6 +-
.../metadata/generated_metrics_test.go | 6 +-
.../internal/metadata/package_test.go | 14 +
.../loadscraper/load_scraper_others.go | 5 +-
.../scraper/loadscraper/load_scraper_test.go | 140 +-
.../loadscraper/load_scraper_windows.go | 6 +-
.../loadscraper/load_scraper_windows_test.go | 1 -
.../scraper/loadscraper/metadata.yaml | 7 +-
.../scraper/loadscraper/package_test.go | 14 +
.../internal/scraper/memoryscraper/doc.go | 3 -
.../scraper/memoryscraper/documentation.md | 16 +
.../internal/metadata/generated_config.go | 14 +-
.../metadata/generated_config_test.go | 12 +-
.../internal/metadata/generated_metrics.go | 144 +-
.../metadata/generated_metrics_test.go | 34 +
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 8 +
.../scraper/memoryscraper/memory_scraper.go | 6 +
.../memoryscraper/memory_scraper_linux.go | 9 +-
.../memoryscraper/memory_scraper_others.go | 4 +-
.../memoryscraper/memory_scraper_test.go | 23 +-
.../memoryscraper/memory_scraper_windows.go | 4 +-
.../scraper/memoryscraper/metadata.yaml | 19 +
.../scraper/memoryscraper/package_test.go | 14 +
.../internal/scraper/networkscraper/doc.go | 3 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/package_test.go | 14 +
.../scraper/networkscraper/metadata.yaml | 1 +
.../scraper/networkscraper/network_linux.go | 1 -
.../scraper/networkscraper/network_others.go | 1 -
.../networkscraper/network_scraper_test.go | 8 +-
.../scraper/networkscraper/package_test.go | 14 +
.../internal/scraper/pagingscraper/doc.go | 3 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/package_test.go | 14 +
.../scraper/pagingscraper/metadata.yaml | 1 +
.../scraper/pagingscraper/package_test.go | 14 +
.../scraper/pagingscraper/pagefile.go | 2 +-
.../scraper/pagingscraper/pagefile_linux.go | 1 -
.../pagingscraper/pagefile_linux_test.go | 1 -
.../scraper/pagingscraper/pagefile_others.go | 1 -
.../scraper/pagingscraper/pagefile_windows.go | 9 +-
.../pagingscraper/paging_scraper_others.go | 1 -
.../paging_scraper_others_test.go | 1 -
.../pagingscraper/paging_scraper_test.go | 15 +-
.../pagingscraper/paging_scraper_windows.go | 1 -
.../paging_scraper_windows_test.go | 1 -
.../internal/scraper/processesscraper/doc.go | 3 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/package_test.go | 14 +
.../scraper/processesscraper/metadata.yaml | 1 +
.../scraper/processesscraper/package_test.go | 14 +
.../processes_scraper_fallback.go | 1 -
.../processes_scraper_test.go | 2 +-
.../processes_scraper_unix.go | 1 -
.../internal/scraper/processscraper/config.go | 4 +
.../internal/scraper/processscraper/doc.go | 3 -
.../scraper/processscraper/documentation.md | 1 +
.../internal/handlecount/handles_others.go | 1 -
.../handlecount/handles_others_test.go | 1 -
.../internal/handlecount/handles_windows.go | 2 +-
.../handlecount/handles_windows_test.go | 1 -
.../internal/handlecount/package_test.go | 14 +
.../internal/metadata/generated_config.go | 8 +-
.../metadata/generated_config_test.go | 4 +
.../metadata/generated_metrics_test.go | 1 +
.../internal/metadata/generated_resource.go | 7 +
.../metadata/generated_resource_test.go | 10 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
.../scraper/processscraper/metadata.yaml | 5 +
.../scraper/processscraper/package_test.go | 14 +
.../scraper/processscraper/process.go | 55 +-
.../scraper/processscraper/process_scraper.go | 20 +-
.../processscraper/process_scraper_darwin.go | 5 +-
.../processscraper/process_scraper_linux.go | 10 +-
.../processscraper/process_scraper_others.go | 5 +-
.../processscraper/process_scraper_test.go | 79 +-
.../processscraper/process_scraper_windows.go | 5 +-
.../ucal/cpu_utilization_calculator.go | 33 +-
.../ucal/cpu_utilization_calculator_test.go | 96 +-
.../processscraper/ucal/package_test.go | 14 +
receiver/hostmetricsreceiver/metadata.yaml | 5 +-
receiver/hostmetricsreceiver/package_test.go | 14 +
receiver/httpcheckreceiver/README.md | 3 +-
receiver/httpcheckreceiver/config.go | 10 +-
receiver/httpcheckreceiver/config_test.go | 26 +-
receiver/httpcheckreceiver/factory.go | 12 +-
receiver/httpcheckreceiver/factory_test.go | 2 +-
.../generated_component_test.go | 61 +
receiver/httpcheckreceiver/go.mod | 83 +-
receiver/httpcheckreceiver/go.sum | 243 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/httpcheckreceiver/metadata.yaml | 3 +-
receiver/httpcheckreceiver/package_test.go | 14 +
receiver/httpcheckreceiver/scraper.go | 4 +-
receiver/httpcheckreceiver/scraper_test.go | 20 +-
receiver/iisreceiver/README.md | 7 +-
receiver/iisreceiver/config.go | 4 +-
receiver/iisreceiver/factory.go | 4 +-
receiver/iisreceiver/factory_others.go | 1 -
receiver/iisreceiver/factory_others_test.go | 1 -
receiver/iisreceiver/factory_test.go | 2 +-
receiver/iisreceiver/factory_windows.go | 5 +-
receiver/iisreceiver/factory_windows_test.go | 1 -
.../iisreceiver/generated_component_test.go | 62 +
receiver/iisreceiver/go.mod | 97 +-
receiver/iisreceiver/go.sum | 273 +-
receiver/iisreceiver/integration_test.go | 1 -
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/iisreceiver/metadata.yaml | 5 +-
receiver/iisreceiver/package_test.go | 14 +
receiver/iisreceiver/recorder.go | 1 -
receiver/iisreceiver/scraper.go | 7 +-
receiver/iisreceiver/scraper_test.go | 19 +-
receiver/influxdbreceiver/README.md | 7 +-
receiver/influxdbreceiver/config.go | 2 +-
receiver/influxdbreceiver/factory.go | 7 +-
.../generated_component_test.go | 61 +
receiver/influxdbreceiver/go.mod | 88 +-
receiver/influxdbreceiver/go.sum | 258 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/influxdbreceiver/metadata.yaml | 3 +-
receiver/influxdbreceiver/package_test.go | 14 +
receiver/influxdbreceiver/receiver.go | 17 +-
receiver/influxdbreceiver/receiver_test.go | 2 +-
receiver/jaegerreceiver/README.md | 13 +-
receiver/jaegerreceiver/config.go | 18 +-
receiver/jaegerreceiver/config_test.go | 52 +-
receiver/jaegerreceiver/factory.go | 43 +-
receiver/jaegerreceiver/factory_test.go | 50 +-
.../generated_component_test.go | 61 +
receiver/jaegerreceiver/go.mod | 105 +-
receiver/jaegerreceiver/go.sum | 344 +-
.../jaegerreceiverdeprecated/README.md | 5 -
.../jaegerreceiverdeprecated/config.go | 177 -
.../jaegerreceiverdeprecated/config_test.go | 291 -
.../internal/jaegerreceiverdeprecated/doc.go | 7 -
.../jaegerreceiverdeprecated/errors.go | 13 -
.../jaegerreceiverdeprecated/factory.go | 102 -
.../jaegerreceiverdeprecated/factory_test.go | 175 -
.../internal/clientcfghttp/cfgmgr.go | 47 -
.../internal/clientcfghttp/cfgmgr_test.go | 78 -
.../internal/clientcfghttp/handler.go | 199 -
.../clientcfghttp/thrift-0.9.2/.nocover | 1 -
.../clientcfghttp/thrift-0.9.2/constants.go | 37 -
.../clientcfghttp/thrift-0.9.2/ttypes.go | 790 -
.../internal/configmanager/grpc/manager.go | 55 -
.../internal/configmanager/manager.go | 34 -
.../internal/configmanager/metrics.go | 76 -
.../internal/httpserver/srv.go | 51 -
.../internal/httpserver/srv_test.go | 31 -
.../internal/metadata/generated_status.go | 12 -
.../internal/sampling/grpc_handler.go | 48 -
.../internal/sampling/grpc_handler_test.go | 63 -
.../internal/sampling/model/empty_test.go | 24 -
.../internal/sampling/model/sampling.go | 45 -
.../sampling/strategystore/empty_test.go | 21 -
.../sampling/strategystore/factory.go | 38 -
.../sampling/strategystore/interface.go | 43 -
.../jaeger_agent_test.go | 251 -
.../jaegerreceiverdeprecated/metadata.yaml | 17 -
.../jaegerreceiverdeprecated/testdata/ca.crt | 20 -
.../testdata/client.crt | 20 -
.../testdata/client.key | 27 -
.../testdata/config.yaml | 67 -
.../testdata/server.crt | 20 -
.../testdata/server.key | 27 -
.../testdata/strategies.json | 30 -
.../trace_receiver.go | 424 -
.../trace_receiver_test.go | 413 -
.../internal/metadata/generated_status.go | 15 +-
receiver/jaegerreceiver/jaeger_agent_test.go | 10 +-
receiver/jaegerreceiver/metadata.yaml | 14 +-
receiver/jaegerreceiver/package_test.go | 14 +
receiver/jaegerreceiver/trace_receiver.go | 36 +-
.../jaegerreceiver/trace_receiver_test.go | 30 +-
receiver/jmxreceiver/README.md | 13 +-
receiver/jmxreceiver/config_test.go | 2 +-
receiver/jmxreceiver/factory_test.go | 5 +-
.../jmxreceiver/generated_component_test.go | 61 +
receiver/jmxreceiver/go.mod | 128 +-
receiver/jmxreceiver/go.sum | 348 +-
receiver/jmxreceiver/integration_test.go | 1 -
.../internal/metadata/generated_status.go | 15 +-
.../internal/subprocess/integration_test.go | 3 +-
.../internal/subprocess/subprocess_linux.go | 1 -
.../internal/subprocess/subprocess_others.go | 1 -
receiver/jmxreceiver/metadata.yaml | 7 +-
receiver/jmxreceiver/package_test.go | 14 +
receiver/jmxreceiver/receiver.go | 24 +-
receiver/jmxreceiver/receiver_test.go | 4 +-
receiver/jmxreceiver/supported_jars.go | 8 +
receiver/jmxreceiver/testdata/script.groovy | 31 -
receiver/journaldreceiver/README.md | 7 +-
receiver/journaldreceiver/config.go | 50 +
receiver/journaldreceiver/factory_test.go | 34 +
.../generated_component_test.go | 62 +
receiver/journaldreceiver/go.mod | 72 +-
receiver/journaldreceiver/go.sum | 248 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/journaldreceiver/journald.go | 37 +-
.../journaldreceiver/journald_nonlinux.go | 15 -
receiver/journaldreceiver/journald_test.go | 1 -
receiver/journaldreceiver/metadata.yaml | 5 +-
receiver/journaldreceiver/package_test.go | 14 +
receiver/k8sclusterreceiver/README.md | 11 +-
receiver/k8sclusterreceiver/config_test.go | 4 +-
receiver/k8sclusterreceiver/documentation.md | 6 +-
receiver/k8sclusterreceiver/e2e_test.go | 26 +-
receiver/k8sclusterreceiver/factory_test.go | 8 +-
.../generated_component_test.go | 55 +
receiver/k8sclusterreceiver/go.mod | 145 +-
receiver/k8sclusterreceiver/go.sum | 479 +-
.../clusterresourcequota/package_test.go | 14 +
.../internal/collection/package_test.go | 14 +
.../internal/container/containers.go | 6 +-
.../internal/cronjob/package_test.go | 14 +
.../internal/demonset/package_test.go | 14 +
.../internal/deployment/package_test.go | 14 +
.../internal/hpa/package_test.go | 14 +
.../internal/jobs/package_test.go | 14 +
.../internal/metadata/generated_config.go | 92 +-
.../metadata/generated_config_test.go | 280 +-
.../metadata/generated_metrics_test.go | 6 +-
.../internal/metadata/generated_resource.go | 42 +-
.../metadata/generated_resource_test.go | 38 +-
.../internal/metadata/generated_status.go | 17 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 24 +-
.../internal/namespace/package_test.go | 14 +
.../k8sclusterreceiver/internal/node/nodes.go | 30 +-
.../internal/node/nodes_test.go | 11 +-
.../internal/node/package_test.go | 14 +
.../node/testdata/expected_optional.yaml | 14 +-
.../internal/pod/package_test.go | 14 +
.../k8sclusterreceiver/internal/pod/pods.go | 11 +-
.../internal/pod/pods_test.go | 1 +
.../pod/testdata/expected_evicted.yaml | 3 +
.../internal/replicaset/package_test.go | 14 +
.../replicationcontroller/package_test.go | 14 +
.../internal/resourcequota/package_test.go | 14 +
.../internal/service/package_test.go | 14 +
.../internal/statefulset/package_test.go | 14 +
.../internal/testutils/objects.go | 11 +-
.../internal/utils/package_test.go | 14 +
receiver/k8sclusterreceiver/metadata.yaml | 31 +-
receiver/k8sclusterreceiver/receiver.go | 4 +-
receiver/k8sclusterreceiver/receiver_test.go | 13 +-
.../testdata/e2e/collector/deployment.yaml | 2 +
receiver/k8sclusterreceiver/watcher.go | 2 +-
receiver/k8sclusterreceiver/watcher_test.go | 6 +-
receiver/k8seventsreceiver/README.md | 5 +-
receiver/k8seventsreceiver/factory.go | 7 +-
receiver/k8seventsreceiver/factory_test.go | 14 +-
.../generated_component_test.go | 48 +
receiver/k8seventsreceiver/go.mod | 86 +-
receiver/k8seventsreceiver/go.sum | 213 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/k8seventsreceiver/metadata.yaml | 7 +-
receiver/k8seventsreceiver/package_test.go | 14 +
receiver/k8seventsreceiver/receiver.go | 21 +-
receiver/k8seventsreceiver/receiver_test.go | 15 +-
receiver/k8sobjectsreceiver/README.md | 4 +-
receiver/k8sobjectsreceiver/config.go | 6 +-
receiver/k8sobjectsreceiver/e2e_test.go | 17 +-
receiver/k8sobjectsreceiver/factory_test.go | 8 +-
.../generated_component_test.go | 48 +
receiver/k8sobjectsreceiver/go.mod | 128 +-
receiver/k8sobjectsreceiver/go.sum | 315 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/k8sobjectsreceiver/metadata.yaml | 7 +-
receiver/k8sobjectsreceiver/receiver.go | 44 +-
.../testdata/e2e/expected/watch_events.yaml | 4 +-
.../e2e/expected/watch_events_core.yaml | 4 +-
.../testdata/e2e/testobjects/event.yaml | 4 +-
.../testdata/e2e/testobjects/event_core.yaml | 4 +-
receiver/kafkametricsreceiver/README.md | 4 +-
.../broker_scraper_test.go | 4 +-
receiver/kafkametricsreceiver/config.go | 2 +-
receiver/kafkametricsreceiver/config_test.go | 14 +-
.../kafkametricsreceiver/consumer_scraper.go | 6 +-
.../consumer_scraper_test.go | 8 +-
receiver/kafkametricsreceiver/doc.go | 3 -
receiver/kafkametricsreceiver/factory.go | 12 +-
receiver/kafkametricsreceiver/factory_test.go | 15 +-
.../generated_component_test.go | 61 +
receiver/kafkametricsreceiver/go.mod | 125 +-
receiver/kafkametricsreceiver/go.sum | 320 +-
.../kafkametricsreceiver/integration_test.go | 83 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/kafkametricsreceiver/metadata.yaml | 8 +-
receiver/kafkametricsreceiver/package_test.go | 14 +
receiver/kafkametricsreceiver/receiver.go | 2 +-
.../kafkametricsreceiver/receiver_test.go | 10 +-
.../topic_scraper_test.go | 8 +-
receiver/kafkareceiver/README.md | 11 +-
.../azureresourcelogs_unmarshaler.go | 32 +
.../azureresourcelogs_unmarshaler_test.go | 16 +
receiver/kafkareceiver/config.go | 2 +-
receiver/kafkareceiver/config_test.go | 8 +-
receiver/kafkareceiver/factory.go | 104 +-
receiver/kafkareceiver/factory_test.go | 113 +-
.../kafkareceiver/generated_component_test.go | 62 +
receiver/kafkareceiver/go.mod | 107 +-
receiver/kafkareceiver/go.sum | 209 +-
.../kafkareceiver/header_extraction_test.go | 5 +-
.../internal/metadata/generated_status.go | 15 +-
.../kafkareceiver/json_unmarshaler_test.go | 2 +-
receiver/kafkareceiver/kafka_receiver.go | 238 +-
receiver/kafkareceiver/kafka_receiver_test.go | 147 +-
receiver/kafkareceiver/metadata.yaml | 11 +-
receiver/kafkareceiver/metrics.go | 49 +-
receiver/kafkareceiver/metrics_test.go | 28 +-
receiver/kafkareceiver/package_test.go | 17 +
receiver/kafkareceiver/unmarshaler.go | 13 +-
receiver/kafkareceiver/unmarshaler_test.go | 4 +-
receiver/kubeletstatsreceiver/README.md | 9 +-
receiver/kubeletstatsreceiver/config.go | 8 +-
receiver/kubeletstatsreceiver/config_test.go | 18 +-
receiver/kubeletstatsreceiver/doc.go | 3 -
.../kubeletstatsreceiver/documentation.md | 30 +-
receiver/kubeletstatsreceiver/e2e_test.go | 26 +-
receiver/kubeletstatsreceiver/factory.go | 6 +-
receiver/kubeletstatsreceiver/factory_test.go | 12 +-
.../generated_component_test.go | 61 +
receiver/kubeletstatsreceiver/go.mod | 139 +-
receiver/kubeletstatsreceiver/go.sum | 321 +-
.../internal/kubelet/accumulator_test.go | 2 +-
.../internal/kubelet/cpu.go | 1 +
.../internal/kubelet/metadata_test.go | 2 +-
.../internal/kubelet/package_test.go | 14 +
.../internal/kubelet/volume_test.go | 8 +-
.../internal/metadata/generated_config.go | 16 +-
.../metadata/generated_config_test.go | 6 +
.../internal/metadata/generated_metrics.go | 186 +-
.../metadata/generated_metrics_test.go | 63 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/metrics.go | 4 +
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 12 +
receiver/kubeletstatsreceiver/metadata.yaml | 42 +-
receiver/kubeletstatsreceiver/scraper.go | 2 +-
receiver/kubeletstatsreceiver/scraper_test.go | 194 +-
.../testdata/e2e/expected.yaml | 2 +-
.../scraper/test_scraper_expected.yaml | 3048 ++
..._metadata_Container_Metadata_expected.yaml | 1009 +
...ith_metadata_Volume_Metadata_expected.yaml | 506 +
...ith_metric_groups_all_groups_expected.yaml | 3075 ++
..._groups_only_container_group_expected.yaml | 1009 +
...etric_groups_only_node_group_expected.yaml | 155 +
...metric_groups_only_pod_group_expected.yaml | 1441 +
...ric_groups_only_volume_group_expected.yaml | 473 +
...c_groups_pod_and_node_groups_expected.yaml | 1595 +
.../test_scraper_with_percent_expected.yaml | 100 +
..._not_collect_detailed_labels_expected.yaml | 506 +
...els_empty_volume_name_in_pvc_expected.yaml | 459 +
...s_non_existent_volume_in_pvc_expected.yaml | 459 +
...pvc_labels_pvc_doesnot_exist_expected.yaml | 311 +
...r_with_pvc_labels_successful_expected.yaml | 530 +
receiver/lokireceiver/README.md | 5 +-
receiver/lokireceiver/config.go | 6 +-
receiver/lokireceiver/config_test.go | 16 +-
receiver/lokireceiver/factory.go | 15 +-
receiver/lokireceiver/factory_test.go | 6 +-
.../lokireceiver/generated_component_test.go | 61 +
receiver/lokireceiver/go.mod | 108 +-
receiver/lokireceiver/go.sum | 343 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/lokireceiver/internal/unmarshal.go | 192 +-
receiver/lokireceiver/loki.go | 30 +-
receiver/lokireceiver/loki_test.go | 8 +-
receiver/lokireceiver/metadata.yaml | 2 +-
receiver/lokireceiver/package_test.go | 14 +
receiver/memcachedreceiver/README.md | 6 +-
receiver/memcachedreceiver/config.go | 4 +-
receiver/memcachedreceiver/doc.go | 3 -
receiver/memcachedreceiver/factory.go | 10 +-
receiver/memcachedreceiver/factory_test.go | 6 +-
.../generated_component_test.go | 61 +
receiver/memcachedreceiver/go.mod | 99 +-
receiver/memcachedreceiver/go.sum | 289 +-
.../memcachedreceiver/integration_test.go | 1 -
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/memcachedreceiver/metadata.yaml | 4 +-
receiver/memcachedreceiver/package_test.go | 14 +
receiver/memcachedreceiver/scraper_test.go | 2 +-
receiver/mongodbatlasreceiver/README.md | 12 +-
receiver/mongodbatlasreceiver/access_logs.go | 2 +-
.../access_logs_integration_test.go | 3 +-
.../mongodbatlasreceiver/access_logs_test.go | 27 +-
receiver/mongodbatlasreceiver/alerts.go | 137 +-
.../alerts_integration_test.go | 4 +-
receiver/mongodbatlasreceiver/alerts_test.go | 21 +-
receiver/mongodbatlasreceiver/config.go | 39 +-
receiver/mongodbatlasreceiver/config_test.go | 85 +-
receiver/mongodbatlasreceiver/doc.go | 3 -
receiver/mongodbatlasreceiver/events.go | 2 +-
receiver/mongodbatlasreceiver/factory.go | 14 +-
receiver/mongodbatlasreceiver/factory_test.go | 2 +-
.../generated_component_test.go | 68 +
receiver/mongodbatlasreceiver/go.mod | 92 +-
receiver/mongodbatlasreceiver/go.sum | 268 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/mongodb_atlas_client.go | 18 +-
receiver/mongodbatlasreceiver/logs.go | 2 +-
receiver/mongodbatlasreceiver/metadata.yaml | 9 +-
receiver/mongodbatlasreceiver/receiver.go | 120 +-
.../mongodbatlasreceiver/receiver_test.go | 68 +-
receiver/mongodbreceiver/README.md | 16 +-
receiver/mongodbreceiver/config.go | 14 +-
receiver/mongodbreceiver/config_test.go | 46 +-
receiver/mongodbreceiver/doc.go | 3 -
receiver/mongodbreceiver/documentation.md | 50 -
receiver/mongodbreceiver/factory.go | 15 +-
receiver/mongodbreceiver/factory_test.go | 6 +-
.../generated_component_test.go | 48 +
receiver/mongodbreceiver/go.mod | 112 +-
receiver/mongodbreceiver/go.sum | 304 +-
receiver/mongodbreceiver/integration_test.go | 3 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_metrics.go | 112 +-
.../metadata/generated_metrics_test.go | 91 +-
.../internal/metadata/generated_status.go | 15 +-
.../metadata/metrics_database_attr_version.go | 260 +
.../internal/metadata/package_test.go | 14 +
receiver/mongodbreceiver/metadata.yaml | 41 +-
receiver/mongodbreceiver/metrics.go | 90 +-
receiver/mongodbreceiver/package_test.go | 14 +
receiver/mongodbreceiver/scraper.go | 48 +-
receiver/mongodbreceiver/scraper_test.go | 6 +-
.../testdata/integration/expected.4_0.yaml | 232 +-
.../testdata/integration/expected.4_4lpu.yaml | 200 +-
.../testdata/integration/expected.5_0.yaml | 216 +-
.../testdata/scraper/expected.yaml | 142 +-
receiver/mysqlreceiver/README.md | 8 +-
receiver/mysqlreceiver/client.go | 25 +-
receiver/mysqlreceiver/config.go | 35 +-
receiver/mysqlreceiver/config_test.go | 26 +
receiver/mysqlreceiver/factory.go | 16 +-
receiver/mysqlreceiver/factory_test.go | 8 +-
.../mysqlreceiver/generated_component_test.go | 61 +
receiver/mysqlreceiver/go.mod | 104 +-
receiver/mysqlreceiver/go.sum | 291 +-
receiver/mysqlreceiver/integration_test.go | 51 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/mysqlreceiver/metadata.yaml | 3 +-
receiver/mysqlreceiver/package_test.go | 14 +
receiver/mysqlreceiver/scraper.go | 7 +-
receiver/mysqlreceiver/scraper_test.go | 6 +-
receiver/mysqlreceiver/testdata/config.yaml | 8 +
receiver/namedpipereceiver/Makefile | 1 +
receiver/namedpipereceiver/README.md | 40 +
receiver/namedpipereceiver/doc.go | 8 +
.../generated_component_test.go | 62 +
receiver/namedpipereceiver/go.mod | 78 +
receiver/namedpipereceiver/go.sum | 187 +
.../internal/metadata/generated_status.go | 25 +
receiver/namedpipereceiver/metadata.yaml | 16 +
receiver/namedpipereceiver/namedpipe.go | 62 +
receiver/namedpipereceiver/namedpipe_test.go | 103 +
.../namedpipereceiver/testdata/config.yaml | 4 +
receiver/nginxreceiver/README.md | 4 +-
receiver/nginxreceiver/config.go | 6 +-
receiver/nginxreceiver/doc.go | 3 -
receiver/nginxreceiver/factory.go | 10 +-
receiver/nginxreceiver/factory_test.go | 6 +-
.../nginxreceiver/generated_component_test.go | 61 +
receiver/nginxreceiver/go.mod | 115 +-
receiver/nginxreceiver/go.sum | 377 +-
receiver/nginxreceiver/integration_test.go | 3 +-
.../internal/metadata/generated_config.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/nginxreceiver/metadata.yaml | 3 +-
receiver/nginxreceiver/package_test.go | 14 +
receiver/nginxreceiver/scraper.go | 6 +-
receiver/nginxreceiver/scraper_test.go | 15 +-
receiver/nsxtreceiver/README.md | 3 +-
receiver/nsxtreceiver/client.go | 4 +-
receiver/nsxtreceiver/client_test.go | 94 +-
receiver/nsxtreceiver/config.go | 10 +-
receiver/nsxtreceiver/config_test.go | 16 +-
receiver/nsxtreceiver/factory.go | 8 +-
receiver/nsxtreceiver/factory_test.go | 2 +-
.../nsxtreceiver/generated_component_test.go | 61 +
receiver/nsxtreceiver/go.mod | 87 +-
receiver/nsxtreceiver/go.sum | 265 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/nsxtreceiver/metadata.yaml | 3 +-
receiver/nsxtreceiver/package_test.go | 14 +
receiver/nsxtreceiver/scraper.go | 4 +-
receiver/nsxtreceiver/scraper_test.go | 8 +-
receiver/opencensusreceiver/README.md | 10 +-
receiver/opencensusreceiver/config.go | 4 +-
receiver/opencensusreceiver/config_test.go | 40 +-
receiver/opencensusreceiver/factory.go | 27 +-
receiver/opencensusreceiver/factory_test.go | 49 +-
.../generated_component_test.go | 68 +
receiver/opencensusreceiver/go.mod | 104 +-
receiver/opencensusreceiver/go.sum | 582 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/ocmetrics/opencensus.go | 4 -
.../internal/ocmetrics/opencensus_test.go | 29 +-
.../internal/ocmetrics/package_test.go | 14 +
.../internal/octrace/observability_test.go | 18 +-
.../internal/octrace/opencensus.go | 7 +-
.../internal/octrace/opencensus_test.go | 22 +-
.../internal/octrace/package_test.go | 14 +
receiver/opencensusreceiver/metadata.yaml | 7 +-
receiver/opencensusreceiver/opencensus.go | 227 +-
.../opencensusreceiver/opencensus_test.go | 159 +-
receiver/opencensusreceiver/options.go | 6 +-
receiver/opencensusreceiver/package_test.go | 14 +
receiver/oracledbreceiver/README.md | 3 +-
receiver/oracledbreceiver/config.go | 14 +-
receiver/oracledbreceiver/config_test.go | 54 +-
receiver/oracledbreceiver/factory.go | 12 +-
receiver/oracledbreceiver/factory_test.go | 3 +
.../generated_component_test.go | 61 +
receiver/oracledbreceiver/go.mod | 58 +-
receiver/oracledbreceiver/go.sum | 205 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_metrics.go | 7 +-
.../metadata/generated_metrics_test.go | 2 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/oracledbreceiver/metadata.yaml | 6 +-
receiver/oracledbreceiver/package_test.go | 14 +
receiver/oracledbreceiver/scraper.go | 64 +-
receiver/oracledbreceiver/scraper_test.go | 39 +-
receiver/osqueryreceiver/Makefile | 1 +
receiver/osqueryreceiver/README.md | 41 +
receiver/osqueryreceiver/config.go | 39 +
receiver/osqueryreceiver/config_test.go | 19 +
receiver/osqueryreceiver/doc.go | 7 +
receiver/osqueryreceiver/factory.go | 17 +
receiver/osqueryreceiver/factory_test.go | 22 +
receiver/osqueryreceiver/go.mod | 43 +
.../osqueryreceiver}/go.sum | 112 +-
.../internal/metadata/generated_status.go | 25 +
receiver/osqueryreceiver/metadata.yaml | 14 +
receiver/osqueryreceiver/package_test.go | 14 +
receiver/otelarrowreceiver/Makefile | 1 +
receiver/otelarrowreceiver/README.md | 198 +
receiver/otelarrowreceiver/config.go | 52 +
receiver/otelarrowreceiver/config.md | 99 +
receiver/otelarrowreceiver/config_test.go | 125 +
receiver/otelarrowreceiver/doc.go | 6 +
receiver/otelarrowreceiver/factory.go | 120 +
receiver/otelarrowreceiver/factory_test.go | 216 +
.../generated_component_test.go | 75 +
receiver/otelarrowreceiver/go.mod | 89 +
receiver/otelarrowreceiver/go.sum | 250 +
.../otelarrowreceiver/internal/arrow/Makefile | 7 +
.../otelarrowreceiver/internal/arrow/arrow.go | 83 +
.../otelarrowreceiver/internal/logs/otlp.go | 37 +
.../internal/metadata/generated_status.go | 27 +
.../internal/metrics/otlp.go | 37 +
.../otelarrowreceiver/internal/trace/otlp.go | 37 +
receiver/otelarrowreceiver/metadata.yaml | 10 +
receiver/otelarrowreceiver/otelarrow.go | 206 +
.../testdata/bad_proto_config.yaml | 3 +
.../otelarrowreceiver/testdata/config.yaml | 32 +
.../otelarrowreceiver/testdata/default.yaml | 1 +
.../otelarrowreceiver/testdata/only_grpc.yaml | 3 +
receiver/otelarrowreceiver/testdata/uds.yaml | 5 +
receiver/otlpjsonfilereceiver/README.md | 3 +-
receiver/otlpjsonfilereceiver/file.go | 12 +-
receiver/otlpjsonfilereceiver/file_test.go | 39 +-
.../generated_component_test.go | 75 +
receiver/otlpjsonfilereceiver/go.mod | 74 +-
receiver/otlpjsonfilereceiver/go.sum | 249 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/otlpjsonfilereceiver/metadata.yaml | 9 +-
receiver/otlpjsonfilereceiver/package_test.go | 14 +
receiver/podmanreceiver/README.md | 11 +-
receiver/podmanreceiver/config.go | 7 +-
receiver/podmanreceiver/config_test.go | 14 +-
receiver/podmanreceiver/documentation.md | 120 +
receiver/podmanreceiver/factory.go | 16 +-
receiver/podmanreceiver/factory_test.go | 3 +-
.../generated_component_test.go | 49 +
receiver/podmanreceiver/go.mod | 62 +-
receiver/podmanreceiver/go.sum | 215 +-
.../internal/metadata/generated_config.go | 134 +
.../metadata/generated_config_test.go | 142 +
.../internal/metadata/generated_metrics.go | 775 +
.../metadata/generated_metrics_test.go | 286 +
.../internal/metadata/generated_resource.go | 57 +
.../metadata/generated_resource_test.go | 58 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/testdata/config.yaml | 67 +
receiver/podmanreceiver/libpod_client.go | 1 -
receiver/podmanreceiver/libpod_client_test.go | 9 +-
receiver/podmanreceiver/libpod_data.go | 1 -
receiver/podmanreceiver/metadata.yaml | 124 +-
receiver/podmanreceiver/metrics.go | 131 -
receiver/podmanreceiver/package_test.go | 14 +
receiver/podmanreceiver/podman.go | 1 -
receiver/podmanreceiver/podman_connection.go | 5 +-
.../podmanreceiver/podman_connection_test.go | 1 -
receiver/podmanreceiver/podman_test.go | 18 +-
receiver/podmanreceiver/receiver.go | 74 +-
receiver/podmanreceiver/receiver_test.go | 27 +-
receiver/podmanreceiver/receiver_windows.go | 8 +-
...metrics_test.go => record_metrics_test.go} | 23 +-
receiver/postgresqlreceiver/README.md | 39 +-
receiver/postgresqlreceiver/client.go | 86 +-
receiver/postgresqlreceiver/client_factory.go | 155 +
receiver/postgresqlreceiver/config.go | 26 +-
receiver/postgresqlreceiver/config_test.go | 48 +-
receiver/postgresqlreceiver/documentation.md | 3 +-
receiver/postgresqlreceiver/factory.go | 23 +-
receiver/postgresqlreceiver/factory_test.go | 6 +-
.../generated_component_test.go | 61 +
receiver/postgresqlreceiver/go.mod | 105 +-
receiver/postgresqlreceiver/go.sum | 287 +-
.../postgresqlreceiver/integration_test.go | 21 +-
.../internal/metadata/generated_config.go | 8 +-
.../metadata/generated_config_test.go | 4 +
.../metadata/generated_metrics_test.go | 1 +
.../internal/metadata/generated_resource.go | 7 +
.../metadata/generated_resource_test.go | 10 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
receiver/postgresqlreceiver/metadata.yaml | 11 +-
receiver/postgresqlreceiver/package_test.go | 14 +
receiver/postgresqlreceiver/scraper.go | 99 +-
receiver/postgresqlreceiver/scraper_test.go | 385 +-
.../postgresqlreceiver/testdata/config.yaml | 17 +-
.../testdata/integration/expected_all_db.yaml | 543 +-
.../integration/expected_all_db_connpool.yaml | 1266 +
.../expected_all_db_schemaattr.yaml | 1278 +
.../integration/expected_multi_db.yaml | 513 +-
.../expected_multi_db_connpool.yaml | 1189 +
.../expected_multi_db_schemaattr.yaml | 1201 +
.../integration/expected_single_db.yaml | 305 +-
.../expected_single_db_connpool.yaml | 656 +
.../expected_single_db_schemaattr.yaml | 659 +
.../testdata/scraper/multiple/exclude.yaml | 991 +
.../scraper/multiple/exclude_schemaattr.yaml | 1015 +
.../testdata/scraper/multiple/expected.yaml | 64 +-
...e_lag.yaml => expected_imprecise_lag.yaml} | 64 +-
.../expected_imprecise_lag_schemaattr.yaml | 1638 +
.../scraper/multiple/expected_schemaattr.yaml | 1638 +
.../testdata/scraper/otel/expected.yaml | 44 +-
.../otel/expected_default_metrics.yaml | 39 +-
.../expected_default_metrics_schemaattr.yaml | 578 +
.../scraper/otel/expected_schemaattr.yaml | 684 +
receiver/prometheusreceiver/README.md | 35 +-
receiver/prometheusreceiver/config.go | 206 +-
receiver/prometheusreceiver/config_test.go | 100 +-
receiver/prometheusreceiver/factory.go | 21 +-
receiver/prometheusreceiver/factory_test.go | 19 +-
.../generated_component_test.go | 61 +
receiver/prometheusreceiver/go.mod | 258 +-
receiver/prometheusreceiver/go.sum | 605 +-
.../prometheusreceiver/internal/appendable.go | 33 +-
.../prometheusreceiver/internal/metadata.go | 16 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metricfamily.go | 189 +-
.../internal/metricfamily_test.go | 249 +-
.../internal/metrics_adjuster.go | 61 +-
.../internal/metrics_adjuster_test.go | 70 +-
.../internal/metricsutil_test.go | 93 +
.../internal/staleness_end_to_end_test.go | 18 +-
.../internal/starttimemetricadjuster.go | 9 +-
.../internal/starttimemetricadjuster_test.go | 9 +-
.../internal/transaction.go | 192 +-
.../internal/transaction_test.go | 411 +-
receiver/prometheusreceiver/internal/util.go | 21 +-
.../prometheusreceiver/internal/util_test.go | 67 +-
receiver/prometheusreceiver/metadata.yaml | 11 +-
.../prometheusreceiver/metrics_receiver.go | 94 +-
.../metrics_receiver_helper_test.go | 106 +-
.../metrics_receiver_honor_timestamp_test.go | 15 +-
.../metrics_receiver_labels_test.go | 27 +-
...ics_receiver_metric_name_normalize_test.go | 4 +-
.../metrics_receiver_non_numerical_test.go | 8 +-
.../metrics_receiver_open_metrics_test.go | 8 +-
.../metrics_receiver_protobuf_test.go | 613 +
.../metrics_receiver_target_allocator_test.go | 26 +-
.../metrics_receiver_test.go | 67 +-
.../metrics_reciever_metric_rename_test.go | 9 +-
receiver/prometheusreceiver/package_test.go | 17 +
.../prometheusreceiver/testdata/config.yaml | 1 -
.../testdata/config_target_allocator.yaml | 3 +
...prometheus-non-existent-scrape-config.yaml | 19 +
.../metrics | 0
.../generated_component_test.go | 62 +
receiver/pulsarreceiver/go.mod | 89 +-
receiver/pulsarreceiver/go.sum | 195 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/pulsarreceiver/metadata.yaml | 5 +
receiver/pulsarreceiver/package_test.go | 15 +
receiver/purefareceiver/README.md | 3 +-
receiver/purefareceiver/config.go | 2 +-
receiver/purefareceiver/factory.go | 4 +-
receiver/purefareceiver/factory_test.go | 5 +-
.../generated_component_test.go | 61 +
receiver/purefareceiver/go.mod | 201 +-
receiver/purefareceiver/go.sum | 565 +-
.../internal/bearertoken_test.go | 15 +-
.../internal/metadata/generated_status.go | 15 +-
.../purefareceiver/internal/package_test.go | 17 +
.../purefareceiver/internal/scraper_test.go | 4 +-
receiver/purefareceiver/metadata.yaml | 3 +-
receiver/purefareceiver/package_test.go | 15 +
receiver/purefareceiver/receiver.go | 2 +-
receiver/purefareceiver/receiver_test.go | 28 +-
receiver/purefbreceiver/README.md | 3 +-
receiver/purefbreceiver/config.go | 2 +-
receiver/purefbreceiver/factory.go | 2 +-
receiver/purefbreceiver/factory_test.go | 2 +-
.../generated_component_test.go | 61 +
receiver/purefbreceiver/go.mod | 201 +-
receiver/purefbreceiver/go.sum | 565 +-
.../internal/baerertoken_test.go | 15 +-
.../internal/metadata/generated_status.go | 15 +-
.../purefbreceiver/internal/package_test.go | 17 +
.../purefbreceiver/internal/scraper_test.go | 4 +-
receiver/purefbreceiver/metadata.yaml | 3 +-
receiver/purefbreceiver/metrics_receiver.go | 2 +-
.../purefbreceiver/metrics_receiver_test.go | 26 +-
receiver/purefbreceiver/package_test.go | 15 +
receiver/rabbitmqreceiver/README.md | 6 +-
receiver/rabbitmqreceiver/client.go | 4 +-
receiver/rabbitmqreceiver/client_test.go | 20 +-
receiver/rabbitmqreceiver/config.go | 21 +-
receiver/rabbitmqreceiver/config_test.go | 23 +-
receiver/rabbitmqreceiver/factory.go | 10 +-
receiver/rabbitmqreceiver/factory_test.go | 4 +-
.../generated_component_test.go | 61 +
receiver/rabbitmqreceiver/go.mod | 87 +-
receiver/rabbitmqreceiver/go.sum | 246 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/rabbitmqreceiver/metadata.yaml | 4 +-
receiver/rabbitmqreceiver/package_test.go | 14 +
receiver/rabbitmqreceiver/scraper.go | 4 +-
receiver/rabbitmqreceiver/scraper_test.go | 18 +-
receiver/receivercreator/README.md | 153 +-
receiver/receivercreator/config.go | 6 +-
receiver/receivercreator/config_expansion.go | 2 +-
receiver/receivercreator/config_test.go | 29 +-
receiver/receivercreator/factory.go | 45 +-
receiver/receivercreator/fixtures_test.go | 19 +
.../generated_component_test.go | 75 +
receiver/receivercreator/go.mod | 135 +-
receiver/receivercreator/go.sum | 651 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/receivercreator/metadata.yaml | 3 +-
.../receivercreator/observerhandler_test.go | 66 +-
receiver/receivercreator/package_test.go | 14 +
receiver/receivercreator/receiver.go | 59 +-
receiver/receivercreator/receiver_test.go | 22 +-
receiver/receivercreator/rules.go | 10 +-
receiver/receivercreator/rules_test.go | 1 +
receiver/receivercreator/runner.go | 6 +-
receiver/receivercreator/runner_test.go | 6 +-
receiver/receivercreator/testdata/config.yaml | 2 +
receiver/redisreceiver/README.md | 5 +-
receiver/redisreceiver/client.go | 6 +-
receiver/redisreceiver/client_test.go | 2 +-
receiver/redisreceiver/config.go | 6 +-
receiver/redisreceiver/config_test.go | 8 +-
receiver/redisreceiver/doc.go | 3 -
receiver/redisreceiver/documentation.md | 8 +
receiver/redisreceiver/factory.go | 14 +-
.../redisreceiver/generated_component_test.go | 61 +
receiver/redisreceiver/go.mod | 106 +-
receiver/redisreceiver/go.sum | 342 +-
receiver/redisreceiver/info_test.go | 2 +-
receiver/redisreceiver/integration_test.go | 47 +-
.../internal/metadata/generated_config.go | 8 +-
.../metadata/generated_config_test.go | 2 +
.../internal/metadata/generated_metrics.go | 57 +
.../metadata/generated_metrics_test.go | 15 +
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 4 +
receiver/redisreceiver/keyspace_test.go | 4 +-
receiver/redisreceiver/latencystats_test.go | 4 +-
receiver/redisreceiver/metadata.yaml | 14 +-
receiver/redisreceiver/metric_functions.go | 1 +
receiver/redisreceiver/package_test.go | 14 +
receiver/redisreceiver/redis_scraper.go | 6 +-
receiver/redisreceiver/redis_scraper_test.go | 8 +-
receiver/redisreceiver/redis_svc_test.go | 2 +-
.../testdata/integration/Dockerfile.cluster | 31 +
.../testdata/integration/cluster.sh | 43 +
.../testdata/integration/configure-nodes.sh | 12 +
.../integration/expected-cluster.yaml | 292 +
.../{expected.yaml => expected-old.yaml} | 0
.../testdata/integration/redis-cluster.conf | 5 +
receiver/riakreceiver/README.md | 6 +-
receiver/riakreceiver/client.go | 4 +-
receiver/riakreceiver/client_test.go | 18 +-
receiver/riakreceiver/config.go | 10 +-
receiver/riakreceiver/config_test.go | 22 +-
receiver/riakreceiver/factory.go | 10 +-
receiver/riakreceiver/factory_test.go | 4 +-
.../riakreceiver/generated_component_test.go | 61 +
receiver/riakreceiver/go.mod | 85 +-
receiver/riakreceiver/go.sum | 246 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/riakreceiver/metadata.yaml | 4 +-
receiver/riakreceiver/package_test.go | 14 +
receiver/riakreceiver/scraper.go | 4 +-
receiver/riakreceiver/scraper_test.go | 18 +-
receiver/saphanareceiver/README.md | 5 +-
receiver/saphanareceiver/client.go | 4 +-
receiver/saphanareceiver/client_test.go | 16 +-
receiver/saphanareceiver/config.go | 6 +-
receiver/saphanareceiver/config_test.go | 2 +-
receiver/saphanareceiver/doc.go | 3 -
receiver/saphanareceiver/factory.go | 12 +-
receiver/saphanareceiver/factory_test.go | 6 +-
.../generated_component_test.go | 61 +
receiver/saphanareceiver/go.mod | 76 +-
receiver/saphanareceiver/go.sum | 229 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/saphanareceiver/metadata.yaml | 3 +-
receiver/saphanareceiver/package_test.go | 14 +
receiver/saphanareceiver/queries.go | 74 +-
receiver/saphanareceiver/scraper.go | 2 +-
receiver/sapmreceiver/README.md | 6 +-
receiver/sapmreceiver/config.go | 2 +-
receiver/sapmreceiver/config_test.go | 14 +-
receiver/sapmreceiver/factory.go | 9 +-
.../sapmreceiver/generated_component_test.go | 61 +
receiver/sapmreceiver/go.mod | 103 +-
receiver/sapmreceiver/go.sum | 285 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/sapmreceiver/metadata.yaml | 5 +-
receiver/sapmreceiver/package_test.go | 14 +
receiver/sapmreceiver/trace_receiver.go | 8 +-
receiver/sapmreceiver/trace_receiver_test.go | 52 +-
receiver/signalfxreceiver/README.md | 7 +-
receiver/signalfxreceiver/config.go | 6 +-
receiver/signalfxreceiver/config_test.go | 10 +-
receiver/signalfxreceiver/factory.go | 9 +-
.../generated_component_test.go | 68 +
receiver/signalfxreceiver/go.mod | 106 +-
receiver/signalfxreceiver/go.sum | 248 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/signalfxreceiver/metadata.yaml | 3 +-
receiver/signalfxreceiver/receiver.go | 164 +-
receiver/signalfxreceiver/receiver_test.go | 314 +-
receiver/simpleprometheusreceiver/README.md | 5 +-
receiver/simpleprometheusreceiver/config.go | 4 +-
.../simpleprometheusreceiver/config_test.go | 12 +-
.../examples/federation/prom-counter/go.mod | 29 +-
.../examples/federation/prom-counter/go.sum | 66 +-
receiver/simpleprometheusreceiver/factory.go | 4 +-
.../generated_component_test.go | 61 +
receiver/simpleprometheusreceiver/go.mod | 199 +-
receiver/simpleprometheusreceiver/go.sum | 565 +-
.../internal/metadata/generated_status.go | 15 +-
.../simpleprometheusreceiver/metadata.yaml | 6 +-
.../simpleprometheusreceiver/package_test.go | 17 +
receiver/simpleprometheusreceiver/receiver.go | 13 +-
.../simpleprometheusreceiver/receiver_test.go | 51 +-
receiver/skywalkingreceiver/README.md | 13 +-
receiver/skywalkingreceiver/config.go | 6 +-
receiver/skywalkingreceiver/config_test.go | 10 +-
receiver/skywalkingreceiver/factory.go | 19 +-
receiver/skywalkingreceiver/factory_test.go | 42 +-
.../generated_component_test.go | 68 +
receiver/skywalkingreceiver/go.mod | 97 +-
receiver/skywalkingreceiver/go.sum | 223 +-
.../internal/metadata/generated_status.go | 17 +-
receiver/skywalkingreceiver/metadata.yaml | 9 +-
receiver/skywalkingreceiver/package_test.go | 14 +
.../skywalkingreceiver/skywalking_receiver.go | 22 +-
.../skywalking_receiver_test.go | 15 +-
receiver/snmpreceiver/README.md | 5 +-
receiver/snmpreceiver/client.go | 8 +-
receiver/snmpreceiver/client_test.go | 52 +-
receiver/snmpreceiver/config.go | 2 +-
receiver/snmpreceiver/factory.go | 6 +-
receiver/snmpreceiver/factory_test.go | 2 +-
.../snmpreceiver/generated_component_test.go | 61 +
receiver/snmpreceiver/go.mod | 159 +-
receiver/snmpreceiver/go.sum | 695 +-
receiver/snmpreceiver/integration_test.go | 1 -
.../internal/metadata/generated_status.go | 15 +-
receiver/snmpreceiver/metadata.yaml | 15 +-
receiver/snmpreceiver/package_test.go | 14 +
.../integration/docker/snmp_agent.Dockerfile | 2 +-
receiver/snowflakereceiver/client.go | 8 +-
receiver/snowflakereceiver/client_test.go | 7 +-
receiver/snowflakereceiver/config.go | 18 +-
receiver/snowflakereceiver/config_test.go | 52 +-
receiver/snowflakereceiver/factory.go | 16 +-
receiver/snowflakereceiver/factory_test.go | 21 +-
.../generated_component_test.go | 61 +
receiver/snowflakereceiver/go.mod | 95 +-
receiver/snowflakereceiver/go.sum | 288 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/snowflakereceiver/metadata.yaml | 4 +
receiver/snowflakereceiver/package_test.go | 15 +
receiver/snowflakereceiver/scraper.go | 89 +-
receiver/snowflakereceiver/scraper_test.go | 1 +
receiver/solacereceiver/README.md | 4 +-
receiver/solacereceiver/config.go | 2 +-
receiver/solacereceiver/config_test.go | 2 +-
receiver/solacereceiver/factory.go | 2 +-
receiver/solacereceiver/factory_test.go | 16 +-
.../generated_component_test.go | 48 +
receiver/solacereceiver/go.mod | 60 +-
receiver/solacereceiver/go.sum | 127 +-
.../internal/metadata/generated_status.go | 15 +-
.../solacereceiver/messaging_service_test.go | 20 +-
receiver/solacereceiver/metadata.yaml | 12 +-
receiver/solacereceiver/observability.go | 2 +-
receiver/solacereceiver/package_test.go | 17 +
receiver/solacereceiver/receiver.go | 9 +-
receiver/solacereceiver/receiver_test.go | 52 +-
.../unmarshaller_receive_test.go | 6 +-
receiver/splunkenterprisereceiver/README.md | 34 +-
receiver/splunkenterprisereceiver/client.go | 148 +-
.../splunkenterprisereceiver/client_test.go | 42 +-
receiver/splunkenterprisereceiver/config.go | 55 +-
.../splunkenterprisereceiver/config_test.go | 81 +-
.../splunkenterprisereceiver/documentation.md | 307 +-
receiver/splunkenterprisereceiver/factory.go | 17 +-
.../splunkenterprisereceiver/factory_test.go | 31 +-
.../generated_component_test.go | 61 +
receiver/splunkenterprisereceiver/go.mod | 83 +-
receiver/splunkenterprisereceiver/go.sum | 243 +-
.../internal/metadata/generated_config.go | 82 +-
.../metadata/generated_config_test.go | 36 +
.../internal/metadata/generated_metrics.go | 1293 +-
.../metadata/generated_metrics_test.go | 364 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/metadata/testdata/config.yaml | 72 +
.../splunkenterprisereceiver/metadata.yaml | 173 +-
.../splunkenterprisereceiver/package_test.go | 14 +
receiver/splunkenterprisereceiver/scraper.go | 1168 +-
.../splunkenterprisereceiver/scraper_test.go | 29 +-
.../splunkenterprisereceiver/search_result.go | 13 +-
.../testdata/config.yaml | 18 +-
.../testdata/scraper/expected.yaml | 18 +-
receiver/splunkhecreceiver/README.md | 10 +-
receiver/splunkhecreceiver/config.go | 2 +-
receiver/splunkhecreceiver/config_test.go | 10 +-
receiver/splunkhecreceiver/factory.go | 7 +-
receiver/splunkhecreceiver/factory_test.go | 4 +-
.../generated_component_test.go | 68 +
receiver/splunkhecreceiver/go.mod | 99 +-
receiver/splunkhecreceiver/go.sum | 240 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/splunkhecreceiver/metadata.yaml | 3 +-
receiver/splunkhecreceiver/package_test.go | 14 +
receiver/splunkhecreceiver/receiver.go | 37 +-
receiver/splunkhecreceiver/receiver_test.go | 161 +-
.../splunk_to_logdata_test.go | 8 +-
.../splunkhec_to_metricdata_test.go | 4 +-
receiver/sqlqueryreceiver/README.md | 17 +-
receiver/sqlqueryreceiver/config.go | 165 +-
receiver/sqlqueryreceiver/config_test.go | 73 +-
receiver/sqlqueryreceiver/db_client.go | 64 -
receiver/sqlqueryreceiver/factory.go | 5 +-
.../generated_component_test.go | 68 +
receiver/sqlqueryreceiver/go.mod | 169 +-
receiver/sqlqueryreceiver/go.sum | 457 +-
receiver/sqlqueryreceiver/integration_test.go | 134 +-
.../internal/metadata/generated_status.go | 17 +-
receiver/sqlqueryreceiver/logs_receiver.go | 64 +-
.../sqlqueryreceiver/logs_receiver_test.go | 10 +-
receiver/sqlqueryreceiver/metadata.yaml | 6 +-
receiver/sqlqueryreceiver/package_test.go | 15 +
receiver/sqlqueryreceiver/receiver.go | 34 +-
receiver/sqlqueryreceiver/receiver_test.go | 56 +-
receiver/sqlqueryreceiver/scraper.go | 88 -
receiver/sqlserverreceiver/README.md | 7 +-
receiver/sqlserverreceiver/config.go | 8 +-
receiver/sqlserverreceiver/config_test.go | 6 +-
receiver/sqlserverreceiver/factory.go | 6 +-
receiver/sqlserverreceiver/factory_others.go | 1 -
.../sqlserverreceiver/factory_others_test.go | 1 -
receiver/sqlserverreceiver/factory_test.go | 2 +-
receiver/sqlserverreceiver/factory_windows.go | 11 +-
.../sqlserverreceiver/factory_windows_test.go | 3 +-
.../generated_component_test.go | 62 +
receiver/sqlserverreceiver/go.mod | 67 +-
receiver/sqlserverreceiver/go.sum | 207 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/sqlserverreceiver/metadata.yaml | 8 +-
receiver/sqlserverreceiver/package_test.go | 14 +
receiver/sqlserverreceiver/queries.go | 64 +
receiver/sqlserverreceiver/queries_test.go | 30 +
receiver/sqlserverreceiver/recorders.go | 1 -
receiver/sqlserverreceiver/recorders_test.go | 1 -
receiver/sqlserverreceiver/scraper.go | 11 +-
receiver/sqlserverreceiver/scraper_test.go | 27 +-
.../databaseIOQueryWithInstanceName.txt | 42 +
.../databaseIOQueryWithoutInstanceName.txt | 42 +
receiver/sshcheckreceiver/README.md | 4 +-
receiver/sshcheckreceiver/config.go | 6 +-
receiver/sshcheckreceiver/config_test.go | 13 +-
receiver/sshcheckreceiver/factory.go | 8 +-
receiver/sshcheckreceiver/factory_test.go | 2 +-
.../generated_component_test.go | 62 +
receiver/sshcheckreceiver/go.mod | 71 +-
receiver/sshcheckreceiver/go.sum | 241 +-
.../internal/configssh/configssh_test.go | 6 +-
.../internal/configssh/package_test.go | 14 +
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/sshcheckreceiver/metadata.yaml | 4 +-
receiver/sshcheckreceiver/package_test.go | 14 +
receiver/sshcheckreceiver/scraper_test.go | 66 +-
receiver/statsdreceiver/README.md | 14 +-
receiver/statsdreceiver/config.go | 3 +-
receiver/statsdreceiver/config_test.go | 9 +-
receiver/statsdreceiver/factory.go | 5 +-
receiver/statsdreceiver/factory_test.go | 25 -
.../generated_component_test.go | 61 +
receiver/statsdreceiver/go.mod | 77 +-
receiver/statsdreceiver/go.sum | 603 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/protocol/metric_translator.go | 9 +-
.../internal/protocol/package_test.go | 14 +
.../internal/protocol/parser.go | 2 +-
.../internal/protocol/statsd_parser.go | 51 +-
.../internal/protocol/statsd_parser_test.go | 671 +-
.../internal/transport/client/client.go | 68 +-
.../internal/transport/mock_reporter.go | 11 -
.../internal/transport/package_test.go | 14 +
.../internal/transport/server.go | 21 -
.../internal/transport/server_test.go | 99 +-
.../internal/transport/tcp_server.go | 41 +-
.../internal/transport/transport.go | 63 +
.../internal/transport/udp_server.go | 35 +-
receiver/statsdreceiver/metadata.yaml | 5 +-
receiver/statsdreceiver/package_test.go | 14 +
receiver/statsdreceiver/receiver.go | 25 +-
receiver/statsdreceiver/receiver_test.go | 54 +-
receiver/statsdreceiver/reporter.go | 55 -
receiver/statsdreceiver/reporter_test.go | 42 -
receiver/statsdreceiver/testdata/config.yaml | 2 +-
receiver/syslogreceiver/README.md | 8 +-
.../generated_component_test.go | 61 +
receiver/syslogreceiver/go.mod | 76 +-
receiver/syslogreceiver/go.sum | 256 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/syslogreceiver/metadata.yaml | 10 +-
receiver/syslogreceiver/package_test.go | 14 +
receiver/syslogreceiver/syslog.go | 2 +-
receiver/tcplogreceiver/README.md | 5 +-
.../generated_component_test.go | 61 +
receiver/tcplogreceiver/go.mod | 76 +-
receiver/tcplogreceiver/go.sum | 256 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/tcplogreceiver/metadata.yaml | 7 +-
receiver/tcplogreceiver/package_test.go | 14 +
receiver/udplogreceiver/README.md | 4 +-
.../generated_component_test.go | 61 +
receiver/udplogreceiver/go.mod | 72 +-
receiver/udplogreceiver/go.sum | 248 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/udplogreceiver/metadata.yaml | 9 +-
receiver/udplogreceiver/package_test.go | 14 +
receiver/vcenterreceiver/README.md | 44 +-
receiver/vcenterreceiver/client.go | 13 +-
receiver/vcenterreceiver/client_test.go | 8 +-
receiver/vcenterreceiver/config.go | 12 +-
receiver/vcenterreceiver/config_test.go | 30 +-
receiver/vcenterreceiver/factory.go | 12 +-
receiver/vcenterreceiver/factory_test.go | 14 -
.../generated_component_test.go | 61 +
receiver/vcenterreceiver/go.mod | 101 +-
receiver/vcenterreceiver/go.sum | 285 +-
receiver/vcenterreceiver/integration_test.go | 7 +-
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
.../internal/mockserver/README.md | 2 +-
.../internal/mockserver/client_mock.go | 6 +
.../responses/resource-pool-single.xml | 17 +
.../responses/resource-pool-summary.xml | 14 +-
receiver/vcenterreceiver/metadata.yaml | 4 +-
receiver/vcenterreceiver/metrics.go | 90 +-
receiver/vcenterreceiver/package_test.go | 14 +
receiver/vcenterreceiver/scraper.go | 137 +-
receiver/vcenterreceiver/scraper_test.go | 32 -
.../testdata/integration/expected.yaml | 575 +-
.../testdata/metrics/expected.yaml | 1133 +-
.../metrics/expected_with_object.yaml | 3067 --
.../metrics/expected_without_direction.yaml | 1260 -
receiver/wavefrontreceiver/README.md | 3 +-
receiver/wavefrontreceiver/config.go | 10 +-
receiver/wavefrontreceiver/config_test.go | 2 +-
receiver/wavefrontreceiver/factory.go | 11 +-
.../generated_component_test.go | 61 +
receiver/wavefrontreceiver/go.mod | 65 +-
receiver/wavefrontreceiver/go.sum | 205 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/wavefrontreceiver/metadata.yaml | 4 +-
receiver/wavefrontreceiver/package_test.go | 14 +
receiver/wavefrontreceiver/receiver.go | 4 +-
.../wavefrontreceiver/wavefront_parser.go | 75 +-
.../wavefront_parser_test.go | 25 +-
receiver/webhookeventreceiver/README.md | 3 +-
receiver/webhookeventreceiver/config.go | 14 +-
receiver/webhookeventreceiver/config_test.go | 14 +-
receiver/webhookeventreceiver/factory.go | 3 +-
receiver/webhookeventreceiver/factory_test.go | 22 +-
.../generated_component_test.go | 61 +
receiver/webhookeventreceiver/go.mod | 76 +-
receiver/webhookeventreceiver/go.sum | 241 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/webhookeventreceiver/metadata.yaml | 7 +-
receiver/webhookeventreceiver/package_test.go | 14 +
receiver/webhookeventreceiver/receiver.go | 14 +-
.../webhookeventreceiver/receiver_test.go | 7 +-
receiver/webhookeventreceiver/req_to_log.go | 2 +-
.../webhookeventreceiver/req_to_log_test.go | 4 +-
receiver/windowseventlogreceiver/README.md | 7 +-
.../windowseventlogreceiver/factory_test.go | 34 +
.../generated_component_test.go | 62 +
receiver/windowseventlogreceiver/go.mod | 72 +-
receiver/windowseventlogreceiver/go.sum | 248 +-
.../internal/metadata/generated_status.go | 15 +-
.../windowseventlogreceiver/metadata.yaml | 9 +-
.../windowseventlogreceiver/package_test.go | 14 +
receiver/windowseventlogreceiver/receiver.go | 30 +
.../receiver_others.go | 16 -
.../receiver_others_test.go | 1 -
.../receiver_windows.go | 17 +-
.../receiver_windows_test.go | 33 +-
.../windowsperfcountersreceiver/README.md | 6 +-
.../windowsperfcountersreceiver/config.go | 2 +-
.../config_test.go | 10 +-
.../windowsperfcountersreceiver/factory.go | 2 +-
.../factory_others.go | 1 -
.../factory_others_test.go | 1 -
.../factory_windows.go | 5 +-
.../factory_windows_test.go | 1 -
.../generated_component_test.go | 62 +
receiver/windowsperfcountersreceiver/go.mod | 65 +-
receiver/windowsperfcountersreceiver/go.sum | 205 +-
.../internal/metadata/generated_status.go | 15 +-
.../windowsperfcountersreceiver/metadata.yaml | 7 +-
.../package_test.go | 14 +
.../windowsperfcounters_scraper.go | 8 +-
.../windowsperfcounters_scraper_test.go | 22 +-
receiver/zipkinreceiver/README.md | 10 +-
receiver/zipkinreceiver/config.go | 2 +-
receiver/zipkinreceiver/config_test.go | 4 +-
receiver/zipkinreceiver/factory.go | 6 +-
.../generated_component_test.go | 61 +
receiver/zipkinreceiver/go.mod | 95 +-
receiver/zipkinreceiver/go.sum | 271 +-
.../internal/metadata/generated_status.go | 15 +-
receiver/zipkinreceiver/metadata.yaml | 7 +-
receiver/zipkinreceiver/package_test.go | 14 +
receiver/zipkinreceiver/trace_receiver.go | 15 +-
.../zipkinreceiver/trace_receiver_test.go | 25 +-
receiver/zookeeperreceiver/README.md | 8 +-
receiver/zookeeperreceiver/config.go | 6 +-
receiver/zookeeperreceiver/doc.go | 3 -
receiver/zookeeperreceiver/factory.go | 14 +-
receiver/zookeeperreceiver/factory_test.go | 8 +-
.../generated_component_test.go | 61 +
receiver/zookeeperreceiver/go.mod | 99 +-
receiver/zookeeperreceiver/go.sum | 285 +-
.../zookeeperreceiver/integration_test.go | 1 -
.../internal/metadata/generated_config.go | 4 +-
.../internal/metadata/generated_status.go | 15 +-
.../internal/metadata/package_test.go | 14 +
receiver/zookeeperreceiver/metadata.yaml | 7 +-
receiver/zookeeperreceiver/metrics.go | 2 +-
receiver/zookeeperreceiver/package_test.go | 14 +
receiver/zookeeperreceiver/scraper.go | 6 +-
receiver/zookeeperreceiver/scraper_test.go | 45 +-
renovate.json | 72 +-
reports/distributions/contrib.yaml | 184 +
reports/distributions/core.yaml | 27 +
testbed/README.md | 6 +-
.../metrics/correctness_test_case.go | 2 +-
.../traces/correctness_test.go | 9 +-
testbed/correctnesstests/utils.go | 30 +-
testbed/datareceivers/carbon.go | 2 +
testbed/datareceivers/jaeger.go | 10 +-
.../datareceivers/mockawsxraydatareceiver.go | 87 -
testbed/datareceivers/opencensus.go | 2 +-
testbed/datareceivers/prometheus.go | 2 +-
testbed/datareceivers/sapm.go | 2 +-
testbed/datareceivers/signalfx.go | 2 +-
testbed/datareceivers/splunk.go | 2 +-
testbed/datasenders/carbon.go | 10 +-
testbed/datasenders/jaeger.go | 11 +-
testbed/datasenders/k8s.go | 48 +-
testbed/datasenders/opencensus.go | 2 +-
testbed/datasenders/stanza.go | 4 +-
testbed/datasenders/zipkin.go | 2 +-
testbed/go.mod | 361 +-
testbed/go.sum | 727 +-
.../mockawsxrayreceiver/config.go | 19 -
.../mockawsxrayreceiver/factory.go | 50 -
.../mockawsxrayreceiver/go.mod | 51 -
.../mockawsxrayreceiver/go.sum | 211 -
.../mockawsxrayreceiver/metadata.yaml | 3 -
.../mockawsxrayreceiver/server.crt | 20 -
.../mockawsxrayreceiver/server.key | 28 -
.../mockawsxrayreceiver/trace_receiver.go | 164 -
.../mockdatadogagentexporter/config.go | 2 +-
.../mockdatadogagentexporter/factory.go | 8 +-
.../mockdatadogagentexporter/go.mod | 75 +-
.../mockdatadogagentexporter/go.sum | 248 +-
.../traces_exporter.go | 8 +-
testbed/package_test.go | 14 +
testbed/stabilitytests/metric_test.go | 17 +-
testbed/stabilitytests/trace_test.go | 21 +-
testbed/testbed/child_process_collector.go | 27 +-
.../testbed/child_process_collector_test.go | 31 +
testbed/testbed/components.go | 4 +-
testbed/testbed/data_providers.go | 1 +
testbed/testbed/in_process_collector.go | 2 +-
testbed/testbed/load_generator.go | 232 +-
testbed/testbed/mock_backend.go | 38 +-
testbed/testbed/mock_backend_test.go | 6 +-
testbed/testbed/receivers.go | 2 +-
testbed/testbed/results.go | 6 +
testbed/testbed/senders.go | 18 +-
testbed/testbed/test_case.go | 111 +-
testbed/testbed/utils.go | 3 +-
testbed/testbed/validator.go | 40 +
testbed/tests/e2e_test.go | 23 +-
testbed/tests/log_test.go | 102 +-
testbed/tests/metric_test.go | 28 +-
testbed/tests/mockbackend.log | 0
testbed/tests/resource_processor_test.go | 9 +-
testbed/tests/scenarios.go | 252 +-
testbed/tests/syslog_integration_test.go | 11 +-
testbed/tests/trace_test.go | 175 +-
versions.yaml | 34 +-
4745 files changed, 229327 insertions(+), 113690 deletions(-)
delete mode 100755 .chloggen/clickhouseexporter-use-standard-exporterhelper-queuesettings.yml
delete mode 100644 .github/dependabot.yml
create mode 100644 .github/workflows/auto-assign-owners.yml
delete mode 100644 .github/workflows/create-dependabot-pr.yml
delete mode 100755 .github/workflows/scripts/add-component-options.sh
delete mode 100755 .github/workflows/scripts/dependabot-pr.sh
create mode 100644 NOTICE
create mode 100644 cmd/configschema/cfgmetadatagen/cfgmetadatagen/package_test.go
create mode 100644 cmd/configschema/docsgen/docsgen/package_test.go
create mode 100644 cmd/configschema/package_test.go
create mode 100644 cmd/githubgen/codeowners.go
create mode 100644 cmd/githubgen/distributions.go
create mode 100644 cmd/githubgen/issuetemplates.go
delete mode 100644 cmd/mdatagen/README.md
delete mode 100644 cmd/mdatagen/doc.go
delete mode 100644 cmd/mdatagen/documentation.md
delete mode 100644 cmd/mdatagen/embeded_templates.go
delete mode 100644 cmd/mdatagen/embeded_templates_test.go
delete mode 100644 cmd/mdatagen/go.mod
delete mode 100644 cmd/mdatagen/internal/metadata/generated_config.go
delete mode 100644 cmd/mdatagen/internal/metadata/generated_config_test.go
delete mode 100644 cmd/mdatagen/internal/metadata/generated_metrics.go
delete mode 100644 cmd/mdatagen/internal/metadata/generated_metrics_test.go
delete mode 100644 cmd/mdatagen/internal/metadata/generated_resource.go
delete mode 100644 cmd/mdatagen/internal/metadata/generated_resource_test.go
delete mode 100644 cmd/mdatagen/internal/metadata/generated_status.go
delete mode 100644 cmd/mdatagen/internal/metadata/testdata/config.yaml
delete mode 100644 cmd/mdatagen/lint.go
delete mode 100644 cmd/mdatagen/lint_test.go
delete mode 100644 cmd/mdatagen/loader.go
delete mode 100644 cmd/mdatagen/loader_test.go
delete mode 100644 cmd/mdatagen/main.go
delete mode 100644 cmd/mdatagen/main_test.go
delete mode 100644 cmd/mdatagen/metadata-sample.yaml
delete mode 100644 cmd/mdatagen/metadata-schema.yaml
delete mode 100644 cmd/mdatagen/metadata.yaml
delete mode 100644 cmd/mdatagen/metricdata.go
delete mode 100644 cmd/mdatagen/metricdata_test.go
delete mode 100644 cmd/mdatagen/statusdata.go
delete mode 100644 cmd/mdatagen/statusdata_test.go
delete mode 100644 cmd/mdatagen/templates/config.go.tmpl
delete mode 100644 cmd/mdatagen/templates/config_test.go.tmpl
delete mode 100644 cmd/mdatagen/templates/documentation.md.tmpl
delete mode 100644 cmd/mdatagen/templates/metrics.go.tmpl
delete mode 100644 cmd/mdatagen/templates/metrics_test.go.tmpl
delete mode 100644 cmd/mdatagen/templates/readme.md.tmpl
delete mode 100644 cmd/mdatagen/templates/resource.go.tmpl
delete mode 100644 cmd/mdatagen/templates/resource_test.go.tmpl
delete mode 100644 cmd/mdatagen/templates/status.go.tmpl
delete mode 100644 cmd/mdatagen/templates/testdata/config.yaml.tmpl
delete mode 100644 cmd/mdatagen/testdata/invalid.yaml
delete mode 100644 cmd/mdatagen/testdata/invalid_aggregation.yaml
delete mode 100644 cmd/mdatagen/testdata/invalid_class.yaml
delete mode 100644 cmd/mdatagen/testdata/invalid_input_type.yaml
delete mode 100644 cmd/mdatagen/testdata/invalid_stability.yaml
delete mode 100644 cmd/mdatagen/testdata/invalid_stability_component.yaml
delete mode 100644 cmd/mdatagen/testdata/invalid_type_attr.yaml
delete mode 100644 cmd/mdatagen/testdata/invalid_type_rattr.yaml
delete mode 100644 cmd/mdatagen/testdata/metrics_and_type.yaml
delete mode 100644 cmd/mdatagen/testdata/no_aggregation.yaml
delete mode 100644 cmd/mdatagen/testdata/no_class.yaml
delete mode 100644 cmd/mdatagen/testdata/no_description_attr.yaml
delete mode 100644 cmd/mdatagen/testdata/no_description_rattr.yaml
delete mode 100644 cmd/mdatagen/testdata/no_enabled.yaml
delete mode 100644 cmd/mdatagen/testdata/no_metric_description.yaml
delete mode 100644 cmd/mdatagen/testdata/no_metric_type.yaml
delete mode 100644 cmd/mdatagen/testdata/no_metric_unit.yaml
delete mode 100644 cmd/mdatagen/testdata/no_monotonic.yaml
delete mode 100644 cmd/mdatagen/testdata/no_stability.yaml
delete mode 100644 cmd/mdatagen/testdata/no_stability_component.yaml
delete mode 100644 cmd/mdatagen/testdata/no_status.yaml
delete mode 100644 cmd/mdatagen/testdata/no_type.yaml
delete mode 100644 cmd/mdatagen/testdata/no_type_attr.yaml
delete mode 100644 cmd/mdatagen/testdata/no_type_rattr.yaml
delete mode 100644 cmd/mdatagen/testdata/no_value_type.yaml
delete mode 100644 cmd/mdatagen/testdata/parent.yaml
delete mode 100644 cmd/mdatagen/testdata/readme_with_cmd_class.md
delete mode 100644 cmd/mdatagen/testdata/readme_with_multiple_signals.md
delete mode 100644 cmd/mdatagen/testdata/readme_with_status.md
delete mode 100644 cmd/mdatagen/testdata/readme_with_status_codeowners.md
delete mode 100644 cmd/mdatagen/testdata/readme_with_status_codeowners_and_emeritus.md
delete mode 100644 cmd/mdatagen/testdata/readme_with_status_extension.md
delete mode 100644 cmd/mdatagen/testdata/readme_with_warnings.md
delete mode 100644 cmd/mdatagen/testdata/readme_without_status.md
delete mode 100644 cmd/mdatagen/testdata/resource_attributes_only.yaml
delete mode 100644 cmd/mdatagen/testdata/status_only.yaml
delete mode 100644 cmd/mdatagen/testdata/two_metric_types.yaml
delete mode 100644 cmd/mdatagen/testdata/unknown_metric_attribute.yaml
delete mode 100644 cmd/mdatagen/testdata/unknown_value_type.yaml
delete mode 100644 cmd/mdatagen/testdata/unused_attribute.yaml
delete mode 100644 cmd/mdatagen/third_party/golint/LICENSE
delete mode 100644 cmd/mdatagen/third_party/golint/golint.go
delete mode 100644 cmd/mdatagen/validate.go
delete mode 100644 cmd/mdatagen/validate_test.go
create mode 100644 cmd/opampsupervisor/e2e_test.go
rename cmd/opampsupervisor/{testdata => examples}/supervisor_darwin.yaml (85%)
rename cmd/opampsupervisor/{testdata => examples}/supervisor_linux.yaml (85%)
rename cmd/opampsupervisor/{testdata => examples}/supervisor_windows.yaml (85%)
create mode 100644 cmd/opampsupervisor/supervisor/logger.go
create mode 100644 cmd/opampsupervisor/supervisor/package_test.go
create mode 100644 cmd/opampsupervisor/supervisor/server.go
create mode 100644 cmd/opampsupervisor/supervisor/supervisor_test.go
create mode 100644 cmd/opampsupervisor/supervisor/templates/bootstrap.yaml
create mode 100644 cmd/opampsupervisor/supervisor/templates/extraconfig.yaml
create mode 100644 cmd/opampsupervisor/supervisor/templates/owntelemetry.yaml
create mode 100644 cmd/opampsupervisor/testdata/collector/bad_config.yaml
create mode 100644 cmd/opampsupervisor/testdata/collector/effective_config.yaml
create mode 100644 cmd/opampsupervisor/testdata/collector/simple_pipeline.yaml
create mode 100644 cmd/opampsupervisor/testdata/supervisor/supervisor_accepts_conn.yaml
create mode 100644 cmd/opampsupervisor/testdata/supervisor/supervisor_basic.yaml
create mode 100644 cmd/opampsupervisor/testdata/supervisor/supervisor_nocap.yaml
create mode 100644 cmd/opampsupervisor/testdata/supervisor/supervisor_test.yaml
delete mode 100644 cmd/otelcontribcol/processors_test.go
create mode 100644 cmd/oteltestbedcol/package_test.go
create mode 100644 cmd/telemetrygen/internal/common/package_test.go
create mode 100644 cmd/telemetrygen/internal/common/tls_utils.go
create mode 100644 cmd/telemetrygen/internal/logs/package_test.go
create mode 100644 cmd/telemetrygen/internal/metrics/package_test.go
create mode 100644 cmd/telemetrygen/internal/traces/package_test.go
create mode 100644 cmd/telemetrygen/package_test.go
create mode 100644 confmap/provider/s3provider/package_test.go
rename {testbed/mockdatareceivers/mockawsxrayreceiver => confmap/provider/secretsmanagerprovider}/Makefile (100%)
create mode 100644 confmap/provider/secretsmanagerprovider/README.md
create mode 100644 confmap/provider/secretsmanagerprovider/go.mod
create mode 100644 confmap/provider/secretsmanagerprovider/go.sum
create mode 100644 confmap/provider/secretsmanagerprovider/metadata.yaml
create mode 100644 confmap/provider/secretsmanagerprovider/provider.go
create mode 100644 confmap/provider/secretsmanagerprovider/provider_test.go
create mode 100644 connector/countconnector/generated_component_test.go
create mode 100644 connector/countconnector/package_test.go
create mode 100644 connector/datadogconnector/config.go
create mode 100644 connector/datadogconnector/config_test.go
create mode 100644 connector/datadogconnector/example_test.go
create mode 100644 connector/datadogconnector/examples/config.yaml
create mode 100644 connector/datadogconnector/factory_test.go
create mode 100644 connector/datadogconnector/generated_component_test.go
create mode 100644 connector/datadogconnector/traces_connector.go
create mode 100644 connector/exceptionsconnector/generated_component_test.go
create mode 100644 connector/exceptionsconnector/package_test.go
rename {cmd/mdatagen => connector/failoverconnector}/Makefile (100%)
create mode 100644 connector/failoverconnector/README.md
create mode 100644 connector/failoverconnector/config.go
create mode 100644 connector/failoverconnector/config_test.go
create mode 100644 connector/failoverconnector/doc.go
create mode 100644 connector/failoverconnector/factory.go
create mode 100644 connector/failoverconnector/factory_test.go
create mode 100644 connector/failoverconnector/failover.go
create mode 100644 connector/failoverconnector/failover_test.go
create mode 100644 connector/failoverconnector/go.mod
create mode 100644 connector/failoverconnector/go.sum
create mode 100644 connector/failoverconnector/internal/metadata/generated_status.go
create mode 100644 connector/failoverconnector/internal/state/pipeline_selector.go
create mode 100644 connector/failoverconnector/internal/state/pipeline_selector_test.go
create mode 100644 connector/failoverconnector/internal/state/utils.go
create mode 100644 connector/failoverconnector/logs.go
create mode 100644 connector/failoverconnector/logs_test.go
create mode 100644 connector/failoverconnector/metadata.yaml
create mode 100644 connector/failoverconnector/metrics.go
create mode 100644 connector/failoverconnector/metrics_test.go
create mode 100644 connector/failoverconnector/package_test.go
create mode 100644 connector/failoverconnector/testdata/config.yaml
create mode 100644 connector/failoverconnector/traces.go
create mode 100644 connector/failoverconnector/traces_test.go
rename {exporter/f5cloudexporter => connector/grafanacloudconnector}/Makefile (100%)
create mode 100644 connector/grafanacloudconnector/README.md
create mode 100644 connector/grafanacloudconnector/config.go
create mode 100644 connector/grafanacloudconnector/config_test.go
create mode 100644 connector/grafanacloudconnector/connector.go
create mode 100644 connector/grafanacloudconnector/connector_test.go
create mode 100644 connector/grafanacloudconnector/doc.go
create mode 100644 connector/grafanacloudconnector/factory.go
create mode 100644 connector/grafanacloudconnector/factory_test.go
create mode 100644 connector/grafanacloudconnector/generated_component_test.go
create mode 100644 connector/grafanacloudconnector/go.mod
create mode 100644 connector/grafanacloudconnector/go.sum
create mode 100644 connector/grafanacloudconnector/host_metrics.go
create mode 100644 connector/grafanacloudconnector/host_metrics_test.go
create mode 100644 connector/grafanacloudconnector/internal/metadata/generated_status.go
create mode 100644 connector/grafanacloudconnector/metadata.yaml
create mode 100644 connector/grafanacloudconnector/package_test.go
create mode 100644 connector/grafanacloudconnector/testdata/config.yaml
create mode 100644 connector/routingconnector/package_test.go
rename {processor/servicegraphprocessor => connector/servicegraphconnector}/config.go (85%)
create mode 100644 connector/servicegraphconnector/config_test.go
rename processor/servicegraphprocessor/processor.go => connector/servicegraphconnector/connector.go (82%)
create mode 100644 connector/servicegraphconnector/connector_test.go
create mode 100644 connector/servicegraphconnector/generated_component_test.go
rename {processor/servicegraphprocessor => connector/servicegraphconnector}/internal/store/edge.go (96%)
create mode 100644 connector/servicegraphconnector/internal/store/package_test.go
rename {processor/servicegraphprocessor => connector/servicegraphconnector}/internal/store/store.go (97%)
rename {processor/servicegraphprocessor => connector/servicegraphconnector}/internal/store/store_test.go (96%)
create mode 100644 connector/servicegraphconnector/package_test.go
rename {processor/servicegraphprocessor => connector/servicegraphconnector}/testdata/service-graph-connector-config.yaml (90%)
rename {processor/servicegraphprocessor => connector/servicegraphconnector}/util.go (80%)
create mode 100644 connector/spanmetricsconnector/generated_component_test.go
create mode 100644 connector/spanmetricsconnector/internal/cache/package_test.go
create mode 100644 connector/spanmetricsconnector/internal/metrics/package_test.go
create mode 100644 connector/spanmetricsconnector/package_test.go
create mode 100644 distributions.yaml
create mode 100644 docs/testing.md
create mode 100644 examples/fault-tolerant-logs-collection/README.md
create mode 100644 examples/fault-tolerant-logs-collection/otel-col-config.yaml
create mode 100644 examples/logline-filtering/README.md
create mode 100644 examples/logline-filtering/otel-col-config-filter-in-logs.yaml
create mode 100644 examples/logline-filtering/otel-col-config-filter-out-logs.yaml
create mode 100644 examples/secure-tracing/README.md
create mode 100644 examples/secure-tracing/certs/Makefile
create mode 100644 examples/secure-tracing/certs/ca.ext
create mode 100644 examples/secure-tracing/certs/envoy.ext
create mode 100644 examples/secure-tracing/certs/otel-collector.ext
create mode 100644 examples/secure-tracing/certs/tracing-client.ext
create mode 100644 examples/secure-tracing/docker-compose.yaml
create mode 100644 examples/secure-tracing/envoy-config.yaml
create mode 100644 examples/secure-tracing/otel-collector-config.yaml
create mode 100644 exporter/alertmanagerexporter/alertmanager_exporter_test.go
create mode 100644 exporter/alertmanagerexporter/generated_component_test.go
create mode 100644 exporter/alertmanagerexporter/package_test.go
create mode 100644 exporter/alertmanagerexporter/testdata/test_cert.pem
create mode 100644 exporter/alibabacloudlogserviceexporter/generated_component_test.go
create mode 100644 exporter/awscloudwatchlogsexporter/generated_component_test.go
create mode 100644 exporter/awscloudwatchlogsexporter/package_test.go
create mode 100644 exporter/awsemfexporter/generated_component_test.go
create mode 100644 exporter/awskinesisexporter/generated_component_test.go
create mode 100644 exporter/awskinesisexporter/internal/batch/batch_max_records_test.go
create mode 100644 exporter/awskinesisexporter/internal/batch/package_test.go
create mode 100644 exporter/awskinesisexporter/internal/compress/package_test.go
create mode 100644 exporter/awskinesisexporter/internal/key/package_test.go
create mode 100644 exporter/awskinesisexporter/internal/producer/package_test.go
create mode 100644 exporter/awskinesisexporter/package_test.go
create mode 100644 exporter/awss3exporter/body_marshaler.go
create mode 100644 exporter/awss3exporter/body_marshaler_test.go
create mode 100644 exporter/awss3exporter/generated_component_test.go
create mode 100644 exporter/awss3exporter/testdata/compression.yaml
create mode 100644 exporter/awss3exporter/testdata/config-s3-compatible-systems.yaml
create mode 100644 exporter/awsxrayexporter/generated_component_test.go
create mode 100644 exporter/awsxrayexporter/internal/translator/package_test.go
create mode 100644 exporter/azuredataexplorerexporter/generated_component_test.go
create mode 100644 exporter/azuredataexplorerexporter/package_test.go
create mode 100644 exporter/azuremonitorexporter/generated_component_test.go
create mode 100644 exporter/carbonexporter/generated_component_test.go
create mode 100644 exporter/carbonexporter/package_test.go
create mode 100644 exporter/cassandraexporter/exporter_logs_test.go
create mode 100644 exporter/cassandraexporter/generated_component_test.go
create mode 100644 exporter/cassandraexporter/package_test.go
create mode 100644 exporter/clickhouseexporter/exporter_sql_test.go
create mode 100644 exporter/clickhouseexporter/generated_component_test.go
create mode 100644 exporter/clickhouseexporter/integration_test.go
create mode 100644 exporter/clickhouseexporter/internal/package_test.go
create mode 100644 exporter/clickhouseexporter/package_test.go
create mode 100644 exporter/coralogixexporter/generated_component_test.go
create mode 100644 exporter/coralogixexporter/package_test.go
create mode 100644 exporter/datadogexporter/examples/batch-memory.yaml
create mode 100644 exporter/datadogexporter/examples/collector-metrics.yaml
create mode 100644 exporter/datadogexporter/examples/docker-stats.yaml
create mode 100644 exporter/datadogexporter/examples/host-metadata.yaml
create mode 100644 exporter/datadogexporter/examples/host-metrics.yaml
create mode 100644 exporter/datadogexporter/examples/k8s-chart/k8s-values.yaml
create mode 100644 exporter/datadogexporter/examples/kafka.yaml
create mode 100644 exporter/datadogexporter/examples/logs.yaml
create mode 100644 exporter/datadogexporter/examples/ootb-ec2.yaml
create mode 100644 exporter/datadogexporter/examples/otlp.yaml
create mode 100644 exporter/datadogexporter/examples/trace-metrics.yaml
create mode 100644 exporter/datadogexporter/generated_component_test.go
create mode 100644 exporter/datadogexporter/internal/clientutil/package_test.go
create mode 100644 exporter/datadogexporter/internal/hostmetadata/internal/azure/package_test.go
create mode 100644 exporter/datadogexporter/internal/hostmetadata/internal/ec2/package_test.go
create mode 100644 exporter/datadogexporter/internal/hostmetadata/internal/ecs/package_test.go
create mode 100644 exporter/datadogexporter/internal/hostmetadata/internal/gcp/package_test.go
create mode 100644 exporter/datadogexporter/internal/hostmetadata/internal/k8s/package_test.go
create mode 100644 exporter/datadogexporter/internal/hostmetadata/internal/system/package_test.go
create mode 100644 exporter/datadogexporter/internal/hostmetadata/valid/package_test.go
create mode 100644 exporter/datadogexporter/internal/logs/package_test.go
create mode 100644 exporter/datadogexporter/internal/metrics/sketches/package_test.go
create mode 100644 exporter/datadogexporter/internal/scrub/package_test.go
create mode 100644 exporter/datasetexporter/generated_component_test.go
create mode 100644 exporter/dynatraceexporter/config/package_test.go
create mode 100644 exporter/dynatraceexporter/generated_component_test.go
create mode 100644 exporter/dynatraceexporter/internal/serialization/package_test.go
create mode 100644 exporter/elasticsearchexporter/generated_component_test.go
create mode 100644 exporter/elasticsearchexporter/internal/objmodel/package_test.go
create mode 100644 exporter/elasticsearchexporter/package_test.go
create mode 100644 exporter/elasticsearchexporter/util.go
delete mode 100644 exporter/f5cloudexporter/README.md
delete mode 100644 exporter/f5cloudexporter/auth.go
delete mode 100644 exporter/f5cloudexporter/auth_test.go
delete mode 100644 exporter/f5cloudexporter/config.go
delete mode 100644 exporter/f5cloudexporter/config_test.go
delete mode 100644 exporter/f5cloudexporter/doc.go
delete mode 100644 exporter/f5cloudexporter/factory.go
delete mode 100644 exporter/f5cloudexporter/factory_test.go
delete mode 100644 exporter/f5cloudexporter/go.mod
delete mode 100644 exporter/f5cloudexporter/go.sum
delete mode 100644 exporter/f5cloudexporter/internal/metadata/generated_status.go
delete mode 100644 exporter/f5cloudexporter/metadata.yaml
delete mode 100644 exporter/f5cloudexporter/testdata/config.yaml
delete mode 100644 exporter/f5cloudexporter/testdata/empty_credential_file.json
create mode 100644 exporter/fileexporter/encoding_test.go
create mode 100644 exporter/fileexporter/file_writer.go
create mode 100644 exporter/fileexporter/generated_component_test.go
create mode 100644 exporter/fileexporter/grouping_file_exporter.go
create mode 100644 exporter/fileexporter/grouping_file_exporter_test.go
create mode 100644 exporter/fileexporter/marshaller.go
create mode 100644 exporter/fileexporter/package_test.go
create mode 100644 exporter/fileexporter/testdata/.gitignore
create mode 100644 exporter/googlecloudexporter/generated_component_test.go
create mode 100644 exporter/googlecloudexporter/package_test.go
create mode 100644 exporter/googlecloudpubsubexporter/generated_component_test.go
create mode 100644 exporter/googlemanagedprometheusexporter/generated_component_test.go
create mode 100644 exporter/googlemanagedprometheusexporter/package_test.go
create mode 100644 exporter/honeycombmarkerexporter/generated_component_test.go
create mode 100644 exporter/honeycombmarkerexporter/logs_exporter_test.go
create mode 100644 exporter/honeycombmarkerexporter/package_test.go
create mode 100644 exporter/influxdbexporter/generated_component_test.go
create mode 100644 exporter/influxdbexporter/package_test.go
create mode 100644 exporter/instanaexporter/generated_component_test.go
create mode 100644 exporter/instanaexporter/internal/converter/model/package_test.go
create mode 100644 exporter/instanaexporter/internal/converter/package_test.go
create mode 100644 exporter/instanaexporter/package_test.go
create mode 100644 exporter/kafkaexporter/generated_component_test.go
create mode 100644 exporter/kafkaexporter/package_test.go
create mode 100644 exporter/kineticaexporter/common.go
create mode 100644 exporter/kineticaexporter/exporter_metric_test.go
create mode 100644 exporter/kineticaexporter/generated_component_test.go
create mode 100644 exporter/kineticaexporter/writer.go
create mode 100644 exporter/loadbalancingexporter/generated_component_test.go
create mode 100644 exporter/loadbalancingexporter/helpers.go
create mode 100644 exporter/loadbalancingexporter/helpers_test.go
create mode 100644 exporter/loadbalancingexporter/package_test.go
create mode 100644 exporter/loadbalancingexporter/resolver_aws_cloudmap.go
create mode 100644 exporter/loadbalancingexporter/resolver_aws_cloudmap_test.go
create mode 100644 exporter/loadbalancingexporter/wrapped_exporter.go
create mode 100644 exporter/logicmonitorexporter/generated_component_test.go
create mode 100644 exporter/logicmonitorexporter/internal/logs/package_test.go
create mode 100644 exporter/logicmonitorexporter/internal/traces/package_test.go
create mode 100644 exporter/logicmonitorexporter/package_test.go
create mode 100644 exporter/logzioexporter/generated_component_test.go
create mode 100644 exporter/logzioexporter/package_test.go
create mode 100644 exporter/lokiexporter/generated_component_test.go
create mode 100644 exporter/lokiexporter/internal/tenant/package_test.go
delete mode 100644 exporter/lokiexporter/metrics.go
create mode 100644 exporter/lokiexporter/package_test.go
create mode 100644 exporter/mezmoexporter/generated_component_test.go
create mode 100644 exporter/mezmoexporter/package_test.go
create mode 100644 exporter/opencensusexporter/generated_component_test.go
create mode 100644 exporter/opencensusexporter/package_test.go
create mode 100644 exporter/opensearchexporter/generated_component_test.go
create mode 100644 exporter/opensearchexporter/internal/objmodel/package_test.go
create mode 100644 exporter/opensearchexporter/package_test.go
rename exporter/{tanzuobservabilityexporter => otelarrowexporter}/Makefile (100%)
create mode 100644 exporter/otelarrowexporter/README.md
create mode 100644 exporter/otelarrowexporter/config.go
create mode 100644 exporter/otelarrowexporter/config_test.go
create mode 100644 exporter/otelarrowexporter/doc.go
create mode 100644 exporter/otelarrowexporter/factory.go
create mode 100644 exporter/otelarrowexporter/factory_test.go
create mode 100644 exporter/otelarrowexporter/go.mod
create mode 100644 exporter/otelarrowexporter/go.sum
create mode 100644 exporter/otelarrowexporter/internal/arrow/exporter.go
create mode 100644 exporter/otelarrowexporter/internal/metadata/generated_status.go
create mode 100644 exporter/otelarrowexporter/metadata.yaml
create mode 100644 exporter/otelarrowexporter/otelarrow.go
create mode 100644 exporter/otelarrowexporter/testdata/config.yaml
create mode 100644 exporter/otelarrowexporter/testdata/default.yaml
create mode 100644 exporter/otelarrowexporter/testdata/test_cert.pem
create mode 100644 exporter/otelarrowexporter/testdata/test_key.pem
create mode 100644 exporter/prometheusexporter/generated_component_test.go
create mode 100644 exporter/prometheusexporter/package_test.go
create mode 100644 exporter/prometheusremotewriteexporter/generated_component_test.go
create mode 100644 exporter/prometheusremotewriteexporter/package_test.go
create mode 100644 exporter/pulsarexporter/generated_component_test.go
rename {extension/httpforwarder => exporter/rabbitmqexporter}/Makefile (100%)
create mode 100644 exporter/rabbitmqexporter/README.md
create mode 100644 exporter/rabbitmqexporter/config.go
create mode 100644 exporter/rabbitmqexporter/config_test.go
create mode 100644 exporter/rabbitmqexporter/doc.go
create mode 100644 exporter/rabbitmqexporter/factory.go
create mode 100644 exporter/rabbitmqexporter/factory_test.go
create mode 100644 exporter/rabbitmqexporter/generated_component_test.go
create mode 100644 exporter/rabbitmqexporter/go.mod
create mode 100644 exporter/rabbitmqexporter/go.sum
create mode 100644 exporter/rabbitmqexporter/internal/metadata/generated_status.go
create mode 100644 exporter/rabbitmqexporter/metadata.yaml
create mode 100644 exporter/rabbitmqexporter/package_test.go
create mode 100644 exporter/rabbitmqexporter/rabbitmq_exporter.go
create mode 100644 exporter/rabbitmqexporter/testdata/test-config.yaml
create mode 100644 exporter/sapmexporter/generated_component_test.go
create mode 100644 exporter/sapmexporter/package_test.go
create mode 100644 exporter/sentryexporter/generated_component_test.go
create mode 100644 exporter/sentryexporter/package_test.go
create mode 100644 exporter/signalfxexporter/generated_component_test.go
create mode 100644 exporter/signalfxexporter/internal/apm/correlations/package_test.go
create mode 100644 exporter/signalfxexporter/internal/apm/requests/requestcounter/package_test.go
create mode 100644 exporter/signalfxexporter/internal/apm/tracetracker/package_test.go
delete mode 100644 exporter/signalfxexporter/internal/apm/tracetracker/shims.go
create mode 100644 exporter/signalfxexporter/internal/correlation/package_test.go
delete mode 100644 exporter/signalfxexporter/internal/correlation/spanshims.go
delete mode 100644 exporter/signalfxexporter/internal/correlation/spanshims_test.go
create mode 100644 exporter/signalfxexporter/internal/hostmetadata/package_test.go
create mode 100644 exporter/signalfxexporter/internal/translation/dpfilters/package_test.go
create mode 100644 exporter/signalfxexporter/internal/utils/histogram_utils.go
create mode 100644 exporter/signalfxexporter/internal/utils/histogram_utils_test.go
create mode 100644 exporter/skywalkingexporter/generated_component_test.go
create mode 100644 exporter/splunkhecexporter/generated_component_test.go
create mode 100644 exporter/splunkhecexporter/package_test.go
create mode 100644 exporter/sumologicexporter/generated_component_test.go
create mode 100644 exporter/sumologicexporter/internal/observability/observability.go
create mode 100644 exporter/sumologicexporter/internal/observability/observability_test.go
create mode 100644 exporter/syslogexporter/generated_component_test.go
create mode 100644 exporter/syslogexporter/package_test.go
delete mode 100644 exporter/tanzuobservabilityexporter/README.md
delete mode 100644 exporter/tanzuobservabilityexporter/config.go
delete mode 100644 exporter/tanzuobservabilityexporter/config_test.go
delete mode 100644 exporter/tanzuobservabilityexporter/factory.go
delete mode 100644 exporter/tanzuobservabilityexporter/factory_test.go
delete mode 100644 exporter/tanzuobservabilityexporter/go.mod
delete mode 100644 exporter/tanzuobservabilityexporter/go.sum
delete mode 100644 exporter/tanzuobservabilityexporter/internal/metadata/generated_status.go
delete mode 100644 exporter/tanzuobservabilityexporter/metadata.yaml
delete mode 100644 exporter/tanzuobservabilityexporter/metrics.go
delete mode 100644 exporter/tanzuobservabilityexporter/metrics_exporter.go
delete mode 100644 exporter/tanzuobservabilityexporter/metrics_exporter_test.go
delete mode 100644 exporter/tanzuobservabilityexporter/metrics_test.go
delete mode 100644 exporter/tanzuobservabilityexporter/testdata/config.yaml
delete mode 100644 exporter/tanzuobservabilityexporter/trace_exporter.go
delete mode 100644 exporter/tanzuobservabilityexporter/trace_exporter_test.go
delete mode 100644 exporter/tanzuobservabilityexporter/transformer.go
delete mode 100644 exporter/tanzuobservabilityexporter/transformer_test.go
create mode 100644 exporter/tencentcloudlogserviceexporter/generated_component_test.go
create mode 100644 exporter/zipkinexporter/generated_component_test.go
create mode 100644 exporter/zipkinexporter/package_test.go
rename {processor/datadogprocessor => extension/ackextension}/Makefile (100%)
create mode 100644 extension/ackextension/README.md
create mode 100644 extension/ackextension/ackextension.go
create mode 100644 extension/ackextension/config.go
rename {receiver/filereceiver => extension/ackextension}/doc.go (50%)
create mode 100644 extension/ackextension/factory.go
create mode 100644 extension/ackextension/factory_test.go
create mode 100644 extension/ackextension/go.mod
create mode 100644 extension/ackextension/go.sum
create mode 100644 extension/ackextension/inmemory.go
create mode 100644 extension/ackextension/inmemory_test.go
create mode 100644 extension/ackextension/internal/metadata/generated_status.go
create mode 100644 extension/ackextension/metadata.yaml
create mode 100644 extension/ackextension/package_test.go
create mode 100644 extension/ackextension/testdata/config.yaml
create mode 100644 extension/awsproxy/generated_component_test.go
create mode 100644 extension/basicauthextension/generated_component_test.go
create mode 100644 extension/basicauthextension/package_test.go
create mode 100644 extension/bearertokenauthextension/generated_component_test.go
create mode 100644 extension/bearertokenauthextension/package_test.go
create mode 100644 extension/encoding/avrologencodingextension/Makefile
create mode 100644 extension/encoding/avrologencodingextension/README.md
create mode 100644 extension/encoding/avrologencodingextension/avro.go
create mode 100644 extension/encoding/avrologencodingextension/avro_test.go
create mode 100644 extension/encoding/avrologencodingextension/config.go
create mode 100644 extension/encoding/avrologencodingextension/config_test.go
create mode 100644 extension/encoding/avrologencodingextension/doc.go
create mode 100644 extension/encoding/avrologencodingextension/extension.go
create mode 100644 extension/encoding/avrologencodingextension/extension_test.go
create mode 100644 extension/encoding/avrologencodingextension/factory.go
create mode 100644 extension/encoding/avrologencodingextension/generated_component_test.go
create mode 100644 extension/encoding/avrologencodingextension/go.mod
create mode 100644 extension/encoding/avrologencodingextension/go.sum
create mode 100644 extension/encoding/avrologencodingextension/internal/metadata/generated_status.go
create mode 100644 extension/encoding/avrologencodingextension/metadata.yaml
create mode 100644 extension/encoding/avrologencodingextension/package_test.go
create mode 100644 extension/encoding/avrologencodingextension/testdata/schema1.avro
create mode 100644 extension/encoding/avrologencodingextension/testutil.go
create mode 100644 extension/encoding/jaegerencodingextension/generated_component_test.go
create mode 100644 extension/encoding/jaegerencodingextension/jaeger_test.go
create mode 100644 extension/encoding/jaegerencodingextension/package_test.go
create mode 100644 extension/encoding/jsonlogencodingextension/doc.go
create mode 100644 extension/encoding/jsonlogencodingextension/generated_component_test.go
create mode 100644 extension/encoding/jsonlogencodingextension/package_test.go
create mode 100644 extension/encoding/otlpencodingextension/generated_component_test.go
create mode 100644 extension/encoding/otlpencodingextension/package_test.go
create mode 100644 extension/encoding/textencodingextension/extension_test.go
create mode 100644 extension/encoding/textencodingextension/generated_component_test.go
create mode 100644 extension/encoding/textencodingextension/package_test.go
create mode 100644 extension/encoding/zipkinencodingextension/generated_component_test.go
create mode 100644 extension/encoding/zipkinencodingextension/package_test.go
rename {receiver/filereceiver => extension/googleclientauthextension}/Makefile (100%)
create mode 100644 extension/googleclientauthextension/README.md
create mode 100644 extension/googleclientauthextension/config.go
create mode 100644 extension/googleclientauthextension/doc.go
create mode 100644 extension/googleclientauthextension/factory.go
create mode 100644 extension/googleclientauthextension/generated_component_test.go
create mode 100644 extension/googleclientauthextension/go.mod
create mode 100644 extension/googleclientauthextension/go.sum
create mode 100644 extension/googleclientauthextension/internal/metadata/generated_status.go
create mode 100644 extension/googleclientauthextension/metadata.yaml
create mode 100644 extension/googleclientauthextension/package_test.go
create mode 100644 extension/headerssetterextension/generated_component_test.go
create mode 100644 extension/headerssetterextension/internal/action/package_test.go
create mode 100644 extension/headerssetterextension/internal/source/package_test.go
create mode 100644 extension/headerssetterextension/package_test.go
create mode 100644 extension/healthcheckextension/generated_component_test.go
create mode 100644 extension/healthcheckextension/integration_test.go
create mode 100644 extension/healthcheckextension/package_test.go
delete mode 100644 extension/httpforwarder/doc.go
delete mode 100644 extension/httpforwarder/go.mod
delete mode 100644 extension/httpforwarder/go.sum
delete mode 100644 extension/httpforwarder/internal/metadata/generated_status.go
delete mode 100644 extension/httpforwarder/metadata.yaml
rename {processor/servicegraphprocessor => extension/httpforwarderextension}/Makefile (100%)
rename extension/{httpforwarder => httpforwarderextension}/README.md (89%)
rename extension/{httpforwarder => httpforwarderextension}/config.go (59%)
rename extension/{httpforwarder => httpforwarderextension}/config_test.go (81%)
create mode 100644 extension/httpforwarderextension/doc.go
rename extension/{httpforwarder => httpforwarderextension}/extension.go (86%)
rename extension/{httpforwarder => httpforwarderextension}/extension_test.go (93%)
rename extension/{httpforwarder => httpforwarderextension}/factory.go (72%)
rename extension/{httpforwarder => httpforwarderextension}/factory_test.go (84%)
create mode 100644 extension/httpforwarderextension/generated_component_test.go
create mode 100644 extension/httpforwarderextension/go.mod
create mode 100644 extension/httpforwarderextension/go.sum
create mode 100644 extension/httpforwarderextension/internal/metadata/generated_status.go
create mode 100644 extension/httpforwarderextension/metadata.yaml
create mode 100644 extension/httpforwarderextension/package_test.go
rename extension/{httpforwarder => httpforwarderextension}/testdata/config.yaml (78%)
create mode 100644 extension/jaegerremotesampling/generated_component_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/README.md
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/config.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/config_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/extension.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/extension_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/factory.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/factory_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/grpc.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/grpc/manager.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/grpc_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/http.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/http_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/internal_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/metadata/generated_status.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/remote_strategy_cache.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/remote_strategy_cache_test.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/remote_strategy_store.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/sampling/grpc_handler.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/sampling/model/sampling.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/sampling/strategystore/factory.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/sampling/strategystore/interface.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/static/constants.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/static/factory.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/static/options.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/static/strategy.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/internal/static/strategy_store.go
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/metadata.yaml
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/testdata/config.yaml
delete mode 100644 extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/testdata/strategy.json
create mode 100644 extension/jaegerremotesampling/internal/package_test.go
create mode 100644 extension/jaegerremotesampling/package_test.go
create mode 100644 extension/oauth2clientauthextension/generated_component_test.go
create mode 100644 extension/oauth2clientauthextension/package_test.go
create mode 100644 extension/observer/ecsobserver/internal/ecsmock/package_test.go
create mode 100644 extension/observer/ecsobserver/internal/errctx/package_test.go
create mode 100644 extension/observer/ecsobserver/package_test.go
create mode 100644 extension/observer/ecstaskobserver/package_test.go
create mode 100644 extension/observer/hostobserver/generated_component_test.go
create mode 100644 extension/observer/hostobserver/package_test.go
create mode 100644 extension/observer/k8sobserver/service_endpoint.go
create mode 100644 extension/observer/k8sobserver/service_endpoint_test.go
create mode 100644 extension/observer/package_test.go
create mode 100644 extension/oidcauthextension/generated_component_test.go
create mode 100644 extension/opampextension/generated_component_test.go
create mode 100644 extension/opampextension/logger.go
create mode 100644 extension/opampextension/package_test.go
create mode 100644 extension/opampextension/testdata/config_http.yaml
create mode 100644 extension/opampextension/testdata/effective.yaml
create mode 100644 extension/pprofextension/generated_component_test.go
create mode 100644 extension/pprofextension/package_test.go
create mode 100644 extension/remotetapextension/generated_component_test.go
create mode 100644 extension/remotetapextension/package_test.go
create mode 100644 extension/sigv4authextension/generated_component_test.go
create mode 100644 extension/solarwindsapmsettingsextension/Makefile
create mode 100644 extension/solarwindsapmsettingsextension/README.md
create mode 100644 extension/solarwindsapmsettingsextension/config.go
create mode 100644 extension/solarwindsapmsettingsextension/config_test.go
create mode 100644 extension/solarwindsapmsettingsextension/doc.go
create mode 100644 extension/solarwindsapmsettingsextension/extension.go
create mode 100644 extension/solarwindsapmsettingsextension/extension_test.go
create mode 100644 extension/solarwindsapmsettingsextension/factory.go
create mode 100644 extension/solarwindsapmsettingsextension/factory_test.go
create mode 100644 extension/solarwindsapmsettingsextension/generated_component_test.go
create mode 100644 extension/solarwindsapmsettingsextension/go.mod
create mode 100644 extension/solarwindsapmsettingsextension/go.sum
create mode 100644 extension/solarwindsapmsettingsextension/internal/metadata/generated_status.go
create mode 100644 extension/solarwindsapmsettingsextension/metadata.yaml
create mode 100644 extension/storage/dbstorage/Makefile
create mode 100644 extension/storage/dbstorage/doc.go
create mode 100644 extension/storage/dbstorage/generated_component_test.go
create mode 100644 extension/storage/dbstorage/go.mod
create mode 100644 extension/storage/dbstorage/go.sum
create mode 100644 extension/storage/dbstorage/package_test.go
create mode 100644 extension/storage/filestorage/Makefile
create mode 100644 extension/storage/filestorage/doc.go
create mode 100644 extension/storage/filestorage/generated_component_test.go
create mode 100644 extension/storage/filestorage/go.mod
create mode 100644 extension/storage/filestorage/go.sum
create mode 100644 extension/storage/filestorage/package_test.go
create mode 100644 extension/storage/package_test.go
create mode 100644 extension/storage/storagetest/package_test.go
create mode 100644 extension/sumologicextension/.gitignore
create mode 100644 extension/sumologicextension/Makefile
create mode 100644 extension/sumologicextension/README.md
create mode 100644 extension/sumologicextension/api/error.go
create mode 100644 extension/sumologicextension/api/metadata.go
create mode 100644 extension/sumologicextension/api/register.go
create mode 100644 extension/sumologicextension/config.go
create mode 100644 extension/sumologicextension/credentials/credentialsstore_localfs.go
create mode 100644 extension/sumologicextension/credentials/credentialsstore_localfs_test.go
create mode 100644 extension/sumologicextension/credentials/encrypt.go
create mode 100644 extension/sumologicextension/credentials/store.go
create mode 100644 extension/sumologicextension/extension.go
create mode 100644 extension/sumologicextension/extension_darwin_test.go
create mode 100644 extension/sumologicextension/extension_test.go
create mode 100644 extension/sumologicextension/factory.go
create mode 100644 extension/sumologicextension/factory_test.go
create mode 100644 extension/sumologicextension/go.mod
create mode 100644 extension/sumologicextension/go.sum
create mode 100644 extension/sumologicextension/headers.go
create mode 100644 extension/sumologicextension/internal/metadata/generated_status.go
create mode 100644 extension/sumologicextension/metadata.yaml
create mode 100644 extension/sumologicextension/testdata/config.yaml
create mode 100644 internal/aws/awsutil/package_test.go
create mode 100644 internal/aws/containerinsight/package_test.go
create mode 100644 internal/aws/cwlogs/handler/package_test.go
create mode 100644 internal/aws/cwlogs/package_test.go
create mode 100644 internal/aws/ecsutil/endpoints/package_test.go
create mode 100644 internal/aws/ecsutil/package_test.go
create mode 100644 internal/aws/k8s/k8sclient/package_test.go
create mode 100644 internal/aws/k8s/k8sutil/package_test.go
create mode 100644 internal/aws/metrics/package_test.go
create mode 100644 internal/aws/xray/telemetry/telemetrytest/package_test.go
delete mode 100755 internal/buildscripts/update-dep
create mode 100644 internal/common/docker/package_test.go
create mode 100644 internal/common/localhostgate/featuregate.go
create mode 100644 internal/common/localhostgate/featuregate_test.go
create mode 100644 internal/common/maps/package_test.go
create mode 100644 internal/common/sanitize/package_test.go
create mode 100644 internal/common/testutil/package_test.go
create mode 100644 internal/coreinternal/attraction/package_test.go
create mode 100644 internal/coreinternal/consumerretry/package_test.go
create mode 100644 internal/coreinternal/goldendataset/package_test.go
create mode 100644 internal/coreinternal/idutils/package_test.go
create mode 100644 internal/coreinternal/metricstestutil/package_test.go
create mode 100644 internal/coreinternal/parseutils/csv.go
create mode 100644 internal/coreinternal/parseutils/csv_test.go
create mode 100644 internal/coreinternal/parseutils/doc.go
create mode 100644 internal/coreinternal/parseutils/package_test.go
create mode 100644 internal/coreinternal/parseutils/parser.go
create mode 100644 internal/coreinternal/parseutils/parser_test.go
create mode 100644 internal/coreinternal/textutils/package_test.go
create mode 100644 internal/coreinternal/timeutils/internal/ctimefmt/package_test.go
create mode 100644 internal/coreinternal/timeutils/package_test.go
create mode 100644 internal/coreinternal/traceutil/package_test.go
create mode 100644 internal/datadog/metrics_client.go
create mode 100644 internal/datadog/metrics_client_test.go
create mode 100644 internal/docker/config_test.go
create mode 100644 internal/docker/package_test.go
create mode 100644 internal/exp/metrics/Makefile
create mode 100644 internal/exp/metrics/go.mod
rename {receiver/filereceiver => internal/exp/metrics}/go.sum (55%)
create mode 100644 internal/exp/metrics/identity/doc.go
create mode 100644 internal/exp/metrics/identity/metric.go
create mode 100644 internal/exp/metrics/identity/resource.go
create mode 100644 internal/exp/metrics/identity/scope.go
create mode 100644 internal/exp/metrics/identity/stream.go
create mode 100644 internal/exp/metrics/identity/strings.go
create mode 100644 internal/exp/metrics/metadata.yaml
create mode 100644 internal/exp/metrics/staleness/priority_queue.go
create mode 100644 internal/exp/metrics/staleness/priority_queue_test.go
create mode 100644 internal/exp/metrics/staleness/staleness.go
create mode 100644 internal/exp/metrics/staleness/staleness_test.go
create mode 100644 internal/exp/metrics/streams/streams.go
create mode 100644 internal/filter/filterconfig/package_test.go
create mode 100644 internal/filter/filterexpr/package_test.go
create mode 100644 internal/filter/filterlog/package_test.go
create mode 100644 internal/filter/filtermatcher/package_test.go
create mode 100644 internal/filter/filtermetric/package_test.go
create mode 100644 internal/filter/filterottl/package_test.go
create mode 100644 internal/filter/filterset/package_test.go
create mode 100644 internal/filter/filterset/regexp/package_test.go
create mode 100644 internal/filter/filterset/strict/package_test.go
create mode 100644 internal/filter/filterspan/package_test.go
create mode 100644 internal/k8stest/client.go
create mode 100644 internal/kafka/awsmsk/package_test.go
create mode 100644 internal/kafka/package_test.go
create mode 100644 internal/kubelet/package_test.go
create mode 100644 internal/metadataproviders/consul/package_test.go
create mode 100644 internal/metadataproviders/docker/package_test.go
create mode 100644 internal/metadataproviders/internal/package_test.go
create mode 100644 internal/metadataproviders/k8snode/package_test.go
create mode 100644 internal/metadataproviders/openshift/package_test.go
create mode 100644 internal/metadataproviders/system/package_test.go
create mode 100644 internal/sharedcomponent/package_test.go
create mode 100644 internal/splunk/package_test.go
create mode 100644 internal/sqlquery/Makefile
create mode 100644 internal/sqlquery/config.go
create mode 100644 internal/sqlquery/db_client.go
rename {receiver/sqlqueryreceiver => internal/sqlquery}/db_client_test.go (68%)
rename {receiver/sqlqueryreceiver => internal/sqlquery}/db_wrappers.go (73%)
create mode 100644 internal/sqlquery/go.mod
create mode 100644 internal/sqlquery/go.sum
create mode 100644 internal/sqlquery/metadata.yaml
rename {receiver/sqlqueryreceiver => internal/sqlquery}/metrics.go (93%)
rename {receiver/sqlqueryreceiver => internal/sqlquery}/metrics_test.go (82%)
rename {receiver/sqlqueryreceiver => internal/sqlquery}/row_scanner.go (88%)
create mode 100644 internal/sqlquery/scraper.go
rename {receiver/sqlqueryreceiver => internal/sqlquery}/scraper_test.go (83%)
create mode 100644 internal/tools/package_test.go
create mode 100644 pkg/batchperresourceattr/package_test.go
create mode 100644 pkg/batchpersignal/package_test.go
create mode 100644 pkg/experimentalmetricmetadata/package_test.go
create mode 100644 pkg/golden/metrics_options.go
create mode 100644 pkg/golden/package_test.go
create mode 100644 pkg/golden/testdata/skip-timestamp-norm/expected.yaml
create mode 100644 pkg/ottl/LANGUAGE.md
create mode 100644 pkg/ottl/config.go
create mode 100644 pkg/ottl/contexts/internal/errors.go
create mode 100644 pkg/ottl/contexts/internal/package_test.go
create mode 100644 pkg/ottl/contexts/internal/path.go
create mode 100644 pkg/ottl/contexts/ottldatapoint/package_test.go
create mode 100644 pkg/ottl/contexts/ottllog/package_test.go
create mode 100644 pkg/ottl/contexts/ottlmetric/package_test.go
create mode 100644 pkg/ottl/contexts/ottlresource/package_test.go
create mode 100644 pkg/ottl/contexts/ottlscope/package_test.go
create mode 100644 pkg/ottl/contexts/ottlspan/package_test.go
create mode 100644 pkg/ottl/contexts/ottlspanevent/package_test.go
create mode 100644 pkg/ottl/e2e/e2e_test.go
create mode 100644 pkg/ottl/e2e/package_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_base64decode.go
create mode 100644 pkg/ottl/ottlfuncs/func_base64decode_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_flatten.go
create mode 100644 pkg/ottl/ottlfuncs/func_flatten_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_hour.go
create mode 100644 pkg/ottl/ottlfuncs/func_hour_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_is_double.go
create mode 100644 pkg/ottl/ottlfuncs/func_is_double_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_is_int.go
create mode 100644 pkg/ottl/ottlfuncs/func_is_int_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_parse_csv.go
create mode 100644 pkg/ottl/ottlfuncs/func_parse_csv_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_parse_key_value.go
create mode 100644 pkg/ottl/ottlfuncs/func_parse_key_value_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_parse_xml.go
create mode 100644 pkg/ottl/ottlfuncs/func_parse_xml_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_string.go
create mode 100644 pkg/ottl/ottlfuncs/func_string_test.go
create mode 100644 pkg/ottl/ottlfuncs/func_unix.go
create mode 100644 pkg/ottl/ottlfuncs/func_unix_test.go
create mode 100644 pkg/ottl/ottlfuncs/package_test.go
create mode 100644 pkg/ottl/ottltest/package_test.go
create mode 100644 pkg/ottl/package_test.go
create mode 100644 pkg/pdatatest/plogtest/package_test.go
create mode 100644 pkg/pdatatest/pmetrictest/package_test.go
create mode 100644 pkg/pdatatest/ptracetest/package_test.go
create mode 100644 pkg/pdatautil/package_test.go
create mode 100644 pkg/resourcetotelemetry/package_test.go
create mode 100644 pkg/sampling/Makefile
create mode 100644 pkg/sampling/README.md
create mode 100644 pkg/sampling/common.go
create mode 100644 pkg/sampling/doc.go
create mode 100644 pkg/sampling/encoding_test.go
create mode 100644 pkg/sampling/go.mod
create mode 100644 pkg/sampling/go.sum
create mode 100644 pkg/sampling/metadata.yaml
create mode 100644 pkg/sampling/oteltracestate.go
create mode 100644 pkg/sampling/oteltracestate_test.go
create mode 100644 pkg/sampling/probability.go
create mode 100644 pkg/sampling/probability_test.go
create mode 100644 pkg/sampling/randomness.go
create mode 100644 pkg/sampling/randomness_test.go
create mode 100644 pkg/sampling/threshold.go
create mode 100644 pkg/sampling/threshold_test.go
create mode 100644 pkg/sampling/w3ctracestate.go
create mode 100644 pkg/sampling/w3ctracestate_test.go
create mode 100644 pkg/stanza/adapter/package_test.go
delete mode 100644 pkg/stanza/attrs/attrs.go
create mode 100644 pkg/stanza/docs/operators/assign_keys.md
create mode 100644 pkg/stanza/docs/operators/json_array_parser.md
create mode 100644 pkg/stanza/entry/package_test.go
create mode 100644 pkg/stanza/errors/package_test.go
create mode 100644 pkg/stanza/fileconsumer/attrs/attrs.go
create mode 100644 pkg/stanza/fileconsumer/attrs/attrs_test.go
create mode 100644 pkg/stanza/fileconsumer/attrs/owner_other.go
create mode 100644 pkg/stanza/fileconsumer/attrs/owner_windows.go
create mode 100644 pkg/stanza/fileconsumer/internal/checkpoint/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/emittest/nop.go
create mode 100644 pkg/stanza/fileconsumer/internal/emittest/nop_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/emittest/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/emittest/sink.go
create mode 100644 pkg/stanza/fileconsumer/internal/emittest/sink_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/fileset/fileset.go
create mode 100644 pkg/stanza/fileconsumer/internal/fileset/fileset_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/filetest/filetest.go
create mode 100644 pkg/stanza/fileconsumer/internal/filetest/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/fingerprint/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/header/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/reader/factory_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/reader/fingerprint_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/reader/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/reader/reader_test.go
rename pkg/stanza/fileconsumer/{reader_test.go => internal/reader/split_test.go} (68%)
create mode 100644 pkg/stanza/fileconsumer/internal/reader/validate_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/scanner/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/tracker/tracker.go
create mode 100644 pkg/stanza/fileconsumer/internal/tracker/tracker_other.go
create mode 100644 pkg/stanza/fileconsumer/internal/tracker/tracker_windows.go
create mode 100644 pkg/stanza/fileconsumer/internal/trie/package_test.go
create mode 100644 pkg/stanza/fileconsumer/internal/util/package_test.go
create mode 100644 pkg/stanza/fileconsumer/matcher/internal/filter/package_test.go
create mode 100644 pkg/stanza/fileconsumer/matcher/internal/finder/package_test.go
create mode 100644 pkg/stanza/fileconsumer/matcher/package_test.go
create mode 100644 pkg/stanza/fileconsumer/package_test.go
create mode 100644 pkg/stanza/flush/package_test.go
create mode 100644 pkg/stanza/operator/helper/package_test.go
rename pkg/stanza/operator/input/file/{file.go => input.go} (77%)
rename pkg/stanza/operator/input/file/{file_test.go => input_test.go} (96%)
create mode 100644 pkg/stanza/operator/input/file/package_test.go
create mode 100644 pkg/stanza/operator/input/generate/config.go
rename pkg/stanza/operator/input/generate/{generate.go => input.go} (53%)
rename pkg/stanza/operator/input/generate/{generate_test.go => input_test.go} (100%)
create mode 100644 pkg/stanza/operator/input/generate/package_test.go
create mode 100644 pkg/stanza/operator/input/journald/config_all.go
create mode 100644 pkg/stanza/operator/input/journald/config_linux.go
create mode 100644 pkg/stanza/operator/input/journald/config_nonlinux.go
rename pkg/stanza/operator/input/journald/{journald.go => input.go} (56%)
rename pkg/stanza/operator/input/journald/{journald_test.go => input_test.go} (96%)
create mode 100644 pkg/stanza/operator/input/journald/package_test.go
create mode 100644 pkg/stanza/operator/input/namedpipe/config_all.go
create mode 100644 pkg/stanza/operator/input/namedpipe/config_linux.go
create mode 100644 pkg/stanza/operator/input/namedpipe/input.go
create mode 100644 pkg/stanza/operator/input/namedpipe/input_nonlinux.go
create mode 100644 pkg/stanza/operator/input/namedpipe/input_test.go
create mode 100644 pkg/stanza/operator/input/namedpipe/package_test.go
create mode 100644 pkg/stanza/operator/input/namedpipe/watcher.go
create mode 100644 pkg/stanza/operator/input/stdin/config.go
rename pkg/stanza/operator/input/stdin/{stdin.go => input.go} (52%)
rename pkg/stanza/operator/input/stdin/{stdin_test.go => input_test.go} (100%)
create mode 100644 pkg/stanza/operator/input/stdin/package_test.go
rename pkg/stanza/operator/input/syslog/{syslog.go => config.go} (66%)
create mode 100644 pkg/stanza/operator/input/syslog/input.go
rename pkg/stanza/operator/input/syslog/{syslog_test.go => input_test.go} (73%)
create mode 100644 pkg/stanza/operator/input/syslog/package_test.go
create mode 100644 pkg/stanza/operator/input/tcp/config.go
create mode 100644 pkg/stanza/operator/input/tcp/input.go
rename pkg/stanza/operator/input/tcp/{tcp_test.go => input_test.go} (98%)
create mode 100644 pkg/stanza/operator/input/tcp/package_test.go
delete mode 100644 pkg/stanza/operator/input/tcp/tcp.go
create mode 100644 pkg/stanza/operator/input/udp/config.go
create mode 100644 pkg/stanza/operator/input/udp/input.go
rename pkg/stanza/operator/input/udp/{udp_test.go => input_test.go} (100%)
create mode 100644 pkg/stanza/operator/input/udp/package_test.go
delete mode 100644 pkg/stanza/operator/input/udp/udp.go
create mode 100644 pkg/stanza/operator/input/windows/config_all.go
create mode 100644 pkg/stanza/operator/input/windows/config_windows.go
create mode 100644 pkg/stanza/operator/input/windows/input.go
delete mode 100644 pkg/stanza/operator/input/windows/operator.go
create mode 100644 pkg/stanza/operator/input/windows/package_test.go
rename pkg/stanza/operator/output/drop/{drop.go => config.go} (66%)
create mode 100644 pkg/stanza/operator/output/drop/output.go
rename pkg/stanza/operator/output/drop/{drop_test.go => output_test.go} (100%)
create mode 100644 pkg/stanza/operator/output/drop/package_test.go
rename pkg/stanza/operator/output/file/{file.go => config.go} (50%)
create mode 100644 pkg/stanza/operator/output/file/output.go
rename pkg/stanza/operator/output/stdout/{stdout.go => config.go} (61%)
create mode 100644 pkg/stanza/operator/output/stdout/output.go
rename pkg/stanza/operator/output/stdout/{stdout_test.go => output_test.go} (100%)
create mode 100644 pkg/stanza/operator/output/stdout/package_test.go
create mode 100644 pkg/stanza/operator/package_test.go
create mode 100644 pkg/stanza/operator/parser/csv/config.go
delete mode 100644 pkg/stanza/operator/parser/csv/csv.go
create mode 100644 pkg/stanza/operator/parser/csv/package_test.go
create mode 100644 pkg/stanza/operator/parser/csv/parser.go
rename pkg/stanza/operator/parser/csv/{csv_test.go => parser_test.go} (100%)
rename pkg/stanza/operator/parser/json/{json.go => config.go} (64%)
create mode 100644 pkg/stanza/operator/parser/json/package_test.go
create mode 100644 pkg/stanza/operator/parser/json/parser.go
rename pkg/stanza/operator/parser/json/{json_test.go => parser_test.go} (98%)
create mode 100644 pkg/stanza/operator/parser/jsonarray/config.go
create mode 100644 pkg/stanza/operator/parser/jsonarray/config_test.go
create mode 100644 pkg/stanza/operator/parser/jsonarray/parser.go
create mode 100644 pkg/stanza/operator/parser/jsonarray/parser_test.go
create mode 100644 pkg/stanza/operator/parser/jsonarray/testdata/config.yaml
create mode 100644 pkg/stanza/operator/parser/keyvalue/config.go
delete mode 100644 pkg/stanza/operator/parser/keyvalue/keyvalue.go
create mode 100644 pkg/stanza/operator/parser/keyvalue/package_test.go
create mode 100644 pkg/stanza/operator/parser/keyvalue/parser.go
rename pkg/stanza/operator/parser/keyvalue/{keyvalue_test.go => parser_test.go} (78%)
rename pkg/stanza/operator/parser/regex/{regex.go => config.go} (64%)
create mode 100644 pkg/stanza/operator/parser/regex/package_test.go
create mode 100644 pkg/stanza/operator/parser/regex/parser.go
rename pkg/stanza/operator/parser/regex/{regex_test.go => parser_test.go} (98%)
rename pkg/stanza/operator/parser/scope/{scope_name.go => config.go} (78%)
create mode 100644 pkg/stanza/operator/parser/scope/package_test.go
create mode 100644 pkg/stanza/operator/parser/scope/parser.go
rename pkg/stanza/operator/parser/scope/{scope_name_test.go => parser_test.go} (100%)
rename pkg/stanza/operator/parser/severity/{severity.go => config.go} (79%)
create mode 100644 pkg/stanza/operator/parser/severity/package_test.go
create mode 100644 pkg/stanza/operator/parser/severity/parser.go
rename pkg/stanza/operator/parser/severity/{severity_test.go => parser_test.go} (100%)
create mode 100644 pkg/stanza/operator/parser/syslog/config.go
create mode 100644 pkg/stanza/operator/parser/syslog/package_test.go
rename pkg/stanza/operator/parser/syslog/{syslog.go => parser.go} (57%)
rename pkg/stanza/operator/parser/syslog/{syslog_test.go => parser_test.go} (100%)
rename pkg/stanza/operator/parser/time/{time.go => config.go} (79%)
create mode 100644 pkg/stanza/operator/parser/time/package_test.go
create mode 100644 pkg/stanza/operator/parser/time/parser.go
rename pkg/stanza/operator/parser/time/{time_test.go => parser_test.go} (100%)
rename pkg/stanza/operator/parser/trace/{trace.go => config.go} (79%)
create mode 100644 pkg/stanza/operator/parser/trace/package_test.go
create mode 100644 pkg/stanza/operator/parser/trace/parser.go
rename pkg/stanza/operator/parser/trace/{trace_test.go => parser_test.go} (100%)
create mode 100644 pkg/stanza/operator/parser/uri/config.go
create mode 100644 pkg/stanza/operator/parser/uri/package_test.go
rename pkg/stanza/operator/parser/uri/{uri.go => parser.go} (68%)
rename pkg/stanza/operator/parser/uri/{uri_test.go => parser_test.go} (100%)
rename pkg/stanza/operator/transformer/add/{add.go => config.go} (66%)
create mode 100644 pkg/stanza/operator/transformer/add/package_test.go
create mode 100644 pkg/stanza/operator/transformer/add/transformer.go
rename pkg/stanza/operator/transformer/add/{add_test.go => transformer_test.go} (100%)
create mode 100644 pkg/stanza/operator/transformer/assignkeys/config.go
create mode 100644 pkg/stanza/operator/transformer/assignkeys/config_test.go
create mode 100644 pkg/stanza/operator/transformer/assignkeys/package_test.go
create mode 100644 pkg/stanza/operator/transformer/assignkeys/testdata/config.yaml
create mode 100644 pkg/stanza/operator/transformer/assignkeys/transformer.go
create mode 100644 pkg/stanza/operator/transformer/assignkeys/transformer_test.go
rename pkg/stanza/operator/transformer/copy/{copy.go => config.go} (73%)
create mode 100644 pkg/stanza/operator/transformer/copy/package_test.go
create mode 100644 pkg/stanza/operator/transformer/copy/transformer.go
rename pkg/stanza/operator/transformer/copy/{copy_test.go => transformer_test.go} (100%)
rename pkg/stanza/operator/transformer/filter/{filter.go => config.go} (66%)
create mode 100644 pkg/stanza/operator/transformer/filter/config_test.go
create mode 100644 pkg/stanza/operator/transformer/filter/package_test.go
create mode 100644 pkg/stanza/operator/transformer/filter/testdata/config.yaml
create mode 100644 pkg/stanza/operator/transformer/filter/transformer.go
rename pkg/stanza/operator/transformer/filter/{filter_test.go => transformer_test.go} (91%)
rename pkg/stanza/operator/transformer/flatten/{flatten.go => config.go} (62%)
create mode 100644 pkg/stanza/operator/transformer/flatten/package_test.go
create mode 100644 pkg/stanza/operator/transformer/flatten/transformer.go
rename pkg/stanza/operator/transformer/flatten/{flatten_test.go => transformer_test.go} (100%)
rename pkg/stanza/operator/transformer/move/{move.go => config.go} (73%)
create mode 100644 pkg/stanza/operator/transformer/move/package_test.go
create mode 100644 pkg/stanza/operator/transformer/move/transformer.go
rename pkg/stanza/operator/transformer/move/{move_test.go => transformer_test.go} (100%)
rename pkg/stanza/operator/transformer/noop/{noop.go => config.go} (76%)
create mode 100644 pkg/stanza/operator/transformer/noop/config_test.go
create mode 100644 pkg/stanza/operator/transformer/noop/package_test.go
create mode 100644 pkg/stanza/operator/transformer/noop/transformer.go
rename pkg/stanza/operator/transformer/noop/{noop_test.go => transformer_test.go} (73%)
create mode 100644 pkg/stanza/operator/transformer/recombine/config.go
create mode 100644 pkg/stanza/operator/transformer/recombine/package_test.go
delete mode 100644 pkg/stanza/operator/transformer/recombine/recombine.go
create mode 100644 pkg/stanza/operator/transformer/recombine/transformer.go
rename pkg/stanza/operator/transformer/recombine/{recombine_test.go => transformer_test.go} (84%)
rename pkg/stanza/operator/transformer/remove/{remove.go => config.go} (68%)
create mode 100644 pkg/stanza/operator/transformer/remove/package_test.go
create mode 100644 pkg/stanza/operator/transformer/remove/transformer.go
rename pkg/stanza/operator/transformer/remove/{remove_test.go => transformer_test.go} (100%)
rename pkg/stanza/operator/transformer/retain/{retain.go => config.go} (65%)
create mode 100644 pkg/stanza/operator/transformer/retain/package_test.go
create mode 100644 pkg/stanza/operator/transformer/retain/transformer.go
rename pkg/stanza/operator/transformer/retain/{retain_test.go => transformer_test.go} (100%)
create mode 100644 pkg/stanza/operator/transformer/router/config.go
create mode 100644 pkg/stanza/operator/transformer/router/package_test.go
delete mode 100644 pkg/stanza/operator/transformer/router/router.go
create mode 100644 pkg/stanza/operator/transformer/router/transformer.go
rename pkg/stanza/operator/transformer/router/{router_test.go => transformer_test.go} (100%)
rename pkg/stanza/operator/transformer/unquote/{unquote.go => config.go} (68%)
create mode 100644 pkg/stanza/operator/transformer/unquote/package_test.go
create mode 100644 pkg/stanza/operator/transformer/unquote/transformer.go
rename pkg/stanza/operator/transformer/unquote/{unquote_test.go => transformer_test.go} (100%)
create mode 100644 pkg/stanza/pipeline/package_test.go
create mode 100644 pkg/stanza/split/package_test.go
create mode 100644 pkg/stanza/split/splittest/package_test.go
create mode 100644 pkg/stanza/trim/package_test.go
create mode 100644 pkg/translator/azure/package_test.go
create mode 100644 pkg/translator/azure/testdata/log-bad-time.json
create mode 100644 pkg/translator/jaeger/README.md
create mode 100644 pkg/translator/jaeger/package_test.go
create mode 100644 pkg/translator/loki/package_test.go
create mode 100644 pkg/translator/opencensus/package_test.go
create mode 100644 pkg/translator/prometheus/package_test.go
create mode 100644 pkg/translator/prometheusremotewrite/otlp_to_openmetrics_metadata.go
create mode 100644 pkg/translator/prometheusremotewrite/otlp_to_openmetrics_metadata_test.go
create mode 100644 pkg/translator/prometheusremotewrite/package_test.go
create mode 100644 pkg/translator/signalfx/package_test.go
create mode 100644 pkg/translator/skywalking/package_test.go
create mode 100644 pkg/translator/zipkin/zipkinv1/package_test.go
create mode 100644 pkg/translator/zipkin/zipkinv2/package_test.go
create mode 100644 pkg/winperfcounters/package_test.go
create mode 100644 processor/attributesprocessor/generated_component_test.go
create mode 100644 processor/attributesprocessor/package_test.go
create mode 100644 processor/cumulativetodeltaprocessor/generated_component_test.go
create mode 100644 processor/cumulativetodeltaprocessor/internal/tracking/package_test.go
create mode 100644 processor/cumulativetodeltaprocessor/package_test.go
delete mode 100644 processor/datadogprocessor/README.md
delete mode 100644 processor/datadogprocessor/config.go
delete mode 100644 processor/datadogprocessor/doc.go
delete mode 100644 processor/datadogprocessor/factory.go
delete mode 100644 processor/datadogprocessor/go.mod
delete mode 100644 processor/datadogprocessor/go.sum
delete mode 100644 processor/datadogprocessor/internal/metadata/generated_status.go
delete mode 100644 processor/datadogprocessor/metadata.yaml
delete mode 100644 processor/datadogprocessor/processor.go
delete mode 100644 processor/datadogprocessor/processor_test.go
rename processor/{spanmetricsprocessor => deltatocumulativeprocessor}/Makefile (100%)
create mode 100644 processor/deltatocumulativeprocessor/README.md
create mode 100644 processor/deltatocumulativeprocessor/config.go
create mode 100644 processor/deltatocumulativeprocessor/config_test.go
create mode 100644 processor/deltatocumulativeprocessor/doc.go
create mode 100644 processor/deltatocumulativeprocessor/factory.go
create mode 100644 processor/deltatocumulativeprocessor/generated_component_test.go
create mode 100644 processor/deltatocumulativeprocessor/go.mod
create mode 100644 processor/deltatocumulativeprocessor/go.sum
create mode 100644 processor/deltatocumulativeprocessor/internal/data/add.go
create mode 100644 processor/deltatocumulativeprocessor/internal/data/data.go
create mode 100644 processor/deltatocumulativeprocessor/internal/delta/delta.go
create mode 100644 processor/deltatocumulativeprocessor/internal/delta/delta_test.go
create mode 100644 processor/deltatocumulativeprocessor/internal/maybe/ptr.go
create mode 100644 processor/deltatocumulativeprocessor/internal/maybe/ptr_test.go
create mode 100644 processor/deltatocumulativeprocessor/internal/metadata/generated_status.go
create mode 100644 processor/deltatocumulativeprocessor/internal/metrics/data.go
create mode 100644 processor/deltatocumulativeprocessor/internal/metrics/metrics.go
create mode 100644 processor/deltatocumulativeprocessor/internal/metrics/util.go
create mode 100644 processor/deltatocumulativeprocessor/internal/streams/data.go
create mode 100644 processor/deltatocumulativeprocessor/internal/streams/data_test.go
create mode 100644 processor/deltatocumulativeprocessor/internal/streams/errors.go
create mode 100644 processor/deltatocumulativeprocessor/internal/streams/limit.go
create mode 100644 processor/deltatocumulativeprocessor/internal/streams/limit_test.go
create mode 100644 processor/deltatocumulativeprocessor/internal/streams/streams.go
create mode 100644 processor/deltatocumulativeprocessor/internal/telemetry/faults_test.go
create mode 100644 processor/deltatocumulativeprocessor/internal/telemetry/metrics.go
create mode 100644 processor/deltatocumulativeprocessor/internal/testdata/random/random.go
create mode 100644 processor/deltatocumulativeprocessor/metadata.yaml
create mode 100644 processor/deltatocumulativeprocessor/processor.go
create mode 100644 processor/deltatocumulativeprocessor/testdata/config.yaml
create mode 100644 processor/deltatorateprocessor/generated_component_test.go
create mode 100644 processor/deltatorateprocessor/package_test.go
create mode 100644 processor/filterprocessor/generated_component_test.go
create mode 100644 processor/filterprocessor/package_test.go
create mode 100644 processor/filterprocessor/telemetry.go
create mode 100644 processor/filterprocessor/telemetry_test.go
create mode 100644 processor/groupbyattrsprocessor/generated_component_test.go
create mode 100644 processor/groupbyattrsprocessor/package_test.go
create mode 100644 processor/groupbyattrsprocessor/telemetry_test.go
create mode 100644 processor/groupbytraceprocessor/generated_component_test.go
create mode 100644 processor/intervalprocessor/Makefile
create mode 100644 processor/intervalprocessor/README.md
create mode 100644 processor/intervalprocessor/config.go
create mode 100644 processor/intervalprocessor/doc.go
create mode 100644 processor/intervalprocessor/factory.go
create mode 100644 processor/intervalprocessor/generated_component_test.go
create mode 100644 processor/intervalprocessor/go.mod
create mode 100644 processor/intervalprocessor/go.sum
create mode 100644 processor/intervalprocessor/internal/metadata/generated_status.go
create mode 100644 processor/intervalprocessor/metadata.yaml
create mode 100644 processor/intervalprocessor/processor.go
create mode 100644 processor/k8sattributesprocessor/generated_component_test.go
create mode 100644 processor/k8sattributesprocessor/internal/metadata/package_test.go
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/clusterrbac/collector/clusterrole.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/clusterrbac/collector/clusterrolebinding.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{ => clusterrbac}/collector/configmap.yaml (95%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/clusterrbac/collector/deployment.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/clusterrbac/collector/service.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/clusterrbac/collector/serviceaccount.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/clusterrbac/namespace.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{ => clusterrbac}/telemetrygen/daemonset.yaml (95%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/clusterrbac/telemetrygen/deployment.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{ => clusterrbac}/telemetrygen/job.yaml (94%)
rename processor/k8sattributesprocessor/testdata/e2e/{ => clusterrbac}/telemetrygen/statefulset.yaml (95%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/mixrbac/collector/clusterrole.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{ => mixrbac}/collector/clusterrolebinding.yaml (86%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/mixrbac/collector/configmap.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{ => mixrbac}/collector/deployment.yaml (93%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/mixrbac/collector/role-workloadns.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/mixrbac/collector/rolebinding-workloadns.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{ => mixrbac}/collector/service.yaml (89%)
rename processor/k8sattributesprocessor/testdata/e2e/{ => mixrbac}/collector/serviceaccount.yaml (64%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/mixrbac/otelcol-namespace.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{ => mixrbac}/telemetrygen/deployment.yaml (95%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/mixrbac/workload-namespace.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/namespacedrbac/collector/configmap.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/namespacedrbac/collector/deployment.yaml
rename processor/k8sattributesprocessor/testdata/e2e/{collector/clusterrole.yaml => namespacedrbac/collector/role.yaml} (79%)
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/namespacedrbac/collector/rolebinding.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/namespacedrbac/collector/service.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/namespacedrbac/collector/serviceaccount.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/namespacedrbac/namespace.yaml
create mode 100644 processor/k8sattributesprocessor/testdata/e2e/namespacedrbac/telemetrygen/deployment.yaml
create mode 100644 processor/logstransformprocessor/generated_component_test.go
create mode 100644 processor/logstransformprocessor/package_test.go
create mode 100644 processor/metricsgenerationprocessor/generated_component_test.go
create mode 100644 processor/metricsgenerationprocessor/package_test.go
create mode 100644 processor/metricstransformprocessor/generated_component_test.go
create mode 100644 processor/metricstransformprocessor/package_test.go
create mode 100644 processor/probabilisticsamplerprocessor/fnvhasher_test.go
create mode 100644 processor/probabilisticsamplerprocessor/generated_component_test.go
create mode 100644 processor/probabilisticsamplerprocessor/package_test.go
create mode 100644 processor/redactionprocessor/generated_component_test.go
create mode 100644 processor/redactionprocessor/package_test.go
create mode 100644 processor/remotetapprocessor/generated_component_test.go
create mode 100644 processor/resourcedetectionprocessor/generated_component_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/ec2/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/ec2/package_test.go
mode change 100644 => 100755 processor/resourcedetectionprocessor/internal/aws/ecs/ecs.go
mode change 100644 => 100755 processor/resourcedetectionprocessor/internal/aws/ecs/ecs_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/ecs/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/ecs/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/eks/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/eks/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/elasticbeanstalk/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/elasticbeanstalk/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/lambda/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/aws/lambda/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/azure/aks/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/azure/aks/package_test.go
delete mode 100644 processor/resourcedetectionprocessor/internal/azure/internal/metadata/generated_status.go
create mode 100644 processor/resourcedetectionprocessor/internal/azure/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/azure/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/consul/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/consul/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/docker/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/docker/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/env/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/gcp/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/gcp/package_test.go
delete mode 100644 processor/resourcedetectionprocessor/internal/heroku/internal/metadata/generated_status.go
create mode 100644 processor/resourcedetectionprocessor/internal/heroku/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/heroku/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/k8snode/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/k8snode/package_test.go
delete mode 100644 processor/resourcedetectionprocessor/internal/openshift/internal/metadata/generated_status.go
create mode 100644 processor/resourcedetectionprocessor/internal/openshift/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/openshift/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/system/internal/metadata/package_test.go
create mode 100644 processor/resourcedetectionprocessor/internal/system/package_test.go
create mode 100644 processor/resourcedetectionprocessor/package_test.go
create mode 100644 processor/resourceprocessor/generated_component_test.go
create mode 100644 processor/resourceprocessor/package_test.go
create mode 100644 processor/routingprocessor/generated_component_test.go
create mode 100644 processor/routingprocessor/package_test.go
create mode 100644 processor/schemaprocessor/generated_component_test.go
create mode 100644 processor/schemaprocessor/internal/alias/package_test.go
create mode 100644 processor/schemaprocessor/internal/migrate/package_test.go
create mode 100644 processor/schemaprocessor/internal/translation/package_test.go
create mode 100644 processor/schemaprocessor/package_test.go
delete mode 100644 processor/servicegraphprocessor/README.md
delete mode 100644 processor/servicegraphprocessor/config_test.go
delete mode 100644 processor/servicegraphprocessor/doc.go
delete mode 100644 processor/servicegraphprocessor/factory.go
delete mode 100644 processor/servicegraphprocessor/factory_test.go
delete mode 100644 processor/servicegraphprocessor/go.mod
delete mode 100644 processor/servicegraphprocessor/go.sum
delete mode 100644 processor/servicegraphprocessor/internal/metadata/generated_status.go
delete mode 100644 processor/servicegraphprocessor/metadata.yaml
delete mode 100644 processor/servicegraphprocessor/metrics.go
delete mode 100644 processor/servicegraphprocessor/processor_test.go
delete mode 100644 processor/servicegraphprocessor/testdata/service-graph-config.yaml
delete mode 100644 processor/spanmetricsprocessor/README.md
delete mode 100644 processor/spanmetricsprocessor/config.go
delete mode 100644 processor/spanmetricsprocessor/config_test.go
delete mode 100644 processor/spanmetricsprocessor/factory.go
delete mode 100644 processor/spanmetricsprocessor/factory_test.go
delete mode 100644 processor/spanmetricsprocessor/go.mod
delete mode 100644 processor/spanmetricsprocessor/go.sum
delete mode 100644 processor/spanmetricsprocessor/internal/cache/cache.go
delete mode 100644 processor/spanmetricsprocessor/internal/cache/cache_test.go
delete mode 100644 processor/spanmetricsprocessor/internal/metadata/generated_status.go
delete mode 100644 processor/spanmetricsprocessor/metadata.yaml
delete mode 100644 processor/spanmetricsprocessor/mocks/Host.go
delete mode 100644 processor/spanmetricsprocessor/mocks/MetricsConsumer.go
delete mode 100644 processor/spanmetricsprocessor/mocks/TracesConsumer.go
delete mode 100644 processor/spanmetricsprocessor/processor.go
delete mode 100644 processor/spanmetricsprocessor/processor_test.go
delete mode 100644 processor/spanmetricsprocessor/testdata/config-exporter-not-found.yaml
delete mode 100644 processor/spanmetricsprocessor/testdata/config-prometheusremotewrite.yaml
delete mode 100644 processor/spanmetricsprocessor/testdata/config-simplest.yaml
delete mode 100644 processor/spanmetricsprocessor/testdata/config.yaml
create mode 100644 processor/spanprocessor/generated_component_test.go
create mode 100644 processor/spanprocessor/package_test.go
create mode 100644 processor/sumologicprocessor/generated_component_test.go
create mode 100644 processor/sumologicprocessor/package_test.go
create mode 100644 processor/tailsamplingprocessor/generated_component_test.go
create mode 100644 processor/tailsamplingprocessor/internal/idbatcher/package_test.go
create mode 100644 processor/tailsamplingprocessor/internal/sampling/package_test.go
rename processor/tailsamplingprocessor/{main_test.go => package_test.go} (100%)
create mode 100644 processor/transformprocessor/generated_component_test.go
create mode 100644 processor/transformprocessor/internal/logs/package_test.go
create mode 100644 processor/transformprocessor/internal/metrics/func_convert_gauge_to_sum_datapoint.go
create mode 100644 processor/transformprocessor/internal/metrics/func_convert_gauge_to_sum_datapoint_test.go
create mode 100644 processor/transformprocessor/internal/metrics/func_convert_sum_to_gauge_datapoint.go
create mode 100644 processor/transformprocessor/internal/metrics/func_convert_sum_to_gauge_datapoint_test.go
create mode 100644 processor/transformprocessor/internal/metrics/func_copy_metric.go
create mode 100644 processor/transformprocessor/internal/metrics/func_copy_metric_test.go
create mode 100644 processor/transformprocessor/internal/metrics/package_test.go
create mode 100644 processor/transformprocessor/internal/traces/package_test.go
create mode 100644 processor/transformprocessor/package_test.go
create mode 100644 receiver/activedirectorydsreceiver/internal/metadata/package_test.go
create mode 100644 receiver/activedirectorydsreceiver/package_test.go
create mode 100644 receiver/aerospikereceiver/cluster/package_test.go
create mode 100644 receiver/aerospikereceiver/generated_component_test.go
create mode 100644 receiver/aerospikereceiver/internal/metadata/package_test.go
create mode 100644 receiver/apachereceiver/generated_component_test.go
create mode 100644 receiver/apachereceiver/internal/metadata/package_test.go
create mode 100644 receiver/apachesparkreceiver/generated_component_test.go
create mode 100644 receiver/apachesparkreceiver/internal/metadata/package_test.go
create mode 100644 receiver/apachesparkreceiver/package_test.go
create mode 100644 receiver/awscloudwatchmetricsreceiver/generated_component_test.go
create mode 100644 receiver/awscloudwatchmetricsreceiver/package_test.go
create mode 100644 receiver/awscloudwatchreceiver/generated_component_test.go
create mode 100644 receiver/awscloudwatchreceiver/package_test.go
create mode 100644 receiver/awscontainerinsightreceiver/generated_component_test.go
create mode 100644 receiver/awscontainerinsightreceiver/internal/cadvisor/extractors/package_test.go
create mode 100644 receiver/awsecscontainermetricsreceiver/internal/awsecscontainermetrics/package_test.go
create mode 100644 receiver/awsecscontainermetricsreceiver/package_test.go
create mode 100644 receiver/awsfirehosereceiver/generated_component_test.go
create mode 100644 receiver/awsfirehosereceiver/internal/unmarshaler/cwmetricstream/package_test.go
create mode 100644 receiver/awsfirehosereceiver/internal/unmarshaler/unmarshalertest/package_test.go
create mode 100644 receiver/awsfirehosereceiver/package_test.go
create mode 100644 receiver/awss3receiver/Makefile
create mode 100644 receiver/awss3receiver/README.md
create mode 100644 receiver/awss3receiver/config.go
rename receiver/{filereceiver => awss3receiver}/config_test.go (62%)
create mode 100644 receiver/awss3receiver/doc.go
create mode 100644 receiver/awss3receiver/factory.go
rename receiver/{filereceiver => awss3receiver}/factory_test.go (89%)
create mode 100644 receiver/awss3receiver/generated_component_test.go
create mode 100644 receiver/awss3receiver/go.mod
create mode 100644 receiver/awss3receiver/go.sum
create mode 100644 receiver/awss3receiver/internal/metadata/generated_status.go
create mode 100644 receiver/awss3receiver/metadata.yaml
create mode 100644 receiver/awss3receiver/package_test.go
create mode 100644 receiver/awss3receiver/receiver.go
create mode 100644 receiver/awss3receiver/testdata/config.yaml
create mode 100644 receiver/awsxrayreceiver/internal/tracesegment/package_test.go
create mode 100644 receiver/awsxrayreceiver/internal/translator/package_test.go
create mode 100644 receiver/awsxrayreceiver/package_test.go
create mode 100644 receiver/azureblobreceiver/generated_component_test.go
create mode 100644 receiver/azureblobreceiver/package_test.go
create mode 100644 receiver/azureeventhubreceiver/generated_component_test.go
create mode 100644 receiver/azuremonitorreceiver/generated_component_test.go
create mode 100644 receiver/azuremonitorreceiver/internal/metadata/package_test.go
create mode 100644 receiver/azuremonitorreceiver/package_test.go
create mode 100644 receiver/bigipreceiver/generated_component_test.go
create mode 100644 receiver/bigipreceiver/internal/metadata/package_test.go
create mode 100644 receiver/bigipreceiver/package_test.go
create mode 100644 receiver/carbonreceiver/generated_component_test.go
rename receiver/carbonreceiver/{transport => internal}/client/plaintext_client.go (98%)
create mode 100644 receiver/carbonreceiver/internal/transport/package_test.go
rename receiver/carbonreceiver/{ => internal}/transport/server.go (95%)
rename receiver/carbonreceiver/{ => internal}/transport/server_test.go (79%)
rename receiver/carbonreceiver/{ => internal}/transport/tcp_server.go (90%)
rename receiver/carbonreceiver/{ => internal}/transport/udp_server.go (97%)
create mode 100644 receiver/carbonreceiver/package_test.go
create mode 100644 receiver/carbonreceiver/protocol/package_test.go
delete mode 100644 receiver/carbonreceiver/transport/mock_reporter.go
create mode 100644 receiver/chronyreceiver/generated_component_test.go
create mode 100644 receiver/chronyreceiver/internal/chrony/package_test.go
create mode 100644 receiver/chronyreceiver/internal/metadata/package_test.go
create mode 100644 receiver/chronyreceiver/package_test.go
create mode 100644 receiver/cloudflarereceiver/generated_component_test.go
create mode 100644 receiver/cloudflarereceiver/package_test.go
create mode 100644 receiver/cloudfoundryreceiver/generated_component_test.go
create mode 100644 receiver/cloudfoundryreceiver/package_test.go
create mode 100644 receiver/collectdreceiver/generated_component_test.go
create mode 100644 receiver/collectdreceiver/package_test.go
create mode 100644 receiver/couchdbreceiver/generated_component_test.go
create mode 100644 receiver/couchdbreceiver/internal/metadata/package_test.go
create mode 100644 receiver/couchdbreceiver/package_test.go
create mode 100644 receiver/datadogreceiver/generated_component_test.go
create mode 100644 receiver/datadogreceiver/package_test.go
create mode 100644 receiver/dockerstatsreceiver/generated_component_test.go
create mode 100644 receiver/dockerstatsreceiver/internal/metadata/package_test.go
create mode 100644 receiver/dockerstatsreceiver/metric_helper_test.go
create mode 100644 receiver/dockerstatsreceiver/package_test.go
create mode 100644 receiver/dockerstatsreceiver/testdata/mock/cpu_limit/container.json
create mode 100644 receiver/dockerstatsreceiver/testdata/mock/cpu_limit/containers.json
create mode 100644 receiver/dockerstatsreceiver/testdata/mock/cpu_limit/expected_metrics.yaml
create mode 100644 receiver/dockerstatsreceiver/testdata/mock/cpu_limit/stats.json
create mode 100644 receiver/elasticsearchreceiver/generated_component_test.go
create mode 100644 receiver/elasticsearchreceiver/internal/metadata/package_test.go
create mode 100644 receiver/elasticsearchreceiver/package_test.go
rename receiver/elasticsearchreceiver/testdata/expected_metrics/{full.yaml => full_linux.yaml} (100%)
create mode 100644 receiver/elasticsearchreceiver/testdata/expected_metrics/full_other.yaml
create mode 100644 receiver/elasticsearchreceiver/testdata/sample_payloads/nodes_stats_other.json
create mode 100644 receiver/expvarreceiver/generated_component_test.go
create mode 100644 receiver/expvarreceiver/internal/metadata/package_test.go
create mode 100644 receiver/expvarreceiver/package_test.go
create mode 100644 receiver/filelogreceiver/generated_component_test.go
create mode 100644 receiver/filelogreceiver/package_test.go
delete mode 100644 receiver/filereceiver/README.md
delete mode 100644 receiver/filereceiver/config.go
delete mode 100644 receiver/filereceiver/factory.go
delete mode 100644 receiver/filereceiver/file_reader.go
delete mode 100644 receiver/filereceiver/file_reader_test.go
delete mode 100644 receiver/filereceiver/go.mod
delete mode 100644 receiver/filereceiver/internal/metadata/generated_status.go
delete mode 100644 receiver/filereceiver/metadata.yaml
delete mode 100644 receiver/filereceiver/receiver.go
delete mode 100644 receiver/filereceiver/receiver_test.go
delete mode 100644 receiver/filereceiver/replay_timer.go
delete mode 100644 receiver/filereceiver/replay_timer_test.go
delete mode 100644 receiver/filereceiver/testdata/config.yaml
delete mode 100644 receiver/filereceiver/testdata/metrics.json
create mode 100644 receiver/filestatsreceiver/generated_component_test.go
create mode 100644 receiver/filestatsreceiver/integration_test.go
create mode 100644 receiver/filestatsreceiver/internal/metadata/package_test.go
create mode 100644 receiver/filestatsreceiver/package_test.go
create mode 100644 receiver/filestatsreceiver/testdata/integration/expected.yaml
create mode 100644 receiver/flinkmetricsreceiver/generated_component_test.go
delete mode 100644 receiver/flinkmetricsreceiver/integration_test.go
create mode 100644 receiver/flinkmetricsreceiver/internal/metadata/package_test.go
create mode 100644 receiver/flinkmetricsreceiver/package_test.go
create mode 100644 receiver/fluentforwardreceiver/generated_component_test.go
create mode 100644 receiver/fluentforwardreceiver/observ/package_test.go
create mode 100644 receiver/gitproviderreceiver/generated_component_test.go
create mode 100644 receiver/gitproviderreceiver/internal/metadata/generated_resource.go
create mode 100644 receiver/gitproviderreceiver/internal/metadata/generated_resource_test.go
create mode 100644 receiver/gitproviderreceiver/internal/metadata/package_test.go
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/config_test.go
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/factory_test.go
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/generated_graphql.go
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/genqlient.graphql
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/genqlient.yaml
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/helpers.go
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/helpers_test.go
create mode 100644 receiver/gitproviderreceiver/internal/scraper/githubscraper/schema.graphql
create mode 100644 receiver/gitproviderreceiver/package_test.go
create mode 100644 receiver/gitproviderreceiver/testdata/config-invalidscraperkey.yaml
create mode 100644 receiver/googlecloudpubsubreceiver/internal/common_protos.go
create mode 100644 receiver/googlecloudpubsubreceiver/internal/log_entry.go
create mode 100644 receiver/googlecloudpubsubreceiver/internal/log_entry_test.go
create mode 100644 receiver/googlecloudspannerreceiver/generated_component_test.go
create mode 100644 receiver/googlecloudspannerreceiver/internal/metadata/package_test.go
create mode 100644 receiver/googlecloudspannerreceiver/internal/metadataconfig/package_test.go
create mode 100644 receiver/googlecloudspannerreceiver/internal/metadataparser/package_test.go
create mode 100644 receiver/haproxyreceiver/generated_component_test.go
create mode 100644 receiver/haproxyreceiver/internal/metadata/package_test.go
create mode 100644 receiver/haproxyreceiver/package_test.go
create mode 100644 receiver/haproxyreceiver/testdata/30252_stats.txt
create mode 100644 receiver/haproxyreceiver/testdata/scraper/30252_expected.yaml
create mode 100644 receiver/hostmetricsreceiver/generated_component_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/perfcounters/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/cpuscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/cpuscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/cpuscraper/ucal/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/diskscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/diskscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/filesystemscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/loadscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/loadscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/memoryscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/memoryscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/networkscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/networkscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/pagingscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/pagingscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/processesscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/processesscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/processscraper/internal/handlecount/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/processscraper/internal/metadata/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/processscraper/package_test.go
create mode 100644 receiver/hostmetricsreceiver/internal/scraper/processscraper/ucal/package_test.go
create mode 100644 receiver/hostmetricsreceiver/package_test.go
create mode 100644 receiver/httpcheckreceiver/generated_component_test.go
create mode 100644 receiver/httpcheckreceiver/internal/metadata/package_test.go
create mode 100644 receiver/httpcheckreceiver/package_test.go
create mode 100644 receiver/iisreceiver/generated_component_test.go
create mode 100644 receiver/iisreceiver/internal/metadata/package_test.go
create mode 100644 receiver/iisreceiver/package_test.go
create mode 100644 receiver/influxdbreceiver/generated_component_test.go
create mode 100644 receiver/influxdbreceiver/package_test.go
create mode 100644 receiver/jaegerreceiver/generated_component_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/README.md
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/config.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/config_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/doc.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/errors.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/factory.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/factory_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/clientcfghttp/cfgmgr.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/clientcfghttp/cfgmgr_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/clientcfghttp/handler.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/clientcfghttp/thrift-0.9.2/.nocover
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/clientcfghttp/thrift-0.9.2/constants.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/clientcfghttp/thrift-0.9.2/ttypes.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/configmanager/grpc/manager.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/configmanager/manager.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/configmanager/metrics.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/httpserver/srv.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/httpserver/srv_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/metadata/generated_status.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/sampling/grpc_handler.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/sampling/grpc_handler_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/sampling/model/empty_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/sampling/model/sampling.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/sampling/strategystore/empty_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/sampling/strategystore/factory.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/internal/sampling/strategystore/interface.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/jaeger_agent_test.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/metadata.yaml
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/testdata/ca.crt
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/testdata/client.crt
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/testdata/client.key
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/testdata/config.yaml
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/testdata/server.crt
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/testdata/server.key
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/testdata/strategies.json
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/trace_receiver.go
delete mode 100644 receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/trace_receiver_test.go
create mode 100644 receiver/jaegerreceiver/package_test.go
create mode 100644 receiver/jmxreceiver/generated_component_test.go
create mode 100644 receiver/jmxreceiver/package_test.go
delete mode 100644 receiver/jmxreceiver/testdata/script.groovy
create mode 100644 receiver/journaldreceiver/config.go
create mode 100644 receiver/journaldreceiver/generated_component_test.go
create mode 100644 receiver/journaldreceiver/package_test.go
create mode 100644 receiver/k8sclusterreceiver/generated_component_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/clusterresourcequota/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/collection/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/cronjob/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/demonset/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/deployment/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/hpa/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/jobs/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/metadata/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/namespace/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/node/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/pod/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/replicaset/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/replicationcontroller/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/resourcequota/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/service/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/statefulset/package_test.go
create mode 100644 receiver/k8sclusterreceiver/internal/utils/package_test.go
create mode 100644 receiver/k8seventsreceiver/generated_component_test.go
create mode 100644 receiver/k8seventsreceiver/package_test.go
create mode 100644 receiver/k8sobjectsreceiver/generated_component_test.go
create mode 100644 receiver/kafkametricsreceiver/generated_component_test.go
delete mode 100644 receiver/kafkametricsreceiver/integration_test.go
create mode 100644 receiver/kafkametricsreceiver/internal/metadata/package_test.go
create mode 100644 receiver/kafkametricsreceiver/package_test.go
create mode 100644 receiver/kafkareceiver/azureresourcelogs_unmarshaler.go
create mode 100644 receiver/kafkareceiver/azureresourcelogs_unmarshaler_test.go
create mode 100644 receiver/kafkareceiver/generated_component_test.go
create mode 100644 receiver/kafkareceiver/package_test.go
create mode 100644 receiver/kubeletstatsreceiver/generated_component_test.go
create mode 100644 receiver/kubeletstatsreceiver/internal/kubelet/package_test.go
create mode 100644 receiver/kubeletstatsreceiver/internal/metadata/package_test.go
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metadata_Container_Metadata_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metadata_Volume_Metadata_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metric_groups_all_groups_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metric_groups_only_container_group_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metric_groups_only_node_group_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metric_groups_only_pod_group_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metric_groups_only_volume_group_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_metric_groups_pod_and_node_groups_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_percent_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_pvc_labels_do_not_collect_detailed_labels_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_pvc_labels_empty_volume_name_in_pvc_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_pvc_labels_non_existent_volume_in_pvc_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_pvc_labels_pvc_doesnot_exist_expected.yaml
create mode 100644 receiver/kubeletstatsreceiver/testdata/scraper/test_scraper_with_pvc_labels_successful_expected.yaml
create mode 100644 receiver/lokireceiver/generated_component_test.go
create mode 100644 receiver/lokireceiver/package_test.go
create mode 100644 receiver/memcachedreceiver/generated_component_test.go
create mode 100644 receiver/memcachedreceiver/internal/metadata/package_test.go
create mode 100644 receiver/memcachedreceiver/package_test.go
create mode 100644 receiver/mongodbatlasreceiver/generated_component_test.go
create mode 100644 receiver/mongodbatlasreceiver/internal/metadata/package_test.go
create mode 100644 receiver/mongodbreceiver/generated_component_test.go
create mode 100644 receiver/mongodbreceiver/internal/metadata/metrics_database_attr_version.go
create mode 100644 receiver/mongodbreceiver/internal/metadata/package_test.go
create mode 100644 receiver/mongodbreceiver/package_test.go
create mode 100644 receiver/mysqlreceiver/generated_component_test.go
create mode 100644 receiver/mysqlreceiver/internal/metadata/package_test.go
create mode 100644 receiver/mysqlreceiver/package_test.go
create mode 100644 receiver/namedpipereceiver/Makefile
create mode 100644 receiver/namedpipereceiver/README.md
create mode 100644 receiver/namedpipereceiver/doc.go
create mode 100644 receiver/namedpipereceiver/generated_component_test.go
create mode 100644 receiver/namedpipereceiver/go.mod
create mode 100644 receiver/namedpipereceiver/go.sum
create mode 100644 receiver/namedpipereceiver/internal/metadata/generated_status.go
create mode 100644 receiver/namedpipereceiver/metadata.yaml
create mode 100644 receiver/namedpipereceiver/namedpipe.go
create mode 100644 receiver/namedpipereceiver/namedpipe_test.go
create mode 100644 receiver/namedpipereceiver/testdata/config.yaml
create mode 100644 receiver/nginxreceiver/generated_component_test.go
create mode 100644 receiver/nginxreceiver/internal/metadata/package_test.go
create mode 100644 receiver/nginxreceiver/package_test.go
create mode 100644 receiver/nsxtreceiver/generated_component_test.go
create mode 100644 receiver/nsxtreceiver/internal/metadata/package_test.go
create mode 100644 receiver/nsxtreceiver/package_test.go
create mode 100644 receiver/opencensusreceiver/generated_component_test.go
create mode 100644 receiver/opencensusreceiver/internal/ocmetrics/package_test.go
create mode 100644 receiver/opencensusreceiver/internal/octrace/package_test.go
create mode 100644 receiver/opencensusreceiver/package_test.go
create mode 100644 receiver/oracledbreceiver/generated_component_test.go
create mode 100644 receiver/oracledbreceiver/internal/metadata/package_test.go
create mode 100644 receiver/oracledbreceiver/package_test.go
create mode 100644 receiver/osqueryreceiver/Makefile
create mode 100644 receiver/osqueryreceiver/README.md
create mode 100644 receiver/osqueryreceiver/config.go
create mode 100644 receiver/osqueryreceiver/config_test.go
create mode 100644 receiver/osqueryreceiver/doc.go
create mode 100644 receiver/osqueryreceiver/factory.go
create mode 100644 receiver/osqueryreceiver/factory_test.go
create mode 100644 receiver/osqueryreceiver/go.mod
rename {cmd/mdatagen => receiver/osqueryreceiver}/go.sum (53%)
create mode 100644 receiver/osqueryreceiver/internal/metadata/generated_status.go
create mode 100644 receiver/osqueryreceiver/metadata.yaml
create mode 100644 receiver/osqueryreceiver/package_test.go
create mode 100644 receiver/otelarrowreceiver/Makefile
create mode 100644 receiver/otelarrowreceiver/README.md
create mode 100644 receiver/otelarrowreceiver/config.go
create mode 100644 receiver/otelarrowreceiver/config.md
create mode 100644 receiver/otelarrowreceiver/config_test.go
create mode 100644 receiver/otelarrowreceiver/doc.go
create mode 100644 receiver/otelarrowreceiver/factory.go
create mode 100644 receiver/otelarrowreceiver/factory_test.go
create mode 100644 receiver/otelarrowreceiver/generated_component_test.go
create mode 100644 receiver/otelarrowreceiver/go.mod
create mode 100644 receiver/otelarrowreceiver/go.sum
create mode 100644 receiver/otelarrowreceiver/internal/arrow/Makefile
create mode 100644 receiver/otelarrowreceiver/internal/arrow/arrow.go
create mode 100644 receiver/otelarrowreceiver/internal/logs/otlp.go
create mode 100644 receiver/otelarrowreceiver/internal/metadata/generated_status.go
create mode 100644 receiver/otelarrowreceiver/internal/metrics/otlp.go
create mode 100644 receiver/otelarrowreceiver/internal/trace/otlp.go
create mode 100644 receiver/otelarrowreceiver/metadata.yaml
create mode 100644 receiver/otelarrowreceiver/otelarrow.go
create mode 100644 receiver/otelarrowreceiver/testdata/bad_proto_config.yaml
create mode 100644 receiver/otelarrowreceiver/testdata/config.yaml
create mode 100644 receiver/otelarrowreceiver/testdata/default.yaml
create mode 100644 receiver/otelarrowreceiver/testdata/only_grpc.yaml
create mode 100644 receiver/otelarrowreceiver/testdata/uds.yaml
create mode 100644 receiver/otlpjsonfilereceiver/generated_component_test.go
create mode 100644 receiver/otlpjsonfilereceiver/package_test.go
create mode 100644 receiver/podmanreceiver/documentation.md
create mode 100644 receiver/podmanreceiver/generated_component_test.go
create mode 100644 receiver/podmanreceiver/internal/metadata/generated_config.go
create mode 100644 receiver/podmanreceiver/internal/metadata/generated_config_test.go
create mode 100644 receiver/podmanreceiver/internal/metadata/generated_metrics.go
create mode 100644 receiver/podmanreceiver/internal/metadata/generated_metrics_test.go
create mode 100644 receiver/podmanreceiver/internal/metadata/generated_resource.go
create mode 100644 receiver/podmanreceiver/internal/metadata/generated_resource_test.go
create mode 100644 receiver/podmanreceiver/internal/metadata/testdata/config.yaml
delete mode 100644 receiver/podmanreceiver/metrics.go
create mode 100644 receiver/podmanreceiver/package_test.go
rename receiver/podmanreceiver/{metrics_test.go => record_metrics_test.go} (86%)
create mode 100644 receiver/postgresqlreceiver/client_factory.go
create mode 100644 receiver/postgresqlreceiver/generated_component_test.go
create mode 100644 receiver/postgresqlreceiver/internal/metadata/package_test.go
create mode 100644 receiver/postgresqlreceiver/package_test.go
create mode 100644 receiver/postgresqlreceiver/testdata/integration/expected_all_db_connpool.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/integration/expected_all_db_schemaattr.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/integration/expected_multi_db_connpool.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/integration/expected_multi_db_schemaattr.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/integration/expected_single_db_connpool.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/integration/expected_single_db_schemaattr.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/scraper/multiple/exclude.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/scraper/multiple/exclude_schemaattr.yaml
rename receiver/postgresqlreceiver/testdata/scraper/multiple/{expected_precise_lag.yaml => expected_imprecise_lag.yaml} (97%)
create mode 100644 receiver/postgresqlreceiver/testdata/scraper/multiple/expected_imprecise_lag_schemaattr.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/scraper/multiple/expected_schemaattr.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/scraper/otel/expected_default_metrics_schemaattr.yaml
create mode 100644 receiver/postgresqlreceiver/testdata/scraper/otel/expected_schemaattr.yaml
create mode 100644 receiver/prometheusreceiver/generated_component_test.go
create mode 100644 receiver/prometheusreceiver/metrics_receiver_protobuf_test.go
create mode 100644 receiver/prometheusreceiver/package_test.go
create mode 100644 receiver/prometheusreceiver/testdata/invalid-config-prometheus-non-existent-scrape-config.yaml
rename receiver/prometheusreceiver/testdata/openmetrics/{bad_missing_or_extra_commas_2 => missing_or_extra_commas_2}/metrics (100%)
create mode 100644 receiver/pulsarreceiver/generated_component_test.go
create mode 100644 receiver/pulsarreceiver/package_test.go
create mode 100644 receiver/purefareceiver/generated_component_test.go
create mode 100644 receiver/purefareceiver/internal/package_test.go
create mode 100644 receiver/purefareceiver/package_test.go
create mode 100644 receiver/purefbreceiver/generated_component_test.go
create mode 100644 receiver/purefbreceiver/internal/package_test.go
create mode 100644 receiver/purefbreceiver/package_test.go
create mode 100644 receiver/rabbitmqreceiver/generated_component_test.go
create mode 100644 receiver/rabbitmqreceiver/internal/metadata/package_test.go
create mode 100644 receiver/rabbitmqreceiver/package_test.go
create mode 100644 receiver/receivercreator/generated_component_test.go
create mode 100644 receiver/receivercreator/package_test.go
create mode 100644 receiver/redisreceiver/generated_component_test.go
create mode 100644 receiver/redisreceiver/internal/metadata/package_test.go
create mode 100644 receiver/redisreceiver/package_test.go
create mode 100644 receiver/redisreceiver/testdata/integration/Dockerfile.cluster
create mode 100755 receiver/redisreceiver/testdata/integration/cluster.sh
create mode 100755 receiver/redisreceiver/testdata/integration/configure-nodes.sh
create mode 100644 receiver/redisreceiver/testdata/integration/expected-cluster.yaml
rename receiver/redisreceiver/testdata/integration/{expected.yaml => expected-old.yaml} (100%)
create mode 100644 receiver/redisreceiver/testdata/integration/redis-cluster.conf
create mode 100644 receiver/riakreceiver/generated_component_test.go
create mode 100644 receiver/riakreceiver/internal/metadata/package_test.go
create mode 100644 receiver/riakreceiver/package_test.go
create mode 100644 receiver/saphanareceiver/generated_component_test.go
create mode 100644 receiver/saphanareceiver/internal/metadata/package_test.go
create mode 100644 receiver/saphanareceiver/package_test.go
create mode 100644 receiver/sapmreceiver/generated_component_test.go
create mode 100644 receiver/sapmreceiver/package_test.go
create mode 100644 receiver/signalfxreceiver/generated_component_test.go
create mode 100644 receiver/simpleprometheusreceiver/generated_component_test.go
create mode 100644 receiver/simpleprometheusreceiver/package_test.go
create mode 100644 receiver/skywalkingreceiver/generated_component_test.go
create mode 100644 receiver/skywalkingreceiver/package_test.go
create mode 100644 receiver/snmpreceiver/generated_component_test.go
create mode 100644 receiver/snmpreceiver/package_test.go
create mode 100644 receiver/snowflakereceiver/generated_component_test.go
create mode 100644 receiver/snowflakereceiver/internal/metadata/package_test.go
create mode 100644 receiver/snowflakereceiver/package_test.go
create mode 100644 receiver/solacereceiver/generated_component_test.go
create mode 100644 receiver/solacereceiver/package_test.go
create mode 100644 receiver/splunkenterprisereceiver/generated_component_test.go
create mode 100644 receiver/splunkenterprisereceiver/internal/metadata/package_test.go
create mode 100644 receiver/splunkenterprisereceiver/package_test.go
create mode 100644 receiver/splunkhecreceiver/generated_component_test.go
create mode 100644 receiver/splunkhecreceiver/package_test.go
delete mode 100644 receiver/sqlqueryreceiver/db_client.go
create mode 100644 receiver/sqlqueryreceiver/generated_component_test.go
create mode 100644 receiver/sqlqueryreceiver/package_test.go
delete mode 100644 receiver/sqlqueryreceiver/scraper.go
create mode 100644 receiver/sqlserverreceiver/generated_component_test.go
create mode 100644 receiver/sqlserverreceiver/internal/metadata/package_test.go
create mode 100644 receiver/sqlserverreceiver/package_test.go
create mode 100644 receiver/sqlserverreceiver/queries.go
create mode 100644 receiver/sqlserverreceiver/queries_test.go
create mode 100644 receiver/sqlserverreceiver/testdata/databaseIOQueryWithInstanceName.txt
create mode 100644 receiver/sqlserverreceiver/testdata/databaseIOQueryWithoutInstanceName.txt
create mode 100644 receiver/sshcheckreceiver/generated_component_test.go
create mode 100644 receiver/sshcheckreceiver/internal/configssh/package_test.go
create mode 100644 receiver/sshcheckreceiver/internal/metadata/package_test.go
create mode 100644 receiver/sshcheckreceiver/package_test.go
create mode 100644 receiver/statsdreceiver/generated_component_test.go
create mode 100644 receiver/statsdreceiver/internal/protocol/package_test.go
create mode 100644 receiver/statsdreceiver/internal/transport/package_test.go
create mode 100644 receiver/statsdreceiver/internal/transport/transport.go
create mode 100644 receiver/statsdreceiver/package_test.go
delete mode 100644 receiver/statsdreceiver/reporter_test.go
create mode 100644 receiver/syslogreceiver/generated_component_test.go
create mode 100644 receiver/syslogreceiver/package_test.go
create mode 100644 receiver/tcplogreceiver/generated_component_test.go
create mode 100644 receiver/tcplogreceiver/package_test.go
create mode 100644 receiver/udplogreceiver/generated_component_test.go
create mode 100644 receiver/udplogreceiver/package_test.go
create mode 100644 receiver/vcenterreceiver/generated_component_test.go
create mode 100644 receiver/vcenterreceiver/internal/metadata/package_test.go
create mode 100644 receiver/vcenterreceiver/internal/mockserver/responses/resource-pool-single.xml
create mode 100644 receiver/vcenterreceiver/package_test.go
delete mode 100644 receiver/vcenterreceiver/testdata/metrics/expected_with_object.yaml
delete mode 100644 receiver/vcenterreceiver/testdata/metrics/expected_without_direction.yaml
create mode 100644 receiver/wavefrontreceiver/generated_component_test.go
create mode 100644 receiver/wavefrontreceiver/package_test.go
create mode 100644 receiver/webhookeventreceiver/generated_component_test.go
create mode 100644 receiver/webhookeventreceiver/package_test.go
create mode 100644 receiver/windowseventlogreceiver/generated_component_test.go
create mode 100644 receiver/windowseventlogreceiver/package_test.go
create mode 100644 receiver/windowseventlogreceiver/receiver.go
create mode 100644 receiver/windowsperfcountersreceiver/generated_component_test.go
create mode 100644 receiver/windowsperfcountersreceiver/package_test.go
create mode 100644 receiver/zipkinreceiver/generated_component_test.go
create mode 100644 receiver/zipkinreceiver/package_test.go
create mode 100644 receiver/zookeeperreceiver/generated_component_test.go
create mode 100644 receiver/zookeeperreceiver/internal/metadata/package_test.go
create mode 100644 receiver/zookeeperreceiver/package_test.go
create mode 100644 reports/distributions/contrib.yaml
create mode 100644 reports/distributions/core.yaml
delete mode 100644 testbed/datareceivers/mockawsxraydatareceiver.go
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/config.go
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/factory.go
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/go.mod
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/go.sum
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/metadata.yaml
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/server.crt
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/server.key
delete mode 100644 testbed/mockdatareceivers/mockawsxrayreceiver/trace_receiver.go
create mode 100644 testbed/package_test.go
create mode 100644 testbed/tests/mockbackend.log
diff --git a/.chloggen/clickhouseexporter-use-standard-exporterhelper-queuesettings.yml b/.chloggen/clickhouseexporter-use-standard-exporterhelper-queuesettings.yml
deleted file mode 100755
index 7c189b297415..000000000000
--- a/.chloggen/clickhouseexporter-use-standard-exporterhelper-queuesettings.yml
+++ /dev/null
@@ -1,27 +0,0 @@
-# Use this changelog template to create an entry for release notes.
-
-# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
-change_type: breaking
-
-# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
-component: clickhouseexporter
-
-# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
-note: Replace `Config.QueueSettings` field with `exporterhelper.QueueSettings` and remove `QueueSettings` struct
-
-# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
-issues: [27653]
-
-# (Optional) One or more lines of additional information to render under the primary note.
-# These lines will be padded with 2 spaces and then inserted directly into the document.
-# Use pipe (|) for multiline entries.
-subtext:
-
-# If your change doesn't affect end users or the exported elements of any package,
-# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
-# Optional: The change log or logs in which this entry should be included.
-# e.g. '[user]' or '[user, api]'
-# Include 'user' if the change is relevant to end users.
-# Include 'api' if there is a change to a library API.
-# Default: '[user]'
-change_logs: [api]
diff --git a/.github/ALLOWLIST b/.github/ALLOWLIST
index 618b4d6106d3..af4e3b0874af 100644
--- a/.github/ALLOWLIST
+++ b/.github/ALLOWLIST
@@ -15,7 +15,7 @@
#
##
-# NOTE: New components MUST have a codeowner. Add new components to the CODEOWNERS file instead of here.
+# NOTE: New components MUST have one or more codeowners. Add codeowners to the component metadata.yaml and run make gengithub
##
## COMMON & SHARED components
@@ -26,3 +26,4 @@ config/confighttp
## UNMAINTAINED components
receiver/wavefrontreceiver/
+exporter/skywalkingexporter/
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index e2e28e874820..49b8a52a995d 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -1,7 +1,7 @@
# Code generated by githubgen. DO NOT EDIT.
#####################################################
#
-# List of approvers for OpenTelemetry Collector Contrib
+# List of codeowners for OpenTelemetry Collector Contrib
#
#####################################################
#
@@ -12,81 +12,76 @@
# Learn about CODEOWNERS file format:
# https://help.github.com/en/articles/about-code-owners
#
-# NOTE: Lines should be entered in the following format:
-# /..
-# extension/oauth2clientauthextension/ @open-telemetry/collector-contrib-approvers @pavankrish123 @jpkrohling
-# Path separator and minimum of 1 space between component path and owners is
-# important for validation steps
-#
* @open-telemetry/collector-contrib-approvers
-cmd/configschema/ @open-telemetry/collector-contrib-approvers @mx-psi @dmitryax @pmcollins
-cmd/githubgen/ @open-telemetry/collector-contrib-approvers @atoulme
-cmd/mdatagen/ @open-telemetry/collector-contrib-approvers @dmitryax
-cmd/opampsupervisor/ @open-telemetry/collector-contrib-approvers @evan-bradley @atoulme @tigrannajaryan
-cmd/otelcontribcol/ @open-telemetry/collector-contrib-approvers
-cmd/oteltestbedcol/ @open-telemetry/collector-contrib-approvers
-cmd/telemetrygen/ @open-telemetry/collector-contrib-approvers @mx-psi @codeboten
+cmd/configschema/ @open-telemetry/collector-contrib-approvers @mx-psi @dmitryax
+cmd/githubgen/ @open-telemetry/collector-contrib-approvers @atoulme
+cmd/opampsupervisor/ @open-telemetry/collector-contrib-approvers @evan-bradley @atoulme @tigrannajaryan
+cmd/otelcontribcol/ @open-telemetry/collector-contrib-approvers
+cmd/oteltestbedcol/ @open-telemetry/collector-contrib-approvers
+cmd/telemetrygen/ @open-telemetry/collector-contrib-approvers @mx-psi @codeboten
-confmap/provider/s3provider/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+confmap/provider/s3provider/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+confmap/provider/secretsmanagerprovider/ @open-telemetry/collector-contrib-approvers @driverpt @atoulme
-connector/countconnector/ @open-telemetry/collector-contrib-approvers @djaglowski @jpkrohling
-connector/datadogconnector/ @open-telemetry/collector-contrib-approvers @mx-psi @gbbr @dineshg13
-connector/exceptionsconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling
-connector/routingconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear
-connector/servicegraphconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mapno
-connector/spanmetricsconnector/ @open-telemetry/collector-contrib-approvers @albertteoh
+connector/countconnector/ @open-telemetry/collector-contrib-approvers @djaglowski @jpkrohling
+connector/datadogconnector/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13
+connector/exceptionsconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @marctc
+connector/failoverconnector/ @open-telemetry/collector-contrib-approvers @akats7 @djaglowski @fatsheep9146
+connector/grafanacloudconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @rlankfo @jcreixell
+connector/routingconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mwear
+connector/servicegraphconnector/ @open-telemetry/collector-contrib-approvers @jpkrohling @mapno
+connector/spanmetricsconnector/ @open-telemetry/collector-contrib-approvers @portertech @Frapschen
-examples/demo/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+examples/demo/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
-exporter/alertmanagerexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling @sokoide @mcube8
-exporter/alibabacloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @shabicheng @kongluoxing @qiansheng91
-exporter/awscloudwatchlogsexporter/ @open-telemetry/collector-contrib-approvers @boostchicken @bryan-aguilar @rapphil
-exporter/awsemfexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @shaochengwang @mxiamxia @bryan-aguilar
-exporter/awskinesisexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @MovieStoreGuy
-exporter/awss3exporter/ @open-telemetry/collector-contrib-approvers @atoulme @pdelewski
-exporter/awsxrayexporter/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash
-exporter/azuredataexplorerexporter/ @open-telemetry/collector-contrib-approvers @asaharn @ag-ramachandran
-exporter/azuremonitorexporter/ @open-telemetry/collector-contrib-approvers @pcwiese
-exporter/carbonexporter/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo
-exporter/cassandraexporter/ @open-telemetry/collector-contrib-approvers @atoulme @emreyalvac
-exporter/clickhouseexporter/ @open-telemetry/collector-contrib-approvers @hanjm @dmitryax @Frapschen
-exporter/coralogixexporter/ @open-telemetry/collector-contrib-approvers @povilasv @matej-g
-exporter/datadogexporter/ @open-telemetry/collector-contrib-approvers @mx-psi @gbbr @dineshg13 @liustanley @songy23 @mackjmr
-exporter/datasetexporter/ @open-telemetry/collector-contrib-approvers @atoulme @martin-majlis-s1 @zdaratom @tomaz-s1
-exporter/dynatraceexporter/ @open-telemetry/collector-contrib-approvers @dyladan @arminru @evan-bradley
-exporter/elasticsearchexporter/ @open-telemetry/collector-contrib-approvers @JaredTan95
-exporter/f5cloudexporter/ @open-telemetry/collector-contrib-approvers @gramidt
-exporter/fileexporter/ @open-telemetry/collector-contrib-approvers @atingchen
-exporter/googlecloudexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @damemi @psx95
-exporter/googlecloudpubsubexporter/ @open-telemetry/collector-contrib-approvers @alexvanboxel
-exporter/googlemanagedprometheusexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @damemi @psx95
-exporter/honeycombmarkerexporter/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @fchikwekwe
-exporter/influxdbexporter/ @open-telemetry/collector-contrib-approvers @jacobmarble
-exporter/instanaexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling @hickeyma
-exporter/kafkaexporter/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy
-exporter/kineticaexporter/ @open-telemetry/collector-contrib-approvers @am-kinetica @TylerHelmuth
-exporter/loadbalancingexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling
-exporter/logicmonitorexporter/ @open-telemetry/collector-contrib-approvers @bogdandrutu @khyatigandhi6 @avadhut123pisal
-exporter/logzioexporter/ @open-telemetry/collector-contrib-approvers @Doron-Bargo @yotamloe
-exporter/lokiexporter/ @open-telemetry/collector-contrib-approvers @gramidt @gouthamve @jpkrohling @mar4uk
-exporter/mezmoexporter/ @open-telemetry/collector-contrib-approvers @dashpole @billmeyer @gjanco
-exporter/opencensusexporter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
-exporter/opensearchexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @MitchellGale @MaxKsyunz @YANG-DB
-exporter/prometheusexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9
-exporter/prometheusremotewriteexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @rapphil
-exporter/pulsarexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun
-exporter/sapmexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme
-exporter/sentryexporter/ @open-telemetry/collector-contrib-approvers @AbhiPrasad
-exporter/signalfxexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1
-exporter/skywalkingexporter/ @open-telemetry/collector-contrib-approvers @liqiangz
-exporter/splunkhecexporter/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax
-exporter/sumologicexporter/ @open-telemetry/collector-contrib-approvers @sumo-drosiek
-exporter/syslogexporter/ @open-telemetry/collector-contrib-approvers @kkujawa-sumo @rnishtala-sumo @astencel-sumo
-exporter/tanzuobservabilityexporter/ @open-telemetry/collector-contrib-approvers @oppegard @thepeterstone @keep94
-exporter/tencentcloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @wgliang @yiyang5055
-exporter/zipkinexporter/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @astencel-sumo @crobert-1
+exporter/alertmanagerexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling @sokoide @mcube8
+exporter/alibabacloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @shabicheng @kongluoxing @qiansheng91
+exporter/awscloudwatchlogsexporter/ @open-telemetry/collector-contrib-approvers @boostchicken @bryan-aguilar @rapphil
+exporter/awsemfexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @shaochengwang @mxiamxia @bryan-aguilar
+exporter/awskinesisexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @MovieStoreGuy
+exporter/awss3exporter/ @open-telemetry/collector-contrib-approvers @atoulme @pdelewski
+exporter/awsxrayexporter/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash
+exporter/azuredataexplorerexporter/ @open-telemetry/collector-contrib-approvers @asaharn @ag-ramachandran
+exporter/azuremonitorexporter/ @open-telemetry/collector-contrib-approvers @pcwiese
+exporter/carbonexporter/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo
+exporter/cassandraexporter/ @open-telemetry/collector-contrib-approvers @atoulme @emreyalvac
+exporter/clickhouseexporter/ @open-telemetry/collector-contrib-approvers @hanjm @dmitryax @Frapschen @SpencerTorres
+exporter/coralogixexporter/ @open-telemetry/collector-contrib-approvers @povilasv @matej-g
+exporter/datadogexporter/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13 @liustanley @songy23 @mackjmr
+exporter/datasetexporter/ @open-telemetry/collector-contrib-approvers @atoulme @martin-majlis-s1 @zdaratom-s1 @tomaz-s1
+exporter/dynatraceexporter/ @open-telemetry/collector-contrib-approvers @dyladan @arminru @evan-bradley
+exporter/elasticsearchexporter/ @open-telemetry/collector-contrib-approvers @JaredTan95 @ycombinator
+exporter/fileexporter/ @open-telemetry/collector-contrib-approvers @atingchen
+exporter/googlecloudexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @damemi @psx95
+exporter/googlecloudpubsubexporter/ @open-telemetry/collector-contrib-approvers @alexvanboxel
+exporter/googlemanagedprometheusexporter/ @open-telemetry/collector-contrib-approvers @aabmass @dashpole @jsuereth @punya @damemi @psx95
+exporter/honeycombmarkerexporter/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @fchikwekwe
+exporter/influxdbexporter/ @open-telemetry/collector-contrib-approvers @jacobmarble
+exporter/instanaexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling @hickeyma
+exporter/kafkaexporter/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy
+exporter/kineticaexporter/ @open-telemetry/collector-contrib-approvers @am-kinetica @TylerHelmuth
+exporter/loadbalancingexporter/ @open-telemetry/collector-contrib-approvers @jpkrohling
+exporter/logicmonitorexporter/ @open-telemetry/collector-contrib-approvers @bogdandrutu @khyatigandhi6 @avadhut123pisal
+exporter/logzioexporter/ @open-telemetry/collector-contrib-approvers @yotamloe
+exporter/lokiexporter/ @open-telemetry/collector-contrib-approvers @gramidt @gouthamve @jpkrohling @mar4uk
+exporter/mezmoexporter/ @open-telemetry/collector-contrib-approvers @dashpole @billmeyer @gjanco
+exporter/opencensusexporter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+exporter/opensearchexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @MitchellGale @MaxKsyunz @YANG-DB
+exporter/otelarrowexporter/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3
+exporter/prometheusexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+exporter/prometheusremotewriteexporter/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @rapphil
+exporter/pulsarexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun
+exporter/rabbitmqexporter/ @open-telemetry/collector-contrib-approvers @swar8080
+exporter/sapmexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme
+exporter/sentryexporter/ @open-telemetry/collector-contrib-approvers @AbhiPrasad
+exporter/signalfxexporter/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1
+exporter/splunkhecexporter/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax
+exporter/sumologicexporter/ @open-telemetry/collector-contrib-approvers @sumo-drosiek
+exporter/syslogexporter/ @open-telemetry/collector-contrib-approvers @kkujawa-sumo @rnishtala-sumo @astencel-sumo
+exporter/tencentcloudlogserviceexporter/ @open-telemetry/collector-contrib-approvers @wgliang @yiyang5055
+exporter/zipkinexporter/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @astencel-sumo @crobert-1
extension/asapauthextension/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy
extension/awsmiddleware/ @open-telemetry/collector-contrib-approvers @jefchien
@@ -101,9 +96,7 @@ extension/encoding/textencodingextension/ @open-te
extension/encoding/zipkinencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @dao-jun
extension/headerssetterextension/ @open-telemetry/collector-contrib-approvers @jpkrohling
extension/healthcheckextension/ @open-telemetry/collector-contrib-approvers @jpkrohling
-extension/httpforwarder/ @open-telemetry/collector-contrib-approvers @atoulme @rmfitzpatrick
extension/jaegerremotesampling/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus
-extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus
extension/oauth2clientauthextension/ @open-telemetry/collector-contrib-approvers @pavankrish123 @jpkrohling
extension/observer/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick
extension/observer/dockerobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy
@@ -119,21 +112,57 @@ extension/sigv4authextension/ @open-te
extension/storage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme @djaglowski
extension/storage/dbstorage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme
extension/storage/filestorage/ @open-telemetry/collector-contrib-approvers @djaglowski
+extension/ackextension/ @open-telemetry/collector-contrib-approvers @zpzhuSplunk @splunkericl
+extension/asapauthextension/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy
+extension/awsproxy/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia
+extension/basicauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus
+extension/bearertokenauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling @frzifus
+extension/encoding/ @open-telemetry/collector-contrib-approvers @atoulme @dao-jun @dmitryax @MovieStoreGuy @VihasMakwana
+extension/encoding/avrologencodingextension/ @open-telemetry/collector-contrib-approvers @thmshmm
+extension/encoding/jaegerencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @atoulme
+extension/encoding/jsonlogencodingextension/ @open-telemetry/collector-contrib-approvers @VihasMakwana @atoulme
+extension/encoding/otlpencodingextension/ @open-telemetry/collector-contrib-approvers @dao-jun @VihasMakwana
+extension/encoding/textencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @atoulme
+extension/encoding/zipkinencodingextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @dao-jun
+extension/googleclientauthextension/ @open-telemetry/collector-contrib-approvers @dashpole @damemi @aabmass @jsuereth @punya @psx95
+extension/headerssetterextension/ @open-telemetry/collector-contrib-approvers @jpkrohling
+extension/healthcheckextension/ @open-telemetry/collector-contrib-approvers @jpkrohling
+extension/httpforwarderextension/ @open-telemetry/collector-contrib-approvers @atoulme @rmfitzpatrick
+extension/jaegerremotesampling/ @open-telemetry/collector-contrib-approvers @yurishkuro @frzifus
+extension/oauth2clientauthextension/ @open-telemetry/collector-contrib-approvers @pavankrish123 @jpkrohling
+extension/observer/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick
+extension/observer/dockerobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy
+extension/observer/ecsobserver/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick
+extension/observer/ecstaskobserver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick
+extension/observer/hostobserver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy
+extension/observer/k8sobserver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @dmitryax
+extension/oidcauthextension/ @open-telemetry/collector-contrib-approvers @jpkrohling
+extension/opampextension/ @open-telemetry/collector-contrib-approvers @portertech @evan-bradley @tigrannajaryan
+extension/pprofextension/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy
+extension/remotetapextension/ @open-telemetry/collector-contrib-approvers @atoulme
+extension/sigv4authextension/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @erichsueh3
+extension/solarwindsapmsettingsextension/ @open-telemetry/collector-contrib-approvers @jerrytfleung @cheempz
+extension/storage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme @djaglowski
+extension/storage/dbstorage/ @open-telemetry/collector-contrib-approvers @dmitryax @atoulme
+extension/storage/filestorage/ @open-telemetry/collector-contrib-approvers @djaglowski
+extension/sumologicextension/ @open-telemetry/collector-contrib-approvers @astencel-sumo @sumo-drosiek @swiatekm-sumo
-internal/aws/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia
-internal/collectd/ @open-telemetry/collector-contrib-approvers @atoulme
-internal/coreinternal/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
-internal/datadog/ @open-telemetry/collector-contrib-approvers @mx-psi @gbbr @dineshg13
-internal/docker/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @jamesmoessis
-internal/filter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
-internal/k8sconfig/ @open-telemetry/collector-contrib-approvers @dmitryax
-internal/k8stest/ @open-telemetry/collector-contrib-approvers @crobert-1
-internal/kafka/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy
-internal/kubelet/ @open-telemetry/collector-contrib-approvers @dmitryax
-internal/metadataproviders/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole
-internal/sharedcomponent/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
-internal/splunk/ @open-telemetry/collector-contrib-approvers @dmitryax
-internal/tools/ @open-telemetry/collector-contrib-approvers
+internal/aws/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @mxiamxia
+internal/collectd/ @open-telemetry/collector-contrib-approvers @atoulme
+internal/coreinternal/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+internal/datadog/ @open-telemetry/collector-contrib-approvers @mx-psi @dineshg13
+internal/docker/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @jamesmoessis
+internal/exp/metrics/ @open-telemetry/collector-contrib-approvers @sh0rez @RichieSams
+internal/filter/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+internal/k8sconfig/ @open-telemetry/collector-contrib-approvers @dmitryax
+internal/k8stest/ @open-telemetry/collector-contrib-approvers @crobert-1
+internal/kafka/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy
+internal/kubelet/ @open-telemetry/collector-contrib-approvers @dmitryax
+internal/metadataproviders/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole
+internal/sharedcomponent/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+internal/splunk/ @open-telemetry/collector-contrib-approvers @dmitryax
+internal/sqlquery/ @open-telemetry/collector-contrib-approvers @crobert-1 @dmitryax
+internal/tools/ @open-telemetry/collector-contrib-approvers
override/aws/ @open-telemetry/collector-contrib-approvers @sethAmazon
@@ -156,132 +185,160 @@ pkg/translator/signalfx/ @open-te
pkg/translator/skywalking/ @open-telemetry/collector-contrib-approvers @JaredTan95
pkg/translator/zipkin/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @astencel-sumo @crobert-1
pkg/winperfcounters/ @open-telemetry/collector-contrib-approvers @dashpole @Mrod1598 @BinaryFissionGames
+pkg/batchperresourceattr/ @open-telemetry/collector-contrib-approvers @atoulme @dmitryax
+pkg/batchpersignal/ @open-telemetry/collector-contrib-approvers @jpkrohling
+pkg/experimentalmetricmetadata/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick
+pkg/golden/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme
+pkg/ottl/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley
+pkg/pdatatest/ @open-telemetry/collector-contrib-approvers @djaglowski @fatsheep9146
+pkg/pdatautil/ @open-telemetry/collector-contrib-approvers @dmitryax
+pkg/resourcetotelemetry/ @open-telemetry/collector-contrib-approvers @mx-psi
+pkg/sampling/ @open-telemetry/collector-contrib-approvers @kentquirk @jmacd
+pkg/stanza/ @open-telemetry/collector-contrib-approvers @djaglowski
+pkg/translator/azure/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers @atoulme @cparkins
+pkg/translator/jaeger/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers @frzifus
+pkg/translator/loki/ @open-telemetry/collector-contrib-approvers @gouthamve @jpkrohling @mar4uk
+pkg/translator/opencensus/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+pkg/translator/prometheus/ @open-telemetry/collector-contrib-approvers @dashpole @bertysentry
+pkg/translator/prometheusremotewrite/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+pkg/translator/signalfx/ @open-telemetry/collector-contrib-approvers @dmitryax
+pkg/translator/skywalking/ @open-telemetry/collector-contrib-approvers @JaredTan95
+pkg/translator/zipkin/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @astencel-sumo @crobert-1
+pkg/winperfcounters/ @open-telemetry/collector-contrib-approvers @dashpole @Mrod1598 @BinaryFissionGames
+
+processor/attributesprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken
+processor/cumulativetodeltaprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth
+processor/deltatocumulativeprocessor/ @open-telemetry/collector-contrib-approvers @sh0rez @RichieSams
+processor/deltatorateprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+processor/filterprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @boostchicken
+processor/groupbyattrsprocessor/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo
+processor/groupbytraceprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
+processor/intervalprocessor/ @open-telemetry/collector-contrib-approvers @RichieSams
+processor/k8sattributesprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick @fatsheep9146 @TylerHelmuth
+processor/logstransformprocessor/ @open-telemetry/collector-contrib-approvers @djaglowski @dehaansa
+processor/metricsgenerationprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+processor/metricstransformprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax
+processor/probabilisticsamplerprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
+processor/redactionprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @mx-psi @TylerHelmuth
+processor/remotetapprocessor/ @open-telemetry/collector-contrib-approvers @atoulme
+processor/resourcedetectionprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole
+processor/resourcedetectionprocessor/internal/azure/ @open-telemetry/collector-contrib-approvers @mx-psi
+processor/resourcedetectionprocessor/internal/heroku/ @open-telemetry/collector-contrib-approvers @atoulme
+processor/resourcedetectionprocessor/internal/openshift/ @open-telemetry/collector-contrib-approvers @frzifus
+processor/resourceprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax
+processor/routingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
+processor/schemaprocessor/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy
+processor/spanprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken
+processor/sumologicprocessor/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo @astencel-sumo @sumo-drosiek
+processor/tailsamplingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
+processor/transformprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley
-processor/attributesprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken
-processor/cumulativetodeltaprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth
-processor/datadogprocessor/ @open-telemetry/collector-contrib-approvers @mx-psi @gbbr @dineshg13
-processor/deltatorateprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9
-processor/filterprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @boostchicken
-processor/groupbyattrsprocessor/ @open-telemetry/collector-contrib-approvers @rnishtala-sumo
-processor/groupbytraceprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
-processor/k8sattributesprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax @rmfitzpatrick @fatsheep9146 @TylerHelmuth
-processor/logstransformprocessor/ @open-telemetry/collector-contrib-approvers @djaglowski @dehaansa
-processor/metricsgenerationprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9
-processor/metricstransformprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax
-processor/probabilisticsamplerprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
-processor/redactionprocessor/ @open-telemetry/collector-contrib-approvers @leonsp-ai @dmitryax @mx-psi @TylerHelmuth
-processor/remotetapprocessor/ @open-telemetry/collector-contrib-approvers @pmcollins
-processor/resourcedetectionprocessor/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole
-processor/resourcedetectionprocessor/internal/azure/ @open-telemetry/collector-contrib-approvers @mx-psi
-processor/resourcedetectionprocessor/internal/heroku/ @open-telemetry/collector-contrib-approvers @atoulme
-processor/resourcedetectionprocessor/internal/openshift/ @open-telemetry/collector-contrib-approvers @frzifus
-processor/resourceprocessor/ @open-telemetry/collector-contrib-approvers @dmitryax
-processor/routingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
-processor/schemaprocessor/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy
-processor/servicegraphprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling @mapno
-processor/spanmetricsprocessor/ @open-telemetry/collector-contrib-approvers @albertteoh
-processor/spanprocessor/ @open-telemetry/collector-contrib-approvers @boostchicken
-processor/sumologicprocessor/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo @astencel-sumo @sumo-drosiek
-processor/tailsamplingprocessor/ @open-telemetry/collector-contrib-approvers @jpkrohling
-processor/transformprocessor/ @open-telemetry/collector-contrib-approvers @TylerHelmuth @kentquirk @bogdandrutu @evan-bradley
+receiver/activedirectorydsreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @BinaryFissionGames
+receiver/aerospikereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @antonblock
+receiver/apachereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/apachesparkreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @Caleb-Hurshman @mrsillydog
+receiver/awscloudwatchmetricsreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling
+receiver/awscloudwatchreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
+receiver/awscontainerinsightreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @pxaws
+receiver/awsecscontainermetricsreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+receiver/awsfirehosereceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9
+receiver/awss3receiver/ @open-telemetry/collector-contrib-approvers @atoulme @adcharre
+receiver/awsxrayreceiver/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash
+receiver/azureblobreceiver/ @open-telemetry/collector-contrib-approvers @eedorenko @mx-psi
+receiver/azureeventhubreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @djaglowski @cparkins
+receiver/azuremonitorreceiver/ @open-telemetry/collector-contrib-approvers @nslaughter @codeboten
+receiver/bigipreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek
+receiver/carbonreceiver/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo
+receiver/chronyreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @jamesmoessis
+receiver/cloudflarereceiver/ @open-telemetry/collector-contrib-approvers @dehaansa @djaglowski
+receiver/cloudfoundryreceiver/ @open-telemetry/collector-contrib-approvers @pellared @crobert-1
+receiver/collectdreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
+receiver/couchdbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/datadogreceiver/ @open-telemetry/collector-contrib-approvers @boostchicken @gouthamve @jpkrohling @MovieStoreGuy
+receiver/dockerstatsreceiver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @jamesmoessis
+receiver/elasticsearchreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @BinaryFissionGames
+receiver/expvarreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy
+receiver/filelogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/filestatsreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
+receiver/flinkmetricsreceiver/ @open-telemetry/collector-contrib-approvers @JonathanWamsley @djaglowski
+receiver/fluentforwardreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax
+receiver/gitproviderreceiver/ @open-telemetry/collector-contrib-approvers @adrielp @astencel-sumo
+receiver/googlecloudpubsubreceiver/ @open-telemetry/collector-contrib-approvers @alexvanboxel
+receiver/googlecloudspannerreceiver/ @open-telemetry/collector-contrib-approvers @varunraiko
+receiver/haproxyreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @MovieStoreGuy
+receiver/hostmetricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
+receiver/httpcheckreceiver/ @open-telemetry/collector-contrib-approvers @codeboten
+receiver/iisreceiver/ @open-telemetry/collector-contrib-approvers @Mrod1598 @djaglowski
+receiver/influxdbreceiver/ @open-telemetry/collector-contrib-approvers @jacobmarble
+receiver/jaegerreceiver/ @open-telemetry/collector-contrib-approvers @yurishkuro
+receiver/jmxreceiver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick
+receiver/journaldreceiver/ @open-telemetry/collector-contrib-approvers @sumo-drosiek @djaglowski
+receiver/k8sclusterreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @povilasv
+receiver/k8seventsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth
+receiver/k8sobjectsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hvaghani221 @TylerHelmuth
+receiver/kafkametricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax
+receiver/kafkareceiver/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy
+receiver/kubeletstatsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth
+receiver/lokireceiver/ @open-telemetry/collector-contrib-approvers @mar4uk @jpkrohling
+receiver/memcachedreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/mongodbatlasreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
+receiver/mongodbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
+receiver/mysqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/namedpipereceiver/ @open-telemetry/collector-contrib-approvers @sinkingpoint @djaglowski
+receiver/nginxreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/nsxtreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @schmikei
+receiver/opencensusreceiver/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+receiver/oracledbreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 @atoulme
+receiver/osqueryreceiver/ @open-telemetry/collector-contrib-approvers @codeboten @nslaughter @smithclay
+receiver/otelarrowreceiver/ @open-telemetry/collector-contrib-approvers @jmacd @moh-osman3
+receiver/otlpjsonfilereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme
+receiver/podmanreceiver/ @open-telemetry/collector-contrib-approvers @rogercoll
+receiver/postgresqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/prometheusreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole
+receiver/pulsarreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun
+receiver/purefareceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure
+receiver/purefbreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure
+receiver/rabbitmqreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @cpheps
+receiver/receivercreator/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick
+receiver/redisreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hughesjj
+receiver/riakreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @armstrmi
+receiver/saphanareceiver/ @open-telemetry/collector-contrib-approvers @dehaansa
+receiver/sapmreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
+receiver/signalfxreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax
+receiver/simpleprometheusreceiver/ @open-telemetry/collector-contrib-approvers @fatsheep9146
+receiver/skywalkingreceiver/ @open-telemetry/collector-contrib-approvers @JaredTan95
+receiver/snmpreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek @tamir-michaeli
+receiver/snowflakereceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @shalper2
+receiver/solacereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @mcardy
+receiver/splunkenterprisereceiver/ @open-telemetry/collector-contrib-approvers @shalper2 @MovieStoreGuy @greatestusername
+receiver/splunkhecreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
+receiver/sqlqueryreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1
+receiver/sqlserverreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek
+receiver/sshcheckreceiver/ @open-telemetry/collector-contrib-approvers @nslaughter @codeboten
+receiver/statsdreceiver/ @open-telemetry/collector-contrib-approvers @jmacd @dmitryax
+receiver/syslogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/tcplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/udplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+receiver/vcenterreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
+receiver/wavefrontreceiver/ @open-telemetry/collector-contrib-approvers @samiura
+receiver/webhookeventreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @shalper2
+receiver/windowseventlogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @armstrmi @pjanotti
+receiver/windowsperfcountersreceiver/ @open-telemetry/collector-contrib-approvers @dashpole
+receiver/zipkinreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @astencel-sumo @crobert-1
+receiver/zookeeperreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/activedirectorydsreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @BinaryFissionGames
-receiver/aerospikereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @antonblock
-receiver/apachereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/apachesparkreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @Caleb-Hurshman @mrsillydog
-receiver/awscloudwatchmetricsreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling
-receiver/awscloudwatchreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
-receiver/awscontainerinsightreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @pxaws
-receiver/awsecscontainermetricsreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9
-receiver/awsfirehosereceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9
-receiver/awsxrayreceiver/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash
-receiver/azureblobreceiver/ @open-telemetry/collector-contrib-approvers @eedorenko @mx-psi
-receiver/azureeventhubreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @djaglowski
-receiver/azuremonitorreceiver/ @open-telemetry/collector-contrib-approvers @altuner @codeboten
-receiver/bigipreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek
-receiver/carbonreceiver/ @open-telemetry/collector-contrib-approvers @aboguszewski-sumo
-receiver/chronyreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @jamesmoessis
-receiver/cloudflarereceiver/ @open-telemetry/collector-contrib-approvers @dehaansa @djaglowski
-receiver/cloudfoundryreceiver/ @open-telemetry/collector-contrib-approvers @agoallikmaa @pellared @crobert-1
-receiver/collectdreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
-receiver/couchdbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/datadogreceiver/ @open-telemetry/collector-contrib-approvers @boostchicken @gouthamve @jpkrohling @MovieStoreGuy
-receiver/dockerstatsreceiver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick @jamesmoessis
-receiver/elasticsearchreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @BinaryFissionGames
-receiver/expvarreceiver/ @open-telemetry/collector-contrib-approvers @jamesmoessis @MovieStoreGuy
-receiver/filelogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/filereceiver/ @open-telemetry/collector-contrib-approvers @pmcollins @djaglowski
-receiver/filestatsreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
-receiver/flinkmetricsreceiver/ @open-telemetry/collector-contrib-approvers @JonathanWamsley @djaglowski
-receiver/fluentforwardreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax
-receiver/gitproviderreceiver/ @open-telemetry/collector-contrib-approvers @adrielp @astencel-sumo
-receiver/googlecloudpubsubreceiver/ @open-telemetry/collector-contrib-approvers @alexvanboxel
-receiver/googlecloudspannerreceiver/ @open-telemetry/collector-contrib-approvers @architjugran @varunraiko @kiranmayib
-receiver/haproxyreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @MovieStoreGuy
-receiver/hostmetricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @braydonk
-receiver/httpcheckreceiver/ @open-telemetry/collector-contrib-approvers @codeboten
-receiver/iisreceiver/ @open-telemetry/collector-contrib-approvers @Mrod1598 @djaglowski
-receiver/influxdbreceiver/ @open-telemetry/collector-contrib-approvers @jacobmarble
-receiver/jaegerreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling
-receiver/jaegerreceiver/internal/jaegerreceiverdeprecated/ @open-telemetry/collector-contrib-approvers @jpkrohling
-receiver/jmxreceiver/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick
-receiver/journaldreceiver/ @open-telemetry/collector-contrib-approvers @sumo-drosiek @djaglowski
-receiver/k8sclusterreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth @povilasv
-receiver/k8seventsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth
-receiver/k8sobjectsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hvaghani221 @TylerHelmuth
-receiver/kafkametricsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax
-receiver/kafkareceiver/ @open-telemetry/collector-contrib-approvers @pavolloffay @MovieStoreGuy
-receiver/kubeletstatsreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @TylerHelmuth
-receiver/lokireceiver/ @open-telemetry/collector-contrib-approvers @mar4uk @jpkrohling
-receiver/memcachedreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/mongodbatlasreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
-receiver/mongodbreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
-receiver/mysqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/nginxreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/nsxtreceiver/ @open-telemetry/collector-contrib-approvers @dashpole @schmikei
-receiver/opencensusreceiver/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
-receiver/oracledbreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @crobert-1 @atoulme
-receiver/otlpjsonfilereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @atoulme
-receiver/podmanreceiver/ @open-telemetry/collector-contrib-approvers @rogercoll
-receiver/postgresqlreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/prometheusreceiver/ @open-telemetry/collector-contrib-approvers @Aneurysm9 @dashpole
-receiver/pulsarreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @dao-jun
-receiver/purefareceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure
-receiver/purefbreceiver/ @open-telemetry/collector-contrib-approvers @jpkrohling @dgoscn @chrroberts-pure
-receiver/rabbitmqreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @cpheps
-receiver/receivercreator/ @open-telemetry/collector-contrib-approvers @rmfitzpatrick
-receiver/redisreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @hughesjj
-receiver/riakreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @armstrmi
-receiver/saphanareceiver/ @open-telemetry/collector-contrib-approvers @dehaansa
-receiver/sapmreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
-receiver/signalfxreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax
-receiver/simpleprometheusreceiver/ @open-telemetry/collector-contrib-approvers @fatsheep9146
-receiver/skywalkingreceiver/ @open-telemetry/collector-contrib-approvers @JaredTan95
-receiver/snmpreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek @tamir-michaeli
-receiver/snowflakereceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @shalper2
-receiver/solacereceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @mcardy
-receiver/splunkenterprisereceiver/ @open-telemetry/collector-contrib-approvers @shalper2 @MovieStoreGuy
-receiver/splunkhecreceiver/ @open-telemetry/collector-contrib-approvers @atoulme
-receiver/sqlqueryreceiver/ @open-telemetry/collector-contrib-approvers @dmitryax @pmcollins
-receiver/sqlserverreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @StefanKurek
-receiver/sshcheckreceiver/ @open-telemetry/collector-contrib-approvers @nslaughter @codeboten
-receiver/statsdreceiver/ @open-telemetry/collector-contrib-approvers @jmacd @dmitryax
-receiver/syslogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/tcplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/udplogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
-receiver/vcenterreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @schmikei
-receiver/wavefrontreceiver/ @open-telemetry/collector-contrib-approvers @samiura
-receiver/webhookeventreceiver/ @open-telemetry/collector-contrib-approvers @atoulme @shalper2
-receiver/windowseventlogreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski @armstrmi @pjanotti
-receiver/windowsperfcountersreceiver/ @open-telemetry/collector-contrib-approvers @dashpole
-receiver/zipkinreceiver/ @open-telemetry/collector-contrib-approvers @MovieStoreGuy @astencel-sumo @crobert-1
-receiver/zookeeperreceiver/ @open-telemetry/collector-contrib-approvers @djaglowski
+testbed/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
+testbed/mockdatasenders/mockdatadogagentexporter/ @open-telemetry/collector-contrib-approvers @boostchicken
-testbed/ @open-telemetry/collector-contrib-approvers @open-telemetry/collector-approvers
-testbed/mockdatareceivers/mockawsxrayreceiver/ @open-telemetry/collector-contrib-approvers @wangzlei @srprash
-testbed/mockdatasenders/mockdatadogagentexporter/ @open-telemetry/collector-contrib-approvers @boostchicken
+#####################################################
+#
+# List of distribution maintainers for OpenTelemetry Collector Contrib
+#
+#####################################################
+reports/distributions/core.yaml @open-telemetry/collector-contrib-approvers
+reports/distributions/contrib.yaml @open-telemetry/collector-contrib-approvers
## UNMAINTAINED components
-## The Github issue template generation code needs this to generate the corresponding labels.
+exporter/skywalkingexporter/ @open-telemetry/collector-contrib-approvers
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yaml b/.github/ISSUE_TEMPLATE/bug_report.yaml
index c95e2905ed97..98e8e2f91f32 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yaml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yaml
@@ -20,15 +20,17 @@ body:
# Start Collector components list
- cmd/configschema
- cmd/githubgen
- - cmd/mdatagen
- cmd/opampsupervisor
- cmd/otelcontribcol
- cmd/oteltestbedcol
- cmd/telemetrygen
- confmap/provider/s3provider
+ - confmap/provider/secretsmanagerprovider
- connector/count
- connector/datadog
- connector/exceptions
+ - connector/failover
+ - connector/grafanacloud
- connector/routing
- connector/servicegraph
- connector/spanmetrics
@@ -50,7 +52,6 @@ body:
- exporter/dataset
- exporter/dynatrace
- exporter/elasticsearch
- - exporter/f5cloud
- exporter/file
- exporter/googlecloud
- exporter/googlecloudpubsub
@@ -67,9 +68,11 @@ body:
- exporter/mezmo
- exporter/opencensus
- exporter/opensearch
+ - exporter/otelarrow
- exporter/prometheus
- exporter/prometheusremotewrite
- exporter/pulsar
+ - exporter/rabbitmq
- exporter/sapm
- exporter/sentry
- exporter/signalfx
@@ -77,25 +80,26 @@ body:
- exporter/splunkhec
- exporter/sumologic
- exporter/syslog
- - exporter/tanzuobservability
- exporter/tencentcloudlogservice
- exporter/zipkin
+ - extension/ack
- extension/asapauth
- extension/awsmiddleware
- extension/awsproxy
- extension/basicauth
- extension/bearertokenauth
- extension/encoding
+ - extension/encoding/avrologencoding
- extension/encoding/jaegerencoding
- extension/encoding/jsonlogencoding
- extension/encoding/otlpencoding
- extension/encoding/textencoding
- extension/encoding/zipkinencoding
+ - extension/googleclientauth
- extension/headerssetter
- extension/healthcheck
- extension/httpforwarder
- extension/jaegerremotesampling
- - extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated
- extension/oauth2clientauth
- extension/observer
- extension/observer/dockerobserver
@@ -108,14 +112,17 @@ body:
- extension/pprof
- extension/remotetap
- extension/sigv4auth
+ - extension/solarwindsapmsettings
- extension/storage
- extension/storage/dbstorage
- extension/storage/filestorage
+ - extension/sumologic
- internal/aws
- internal/collectd
- internal/core
- internal/datadog
- internal/docker
+ - internal/exp/metrics
- internal/filter
- internal/k8sconfig
- internal/k8stest
@@ -124,6 +131,7 @@ body:
- internal/metadataproviders
- internal/sharedcomponent
- internal/splunk
+ - internal/sqlquery
- internal/tools
- override/aws
- pkg/batchperresourceattr
@@ -134,6 +142,7 @@ body:
- pkg/pdatatest
- pkg/pdatautil
- pkg/resourcetotelemetry
+ - pkg/sampling
- pkg/stanza
- pkg/translator/azure
- pkg/translator/jaeger
@@ -147,11 +156,12 @@ body:
- pkg/winperfcounters
- processor/attributes
- processor/cumulativetodelta
- - processor/datadog
+ - processor/deltatocumulative
- processor/deltatorate
- processor/filter
- processor/groupbyattrs
- processor/groupbytrace
+ - processor/interval
- processor/k8sattributes
- processor/logstransform
- processor/metricsgeneration
@@ -166,9 +176,7 @@ body:
- processor/resourcedetection/internal/openshift
- processor/routing
- processor/schema
- - processor/servicegraph
- processor/span
- - processor/spanmetrics
- processor/sumologic
- processor/tailsampling
- processor/transform
@@ -181,6 +189,7 @@ body:
- receiver/awscontainerinsight
- receiver/awsecscontainermetrics
- receiver/awsfirehose
+ - receiver/awss3
- receiver/awsxray
- receiver/azureblob
- receiver/azureeventhub
@@ -196,7 +205,6 @@ body:
- receiver/dockerstats
- receiver/elasticsearch
- receiver/expvar
- - receiver/file
- receiver/filelog
- receiver/filestats
- receiver/flinkmetrics
@@ -210,7 +218,6 @@ body:
- receiver/iis
- receiver/influxdb
- receiver/jaeger
- - receiver/jaeger/internal/jaegerreceiverdeprecated
- receiver/jmx
- receiver/journald
- receiver/k8scluster
@@ -224,10 +231,13 @@ body:
- receiver/mongodb
- receiver/mongodbatlas
- receiver/mysql
+ - receiver/namedpipe
- receiver/nginx
- receiver/nsxt
- receiver/opencensus
- receiver/oracledb
+ - receiver/osquery
+ - receiver/otelarrow
- receiver/otlpjsonfile
- receiver/podman
- receiver/postgresql
@@ -264,7 +274,6 @@ body:
- receiver/zipkin
- receiver/zookeeper
- testbed
- - testbed/mockdatareceivers/mockawsxrayreceiver
- testbed/mockdatasenders/mockdatadogagentexporter
# End Collector components list
- type: textarea
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml
index 8b660b3286ad..b924bc13f16c 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yaml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yaml
@@ -14,15 +14,17 @@ body:
# Start Collector components list
- cmd/configschema
- cmd/githubgen
- - cmd/mdatagen
- cmd/opampsupervisor
- cmd/otelcontribcol
- cmd/oteltestbedcol
- cmd/telemetrygen
- confmap/provider/s3provider
+ - confmap/provider/secretsmanagerprovider
- connector/count
- connector/datadog
- connector/exceptions
+ - connector/failover
+ - connector/grafanacloud
- connector/routing
- connector/servicegraph
- connector/spanmetrics
@@ -44,7 +46,6 @@ body:
- exporter/dataset
- exporter/dynatrace
- exporter/elasticsearch
- - exporter/f5cloud
- exporter/file
- exporter/googlecloud
- exporter/googlecloudpubsub
@@ -61,9 +62,11 @@ body:
- exporter/mezmo
- exporter/opencensus
- exporter/opensearch
+ - exporter/otelarrow
- exporter/prometheus
- exporter/prometheusremotewrite
- exporter/pulsar
+ - exporter/rabbitmq
- exporter/sapm
- exporter/sentry
- exporter/signalfx
@@ -71,25 +74,26 @@ body:
- exporter/splunkhec
- exporter/sumologic
- exporter/syslog
- - exporter/tanzuobservability
- exporter/tencentcloudlogservice
- exporter/zipkin
+ - extension/ack
- extension/asapauth
- extension/awsmiddleware
- extension/awsproxy
- extension/basicauth
- extension/bearertokenauth
- extension/encoding
+ - extension/encoding/avrologencoding
- extension/encoding/jaegerencoding
- extension/encoding/jsonlogencoding
- extension/encoding/otlpencoding
- extension/encoding/textencoding
- extension/encoding/zipkinencoding
+ - extension/googleclientauth
- extension/headerssetter
- extension/healthcheck
- extension/httpforwarder
- extension/jaegerremotesampling
- - extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated
- extension/oauth2clientauth
- extension/observer
- extension/observer/dockerobserver
@@ -102,14 +106,17 @@ body:
- extension/pprof
- extension/remotetap
- extension/sigv4auth
+ - extension/solarwindsapmsettings
- extension/storage
- extension/storage/dbstorage
- extension/storage/filestorage
+ - extension/sumologic
- internal/aws
- internal/collectd
- internal/core
- internal/datadog
- internal/docker
+ - internal/exp/metrics
- internal/filter
- internal/k8sconfig
- internal/k8stest
@@ -118,6 +125,7 @@ body:
- internal/metadataproviders
- internal/sharedcomponent
- internal/splunk
+ - internal/sqlquery
- internal/tools
- override/aws
- pkg/batchperresourceattr
@@ -128,6 +136,7 @@ body:
- pkg/pdatatest
- pkg/pdatautil
- pkg/resourcetotelemetry
+ - pkg/sampling
- pkg/stanza
- pkg/translator/azure
- pkg/translator/jaeger
@@ -141,11 +150,12 @@ body:
- pkg/winperfcounters
- processor/attributes
- processor/cumulativetodelta
- - processor/datadog
+ - processor/deltatocumulative
- processor/deltatorate
- processor/filter
- processor/groupbyattrs
- processor/groupbytrace
+ - processor/interval
- processor/k8sattributes
- processor/logstransform
- processor/metricsgeneration
@@ -160,9 +170,7 @@ body:
- processor/resourcedetection/internal/openshift
- processor/routing
- processor/schema
- - processor/servicegraph
- processor/span
- - processor/spanmetrics
- processor/sumologic
- processor/tailsampling
- processor/transform
@@ -175,6 +183,7 @@ body:
- receiver/awscontainerinsight
- receiver/awsecscontainermetrics
- receiver/awsfirehose
+ - receiver/awss3
- receiver/awsxray
- receiver/azureblob
- receiver/azureeventhub
@@ -190,7 +199,6 @@ body:
- receiver/dockerstats
- receiver/elasticsearch
- receiver/expvar
- - receiver/file
- receiver/filelog
- receiver/filestats
- receiver/flinkmetrics
@@ -204,7 +212,6 @@ body:
- receiver/iis
- receiver/influxdb
- receiver/jaeger
- - receiver/jaeger/internal/jaegerreceiverdeprecated
- receiver/jmx
- receiver/journald
- receiver/k8scluster
@@ -218,10 +225,13 @@ body:
- receiver/mongodb
- receiver/mongodbatlas
- receiver/mysql
+ - receiver/namedpipe
- receiver/nginx
- receiver/nsxt
- receiver/opencensus
- receiver/oracledb
+ - receiver/osquery
+ - receiver/otelarrow
- receiver/otlpjsonfile
- receiver/podman
- receiver/postgresql
@@ -258,7 +268,6 @@ body:
- receiver/zipkin
- receiver/zookeeper
- testbed
- - testbed/mockdatareceivers/mockawsxrayreceiver
- testbed/mockdatasenders/mockdatadogagentexporter
# End Collector components list
- type: textarea
diff --git a/.github/ISSUE_TEMPLATE/other.yaml b/.github/ISSUE_TEMPLATE/other.yaml
index 69182da36092..53b76dd2b6ff 100644
--- a/.github/ISSUE_TEMPLATE/other.yaml
+++ b/.github/ISSUE_TEMPLATE/other.yaml
@@ -14,15 +14,17 @@ body:
# Start Collector components list
- cmd/configschema
- cmd/githubgen
- - cmd/mdatagen
- cmd/opampsupervisor
- cmd/otelcontribcol
- cmd/oteltestbedcol
- cmd/telemetrygen
- confmap/provider/s3provider
+ - confmap/provider/secretsmanagerprovider
- connector/count
- connector/datadog
- connector/exceptions
+ - connector/failover
+ - connector/grafanacloud
- connector/routing
- connector/servicegraph
- connector/spanmetrics
@@ -44,7 +46,6 @@ body:
- exporter/dataset
- exporter/dynatrace
- exporter/elasticsearch
- - exporter/f5cloud
- exporter/file
- exporter/googlecloud
- exporter/googlecloudpubsub
@@ -61,9 +62,11 @@ body:
- exporter/mezmo
- exporter/opencensus
- exporter/opensearch
+ - exporter/otelarrow
- exporter/prometheus
- exporter/prometheusremotewrite
- exporter/pulsar
+ - exporter/rabbitmq
- exporter/sapm
- exporter/sentry
- exporter/signalfx
@@ -71,25 +74,26 @@ body:
- exporter/splunkhec
- exporter/sumologic
- exporter/syslog
- - exporter/tanzuobservability
- exporter/tencentcloudlogservice
- exporter/zipkin
+ - extension/ack
- extension/asapauth
- extension/awsmiddleware
- extension/awsproxy
- extension/basicauth
- extension/bearertokenauth
- extension/encoding
+ - extension/encoding/avrologencoding
- extension/encoding/jaegerencoding
- extension/encoding/jsonlogencoding
- extension/encoding/otlpencoding
- extension/encoding/textencoding
- extension/encoding/zipkinencoding
+ - extension/googleclientauth
- extension/headerssetter
- extension/healthcheck
- extension/httpforwarder
- extension/jaegerremotesampling
- - extension/jaegerremotesampling/internal/jaegerremotesamplingdeprecated
- extension/oauth2clientauth
- extension/observer
- extension/observer/dockerobserver
@@ -102,14 +106,17 @@ body:
- extension/pprof
- extension/remotetap
- extension/sigv4auth
+ - extension/solarwindsapmsettings
- extension/storage
- extension/storage/dbstorage
- extension/storage/filestorage
+ - extension/sumologic
- internal/aws
- internal/collectd
- internal/core
- internal/datadog
- internal/docker
+ - internal/exp/metrics
- internal/filter
- internal/k8sconfig
- internal/k8stest
@@ -118,6 +125,7 @@ body:
- internal/metadataproviders
- internal/sharedcomponent
- internal/splunk
+ - internal/sqlquery
- internal/tools
- override/aws
- pkg/batchperresourceattr
@@ -128,6 +136,7 @@ body:
- pkg/pdatatest
- pkg/pdatautil
- pkg/resourcetotelemetry
+ - pkg/sampling
- pkg/stanza
- pkg/translator/azure
- pkg/translator/jaeger
@@ -141,11 +150,12 @@ body:
- pkg/winperfcounters
- processor/attributes
- processor/cumulativetodelta
- - processor/datadog
+ - processor/deltatocumulative
- processor/deltatorate
- processor/filter
- processor/groupbyattrs
- processor/groupbytrace
+ - processor/interval
- processor/k8sattributes
- processor/logstransform
- processor/metricsgeneration
@@ -160,9 +170,7 @@ body:
- processor/resourcedetection/internal/openshift
- processor/routing
- processor/schema
- - processor/servicegraph
- processor/span
- - processor/spanmetrics
- processor/sumologic
- processor/tailsampling
- processor/transform
@@ -175,6 +183,7 @@ body:
- receiver/awscontainerinsight
- receiver/awsecscontainermetrics
- receiver/awsfirehose
+ - receiver/awss3
- receiver/awsxray
- receiver/azureblob
- receiver/azureeventhub
@@ -190,7 +199,6 @@ body:
- receiver/dockerstats
- receiver/elasticsearch
- receiver/expvar
- - receiver/file
- receiver/filelog
- receiver/filestats
- receiver/flinkmetrics
@@ -204,7 +212,6 @@ body:
- receiver/iis
- receiver/influxdb
- receiver/jaeger
- - receiver/jaeger/internal/jaegerreceiverdeprecated
- receiver/jmx
- receiver/journald
- receiver/k8scluster
@@ -218,10 +225,13 @@ body:
- receiver/mongodb
- receiver/mongodbatlas
- receiver/mysql
+ - receiver/namedpipe
- receiver/nginx
- receiver/nsxt
- receiver/opencensus
- receiver/oracledb
+ - receiver/osquery
+ - receiver/otelarrow
- receiver/otlpjsonfile
- receiver/podman
- receiver/postgresql
@@ -258,7 +268,6 @@ body:
- receiver/zipkin
- receiver/zookeeper
- testbed
- - testbed/mockdatareceivers/mockawsxrayreceiver
- testbed/mockdatasenders/mockdatadogagentexporter
# End Collector components list
- type: textarea
diff --git a/.github/auto_assign.yml b/.github/auto_assign.yml
index 39f640e8cf44..f9bf21b7ef18 100644
--- a/.github/auto_assign.yml
+++ b/.github/auto_assign.yml
@@ -12,12 +12,14 @@ assigneeGroups:
approvers_maintainers:
# Approvers
- Aneurysm9
- - astencel-sumo
- atoulme
+ - bryan-aguilar
+ - crobert-1
- dashpole
- songy23
- fatsheep9146
# Maintainers
+ - astencel-sumo
- bogdandrutu
- codeboten
- djaglowski
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
deleted file mode 100644
index ef952e78e8be..000000000000
--- a/.github/dependabot.yml
+++ /dev/null
@@ -1,1104 +0,0 @@
-# File generated by "make gendependabot"; DO NOT EDIT.
-
-version: 2
-updates:
- - package-ecosystem: "gomod"
- directory: "/"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/confmap/provider/s3provider"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/connector/countconnector"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/connector/datadogconnector"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/connector/exceptionsconnector"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/connector/routingconnector"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/connector/servicegraphconnector"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/connector/spanmetricsconnector"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/alertmanagerexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/alibabacloudlogserviceexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/awscloudwatchlogsexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/awsemfexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/awskinesisexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/awss3exporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/awsxrayexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/azuredataexplorerexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/azuremonitorexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/carbonexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/cassandraexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/clickhouseexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/coralogixexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/datadogexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/datasetexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/dynatraceexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/elasticsearchexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/f5cloudexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/fileexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/googlecloudexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/googlecloudpubsubexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/googlemanagedprometheusexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/influxdbexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/instanaexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/kafkaexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/kineticaexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/loadbalancingexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/logicmonitorexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/logzioexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/lokiexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/mezmoexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/opencensusexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/opensearchexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/prometheusexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/prometheusremotewriteexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/pulsarexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/sapmexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/sentryexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/signalfxexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/skywalkingexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/splunkhecexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/sumologicexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/tanzuobservabilityexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/tencentcloudlogserviceexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/exporter/zipkinexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/asapauthextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/awsproxy"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/basicauthextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/bearertokenauthextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/encoding"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/headerssetterextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/healthcheckextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/httpforwarder"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/jaegerremotesampling"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/oauth2clientauthextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/observer"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/observer/dockerobserver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/observer/ecsobserver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/observer/ecstaskobserver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/observer/hostobserver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/observer/k8sobserver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/oidcauthextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/pprofextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/sigv4authextension"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/extension/storage"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/collectd"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/coreinternal"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/datadog"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/docker"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/filter"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/k8sconfig"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/k8stest"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/kafka"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/kubelet"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/metadataproviders"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/sharedcomponent"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/splunk"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/internal/tools"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/batchperresourceattr"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/batchpersignal"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/experimentalmetricmetadata"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/golden"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/ottl"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/pdatatest"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/pdatautil"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/resourcetotelemetry"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/stanza"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/azure"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/jaeger"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/loki"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/opencensus"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/prometheus"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/prometheusremotewrite"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/signalfx"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/skywalking"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/translator/zipkin"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/pkg/winperfcounters"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/attributesprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/cumulativetodeltaprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/datadogprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/deltatorateprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/filterprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/groupbyattrsprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/groupbytraceprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/k8sattributesprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/logstransformprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/metricsgenerationprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/metricstransformprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/probabilisticsamplerprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/redactionprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/remotetapprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/resourcedetectionprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/resourceprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/routingprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/schemaprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/servicegraphprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/spanmetricsprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/spanprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/sumologicprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/tailsamplingprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/processor/transformprocessor"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/activedirectorydsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/aerospikereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/apachereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/apachesparkreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/awscloudwatchmetricsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/awscloudwatchreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/awscontainerinsightreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/awsecscontainermetricsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/awsfirehosereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/awsxrayreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/azureblobreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/azureeventhubreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/azuremonitorreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/bigipreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/carbonreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/chronyreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/cloudflarereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/cloudfoundryreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/collectdreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/couchdbreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/datadogreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/dockerstatsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/elasticsearchreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/expvarreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/filelogreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/filereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/filestatsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/flinkmetricsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/fluentforwardreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/gitproviderreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/googlecloudpubsubreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/googlecloudspannerreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/haproxyreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/hostmetricsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/httpcheckreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/iisreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/influxdbreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/jaegerreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/jmxreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/journaldreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/k8sclusterreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/k8seventsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/k8sobjectsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/kafkametricsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/kafkareceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/kubeletstatsreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/lokireceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/memcachedreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/mongodbatlasreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/mongodbreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/mysqlreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/nginxreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/nsxtreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/opencensusreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/oracledbreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/otlpjsonfilereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/podmanreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/postgresqlreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/prometheusreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/pulsarreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/purefareceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/purefbreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/rabbitmqreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/receivercreator"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/redisreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/riakreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/saphanareceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/sapmreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/signalfxreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/simpleprometheusreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/skywalkingreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/snmpreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/snowflakereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/solacereceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/splunkhecreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/sqlqueryreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/sqlserverreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/sshcheckreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/statsdreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/syslogreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/tcplogreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/udplogreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/vcenterreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/wavefrontreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/windowseventlogreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/windowsperfcountersreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/zipkinreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/receiver/zookeeperreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/testbed"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/testbed/mockdatareceivers/mockawsxrayreceiver"
- schedule:
- interval: "weekly"
- day: "wednesday"
- - package-ecosystem: "gomod"
- directory: "/testbed/mockdatasenders/mockdatadogagentexporter"
- schedule:
- interval: "weekly"
- day: "wednesday"
diff --git a/.github/workflows/auto-assign-owners.yml b/.github/workflows/auto-assign-owners.yml
new file mode 100644
index 000000000000..e69de29bb2d1
diff --git a/.github/workflows/build-and-test-windows.yml b/.github/workflows/build-and-test-windows.yml
index 2f7548ae0b6a..c049aa5159ab 100644
--- a/.github/workflows/build-and-test-windows.yml
+++ b/.github/workflows/build-and-test-windows.yml
@@ -6,6 +6,7 @@ on:
- 'releases/**'
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'
+ merge_group:
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]
branches:
@@ -36,29 +37,37 @@ jobs:
- cmd
- other
runs-on: windows-latest
- if: ${{ github.actor != 'dependabot[bot]' && (contains(github.event.pull_request.labels.*.name, 'Run Windows') || github.event_name == 'push') }}
+ if: ${{ github.actor != 'dependabot[bot]' && (contains(github.event.pull_request.labels.*.name, 'Run Windows') || github.event_name == 'push' || github.event_name == 'merge_group') }}
+ env:
+ # Limit memory usage via GC environment variables to avoid OOM on GH runners, especially for `cmd/otelcontribcol`,
+ # see https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/28682#issuecomment-1802296776
+ GOGC: 50
+ GOMEMLIMIT: 2GiB
steps:
- uses: actions/checkout@v4
- if: matrix.group == 'receiver-0'
name: install IIS
run: Install-WindowsFeature -name Web-Server -IncludeManagementTools
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-mod-cache
timeout-minutes: 25
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~\go\pkg\mod
~\AppData\Local\go-build
key: go-build-cache-${{ runner.os }}-${{ matrix.group }}-go-${{ hashFiles('**/go.sum') }}
+ - if: matrix.group == 'cmd'
+ name: Increasing GOTEST_TIMEOUT for group 'cmd'
+ run: echo "GOTEST_TIMEOUT=1200s" >> $Env:GITHUB_ENV
- name: Run Unit tests
run: make -j2 gotest GROUP=${{ matrix.group }}
windows-unittest:
- if: ${{ github.actor != 'dependabot[bot]' && (contains(github.event.pull_request.labels.*.name, 'Run Windows') || github.event_name == 'push') }}
+ if: ${{ github.actor != 'dependabot[bot]' && (contains(github.event.pull_request.labels.*.name, 'Run Windows') || github.event_name == 'push' || github.event_name == 'merge_group') }}
runs-on: windows-latest
needs: [windows-unittest-matrix]
steps:
diff --git a/.github/workflows/build-and-test.yml b/.github/workflows/build-and-test.yml
index d4fcef498f4f..5c94be8d7d5f 100644
--- a/.github/workflows/build-and-test.yml
+++ b/.github/workflows/build-and-test.yml
@@ -5,6 +5,7 @@ on:
branches: [ main ]
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'
+ merge_group:
pull_request:
env:
TEST_RESULTS: testbed/tests/results/junit/results.xml
@@ -24,14 +25,14 @@ jobs:
if: ${{ github.actor != 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -63,30 +64,38 @@ jobs:
run: ./.github/workflows/scripts/check-codeowners.sh check_entries_in_allowlist
lint-matrix:
strategy:
+ fail-fast: false
matrix:
+ test:
+ - windows
+ - linux
group:
- receiver-0
- receiver-1
+ - receiver-2
+ - receiver-3
- processor
- - exporter
+ - exporter-0
+ - exporter-1
- extension
- connector
- internal
- pkg
- - cmd
+ - cmd-0
+ - cmd-1
- other
runs-on: ubuntu-latest
needs: [setup-environment]
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: "~1.20.6"
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -99,12 +108,12 @@ jobs:
if: steps.go-cache.outputs.cache-hit != 'true'
run: make install-tools
- name: Cache Lint Build
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: ~/.cache/go-build
key: go-lint-build-${{ matrix.group }}-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
- name: Lint
- run: make -j2 golint GROUP=${{ matrix.group }}
+ run: GOOS=${{ matrix.os }} GOARCH=amd64 make -j2 golint GROUP=${{ matrix.group }}
lint:
if: ${{ github.actor != 'dependabot[bot]' && always() }}
runs-on: ubuntu-latest
@@ -128,26 +137,31 @@ jobs:
group:
- receiver-0
- receiver-1
+ - receiver-2
+ - receiver-3
- processor
- - exporter
+ - exporter-0
+ - exporter-1
- extension
- connector
- internal
- pkg
+ - cmd-0
+ - cmd-1
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout Repo
uses: actions/checkout@v4
- name: Setup Go
- uses: actions/setup-go@v4
+ uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -163,14 +177,14 @@ jobs:
needs: [setup-environment]
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -208,14 +222,19 @@ jobs:
run: |
make genoteltestbedcol
git diff -s --exit-code || (echo 'Generated code is out of date, please run "make genoteltestbedcol" and commit the changes in this PR.' && exit 1)
+ - name: Gen distributions
+ run: |
+ make gendistributions
+ git diff -s --exit-code || (echo 'Generated code is out of date, please run "make gendistributions" and commit the changes in this PR.' && exit 1)
+ - name: Gen CODEOWNERS
+ if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) && github.repository == 'open-telemetry/opentelemetry-collector-contrib'
+ run: |
+ GITHUB_TOKEN=${{ secrets.READ_ORG_AND_USER_TOKEN }} make gengithub
+ git diff -s --exit-code || (echo 'Generated code is out of date, please apply this diff and commit the changes in this PR.' && git diff && exit 1)
- name: CodeGen
run: |
make -j2 generate
git diff --exit-code ':!*go.sum' || (echo 'Generated code is out of date, please run "make generate" and commit the changes in this PR.' && exit 1)
- - name: Check gendependabot
- run: |
- make -j2 gendependabot
- git diff --exit-code ':!*go.sum' || (echo 'dependabot.yml is out of date, please run "make gendependabot" and commit the changes in this PR.' && exit 1)
- name: MultimodVerify
run: make multimod-verify
- name: Components dropdown in issue templates
@@ -224,36 +243,49 @@ jobs:
git diff --exit-code '.github/ISSUE_TEMPLATE' || (echo 'Dropdowns in issue templates are out of date, please run "make generate-gh-issue-templates" and commit the changes in this PR.' && exit 1)
unittest-matrix:
strategy:
+ fail-fast: false
matrix:
- go-version: ["~1.21.4", "~1.20.11"] # 1.20 is interpreted as 1.2 without quotes
+ go-version: ["1.22.2"] # 1.20 is interpreted as 1.2 without quotes
+ runner: [ubuntu-latest]
group:
- receiver-0
- receiver-1
+ - receiver-2
+ - receiver-3
- processor
- - exporter
+ - exporter-0
+ - exporter-1
- extension
- connector
- internal
- pkg
- - cmd
+ - cmd-0
+ - cmd-1
- other
- runs-on: ubuntu-latest
+ runs-on: ${{ matrix.runner }}
needs: [setup-environment]
steps:
+ - name: Set up arkade
+ uses: alexellis/setup-arkade@v3
+ - name: Install vmmeter
+ run: |
+ sudo -E arkade oci install ghcr.io/openfaasltd/vmmeter:latest --path /usr/local/bin/
+ - name: Run vmmeter
+ uses: self-actuated/vmmeter-action@v1
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
~/go/pkg/mod
- key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
+ key: go-cache-${{ runner.os }}-${{ matrix.runner }}-${{ hashFiles('**/go.sum') }}
- name: Install dependencies
if: steps.go-cache.outputs.cache-hit != 'true'
run: make -j2 gomoddownload
@@ -261,20 +293,20 @@ jobs:
if: steps.go-cache.outputs.cache-hit != 'true'
run: make install-tools
- name: Cache Test Build
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: ~/.cache/go-build
- key: go-test-build-${{ runner.os }}-${{ matrix.go-version }}-${{ hashFiles('**/go.sum') }}
+ key: go-test-build-${{ runner.os }}-${{ matrix.go-version }}-${{ matrix.runner }}-${{ hashFiles('**/go.sum') }}
- name: Run Unit Tests
- if: startsWith( matrix.go-version, '1.19' )
+ if: startsWith( matrix.go-version, '1.21' ) != true
run: make gotest GROUP=${{ matrix.group }}
- name: Run Unit Tests With Coverage
- if: startsWith( matrix.go-version, '~1.20' ) # only run coverage on one version
+ if: startsWith( matrix.go-version, '1.21' ) # only run coverage on one version
run: make gotest-with-cover GROUP=${{ matrix.group }}
- - uses: actions/upload-artifact@v3
- if: startsWith( matrix.go-version, '~1.20' ) # only run coverage on one version
+ - uses: actions/upload-artifact@v4
+ if: startsWith( matrix.go-version, '1.21' ) # only upload artifact for one version
with:
- name: coverage-artifacts
+ name: coverage-artifacts-${{ matrix.go-version }}-${{ matrix.runner }}-${{ matrix.group }}
path: ${{ matrix.group }}-coverage.txt
unittest:
if: ${{ github.actor != 'dependabot[bot]' && always() }}
@@ -297,53 +329,89 @@ jobs:
needs: [unittest]
steps:
- uses: actions/checkout@v4
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
- name: coverage-artifacts
+ merge-multiple: true
+ pattern: coverage-artifacts-*
- name: Upload coverage report
- uses: Wandalen/wretry.action@v1.3.0
+ uses: Wandalen/wretry.action@v3.2.0
with:
- action: codecov/codecov-action@v3
+ action: codecov/codecov-action@v4
with: |
fail_ci_if_error: true
verbose: true
+ token: ${{ secrets.CODECOV_TOKEN }}
attempt_limit: 10
attempt_delay: 15000
- integration-tests:
+ integration-tests-matrix:
+ strategy:
+ fail-fast: false
+ matrix:
+ group:
+ - receiver-0
+ - receiver-1
+ - receiver-2
+ - receiver-3
+ - processor
+ - exporter-0
+ - exporter-1
+ - extension
+ - connector
+ - internal
+ - pkg
+ - cmd-0
+ - cmd-1
runs-on: ubuntu-latest
needs: [setup-environment]
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
~/go/pkg/mod
key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
- name: Run Integration Tests
- run: make integration-test
+ run: make gointegration-test GROUP=${{ matrix.group }}
+
+ integration-tests:
+ if: ${{ github.actor != 'dependabot[bot]' && always() }}
+ runs-on: ubuntu-latest
+ needs: [ setup-environment, integration-tests-matrix ]
+ steps:
+ - name: Print result
+ run: echo ${{ needs.integration-tests-matrix.result }}
+ - name: Interpret result
+ run: |
+ if [[ success == ${{ needs.integration-tests-matrix.result }} ]]
+ then
+ echo "All matrix jobs passed!"
+ else
+ echo "One or more matrix jobs failed."
+ false
+ fi
correctness-traces:
runs-on: ubuntu-latest
needs: [setup-environment]
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -362,14 +430,14 @@ jobs:
needs: [setup-environment]
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -394,7 +462,7 @@ jobs:
cross-compile:
runs-on: ubuntu-latest
- needs: [unittest, integration-tests, lint]
+ needs: [setup-environment]
strategy:
matrix:
os:
@@ -431,14 +499,14 @@ jobs:
arch: s390x
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -453,14 +521,13 @@ jobs:
- name: Build Collector ${{ matrix.binary }}
run: make GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} GOARM=${{ matrix.arm }} otelcontribcol
- name: Upload Collector Binaries
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: collector-binaries
+ name: collector-binaries-${{ matrix.os }}-${{ matrix.arch }}
path: ./bin/*
build-package:
- # Use 20.04.5 until https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/16450 is resolved
- runs-on: ubuntu-20.04
+ runs-on: ubuntu-latest
needs: [cross-compile]
strategy:
fail-fast: false
@@ -473,14 +540,15 @@ jobs:
- name: Install Ruby
uses: ruby/setup-ruby@v1
with:
- ruby-version: '2.6'
+ ruby-version: '3.3'
- name: Install fpm
- run: gem install --no-document fpm -v 1.11.0
+ run: gem install --no-document fpm -v 1.15.1
- name: Download Collector Binaries
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
- name: collector-binaries
+ merge-multiple: true
path: bin/
+ pattern: collector-binaries-*
- run: chmod +x bin/*
- name: Set Release Tag
id: github_tag
@@ -501,9 +569,9 @@ jobs:
./internal/buildscripts/packaging/fpm/test.sh dist/otel-contrib-collector*x86_64.rpm examples/demo/otel-collector-config.yaml
fi
- name: Upload Packages
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: collector-packages
+ name: collector-packages-${{ matrix.package_type }}
path: ./dist/*
windows-msi:
if: false # skip. See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/10113
@@ -514,13 +582,14 @@ jobs:
with:
fetch-depth: 0
- name: Download Binaries
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
- name: collector-binaries
+ merge-multiple: true
path: ./bin/
+ pattern: collector-binaries-*
- name: Cache Wix
id: wix-cache
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
"C:\Program Files (x86)\WiX Toolset v3.11"
@@ -536,26 +605,28 @@ jobs:
- name: Validate MSI
run: .\internal\buildscripts\packaging\msi\make.ps1 Confirm-MSI
- name: Upload MSI
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
- name: collector-packages
+ name: collector-packages-msi
path: ./dist/*.msi
publish-check:
runs-on: ubuntu-latest
- needs: [build-package]
+ needs: [lint, unittest, integration-tests, build-package]
steps:
- uses: actions/checkout@v4
- name: Download Binaries
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
- name: collector-binaries
+ merge-multiple: true
path: ./bin/
+ pattern: collector-binaries-*
- name: Download Packages
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
- name: collector-packages
+ merge-multiple: true
path: ./dist/
+ pattern: collector-packages-*
- name: Verify Distribution Files Exist
id: check
run: ./.github/workflows/scripts/verify-dist-files-exist.sh
@@ -565,9 +636,9 @@ jobs:
if: (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v')) && github.repository == 'open-telemetry/opentelemetry-collector-contrib'
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Mkdir bin and dist
run: |
@@ -575,7 +646,7 @@ jobs:
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -588,16 +659,18 @@ jobs:
if: steps.go-cache.outputs.cache-hit != 'true'
run: make install-tools
- name: Download Binaries
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
- name: collector-binaries
+ merge-multiple: true
path: ./bin/
+ pattern: collector-binaries-*
- run: chmod +x bin/*
- name: Download Packages
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
- name: collector-packages
+ merge-multiple: true
path: ./dist/
+ pattern: collector-packages-*
- name: Add Permissions to Tool Binaries
run: chmod -R +x ./dist
- name: Verify Distribution Files Exist
diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml
index 158b5f80d171..c8d8b08c296a 100644
--- a/.github/workflows/changelog.yml
+++ b/.github/workflows/changelog.yml
@@ -31,14 +31,14 @@ jobs:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
diff --git a/.github/workflows/close-stale.yaml b/.github/workflows/close-stale.yaml
index bc1df5ddc486..b78d73c099de 100644
--- a/.github/workflows/close-stale.yaml
+++ b/.github/workflows/close-stale.yaml
@@ -12,7 +12,7 @@ jobs:
steps:
- name: Check rate_limit before
run: gh api /rate_limit
- - uses: actions/stale@v8
+ - uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-pr-message: 'This PR was marked stale due to lack of activity. It will be closed in 14 days.'
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 73a1f2e38589..23d0869c5af1 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -7,6 +7,7 @@ on:
jobs:
CodeQL-Build:
runs-on: macos-latest
+ if: ${{ github.actor != 'dependabot[bot]' }}
env:
# Force CodeQL to run the extraction on the files compiled by our custom
# build command, as opposed to letting the autobuilder figure it out.
@@ -15,14 +16,14 @@ jobs:
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v2
+ uses: github/codeql-action/init@v3
with:
languages: go
@@ -31,6 +32,6 @@ jobs:
make otelcontribcol
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v2
+ uses: github/codeql-action/analyze@v3
timeout-minutes: 60
diff --git a/.github/workflows/create-dependabot-pr.yml b/.github/workflows/create-dependabot-pr.yml
deleted file mode 100644
index 8654e6fecc09..000000000000
--- a/.github/workflows/create-dependabot-pr.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-name: Automation - Dependabot PR
-
-on:
- workflow_dispatch:
-
-jobs:
- create-pr:
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v4
- - name: Install zsh
- run: sudo apt-get update; sudo apt-get install zsh
- - uses: actions/setup-go@v4
- with:
- go-version: ~1.20.11
- cache: false
- - name: Run dependabot-pr.sh
- run: ./.github/workflows/scripts/dependabot-pr.sh
- env:
- GITHUB_TOKEN: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }}
diff --git a/.github/workflows/e2e-tests.yml b/.github/workflows/e2e-tests.yml
index f560983c592a..6126c9d2a445 100644
--- a/.github/workflows/e2e-tests.yml
+++ b/.github/workflows/e2e-tests.yml
@@ -7,24 +7,88 @@ on:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'
pull_request:
+ merge_group:
+
env:
# Make sure to exit early if cache segment download times out after 2 minutes.
# We limit cache download as a whole to 5 minutes.
SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2
jobs:
+ collector-build:
+ runs-on: ubuntu-latest
+ if: ${{ github.actor != 'dependabot[bot]' }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+ - uses: actions/setup-go@v5
+ with:
+ go-version: "1.21.9"
+ cache: false
+ - name: Cache Go
+ id: go-cache
+ timeout-minutes: 5
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/go/bin
+ ~/go/pkg/mod
+ key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
+ - name: Install dependencies
+ if: steps.go-cache.outputs.cache-hit != 'true'
+ run: make -j2 gomoddownload
+ - name: Build Collector
+ run: make otelcontribcol
+ - name: Upload Collector Binary
+ uses: actions/upload-artifact@v4
+ with:
+ name: collector-binary
+ path: ./bin/*
+
+ supervisor-test:
+ runs-on: ubuntu-latest
+ needs: collector-build
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-go@v5
+ with:
+ go-version: "1.21.9"
+ cache: false
+ - name: Cache Go
+ id: go-cache
+ timeout-minutes: 5
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/go/bin
+ ~/go/pkg/mod
+ key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
+ - name: Install dependencies
+ if: steps.go-cache.outputs.cache-hit != 'true'
+ run: make -j2 gomoddownload
+ - name: Download Collector Binary
+ uses: actions/download-artifact@v4
+ with:
+ name: collector-binary
+ path: bin/
+ - run: chmod +x bin/*
+ - name: Run opampsupervisor e2e tests
+ run: |
+ cd cmd/opampsupervisor
+ go test -v --tags=e2e
+
docker-build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -40,38 +104,48 @@ jobs:
run: |
docker save otelcontribcol:latest > /tmp/otelcontribcol.tar
- name: Upload artifact
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: otelcontribcol
path: /tmp/otelcontribcol.tar
- kubernetes-test:
+
+ kubernetes-test-matrix:
env:
KUBECONFIG: /tmp/kube-config-otelcol-e2e-testing
strategy:
matrix:
- k8s-version: ["v1.26.0", "v1.25.3", "v1.24.7", "v1.23.13"]
+ k8s-version:
+ - "v1.26.0"
+ - "v1.25.3"
+ - "v1.24.7"
+ - "v1.23.13"
+ component:
+ - receiver/k8sclusterreceiver
+ - processor/k8sattributesprocessor
+ - receiver/kubeletstatsreceiver
+ - receiver/k8sobjectsreceiver
runs-on: ubuntu-latest
needs: docker-build
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
~/go/pkg/mod
- key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
+ key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
- name: Install dependencies
if: steps.go-cache.outputs.cache-hit != 'true'
run: make -j2 gomoddownload
- name: Create kind cluster
- uses: helm/kind-action@v1.8.0
+ uses: helm/kind-action@v1.9.0
with:
node_image: kindest/node:${{ matrix.k8s-version }}
kubectl_version: ${{ matrix.k8s-version }}
@@ -81,7 +155,7 @@ jobs:
run: |
kubectl get csr -o=jsonpath='{range.items[?(@.spec.signerName=="kubernetes.io/kubelet-serving")]}{.metadata.name}{" "}{end}' | xargs kubectl certificate approve
- name: Download artifact
- uses: actions/download-artifact@v3
+ uses: actions/download-artifact@v4
with:
name: otelcontribcol
path: /tmp
@@ -91,19 +165,25 @@ jobs:
- name: Kind load image
run: |
kind load docker-image otelcontribcol:latest --name kind
- - name: run k8sclusterreceiver e2e tests
- run: |
- cd receiver/k8sclusterreceiver
- go test -v --tags=e2e
- - name: run k8sattributesprocessor e2e tests
- run: |
- cd processor/k8sattributesprocessor
- go test -v --tags=e2e
- - name: run receiver/kubeletstatsreceiver e2e tests
+ - name: Run e2e tests
run: |
- cd receiver/kubeletstatsreceiver
+ cd ${{ matrix.component }}
go test -v --tags=e2e
- - name: run receiver/k8sobjectsreceiver e2e tests
+
+ kubernetes-test:
+ if: ${{ github.actor != 'dependabot[bot]' && always() }}
+ runs-on: ubuntu-latest
+ needs: [ kubernetes-test-matrix ]
+ steps:
+ - name: Print result
+ run: echo ${{ needs.kubernetes-test-matrix.result }}
+ - name: Interpret result
run: |
- cd receiver/k8sobjectsreceiver
- go test -v --tags=e2e
+ if [[ success == ${{ needs.kubernetes-test-matrix.result }} ]]
+ then
+ echo "All matrix jobs passed!"
+ else
+ echo "One or more matrix jobs failed."
+ false
+ fi
+
diff --git a/.github/workflows/generate-weekly-report.yml b/.github/workflows/generate-weekly-report.yml
index 41048d45e9e7..d58b25c651eb 100644
--- a/.github/workflows/generate-weekly-report.yml
+++ b/.github/workflows/generate-weekly-report.yml
@@ -11,6 +11,7 @@ on:
jobs:
get_issues:
runs-on: ubuntu-latest
+ if: ${{ github.repository_owner == 'open-telemetry' }}
steps:
- uses: actions/checkout@v4
- run: npm install js-yaml
diff --git a/.github/workflows/load-tests.yml b/.github/workflows/load-tests.yml
index c9f3fbdf7dee..78d17231b906 100644
--- a/.github/workflows/load-tests.yml
+++ b/.github/workflows/load-tests.yml
@@ -24,14 +24,14 @@ jobs:
loadtest_matrix: ${{ steps.splitloadtest.outputs.loadtest_matrix }}
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -45,10 +45,10 @@ jobs:
if: steps.go-cache.outputs.cache-hit != 'true'
run: make install-tools
- run: make oteltestbedcol
- - name: Upload Collector Binaries
- uses: actions/upload-artifact@v3
+ - name: Upload Testbed Binaries
+ uses: actions/upload-artifact@v4
with:
- name: collector-binaries
+ name: testbed-binaries
path: ./bin/*
- name: Split Loadtest Jobs
id: splitloadtest
@@ -62,14 +62,14 @@ jobs:
matrix: ${{ fromJson(needs.setup-environment.outputs.loadtest_matrix) }}
steps:
- uses: actions/checkout@v4
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -83,10 +83,10 @@ jobs:
if: steps.go-cache.outputs.cache-hit != 'true'
run: make install-tools
- run: mkdir -p results && touch results/TESTRESULTS.md
- - name: Download Collector Binaries
- uses: actions/download-artifact@v3
+ - name: Download Testbed Binaries
+ uses: actions/download-artifact@v4
with:
- name: collector-binaries
+ name: testbed-binaries
path: bin/
- run: chmod +x bin/*
- name: Loadtest
@@ -103,19 +103,19 @@ jobs:
- name: Upload Test Results
if: ${{ failure() || success() }}
continue-on-error: true
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
path: ./*.tar
- run: cp testbed/tests/results/benchmarks.json testbed/tests/results/${{steps.filename.outputs.name}}.json
- name: Upload benchmarks.json
- uses: actions/upload-artifact@v3
+ uses: actions/upload-artifact@v4
with:
name: benchmark-results
path: testbed/tests/results/${{steps.filename.outputs.name}}.json
- name: GitHub Issue Generator
if: ${{ failure() && github.ref == 'refs/heads/main' }}
- run: issuegenerator $TEST_RESULTS
+ run: ./.tools/issuegenerator $TEST_RESULTS
update-benchmarks:
runs-on: ubuntu-latest
@@ -123,7 +123,7 @@ jobs:
if: github.event_name != 'pull_request'
steps:
- uses: actions/checkout@v4
- - uses: actions/download-artifact@v3
+ - uses: actions/download-artifact@v4
with:
name: benchmark-results
path: results
diff --git a/.github/workflows/ping-codeowners-issues.yml b/.github/workflows/ping-codeowners-issues.yml
index 6f4162b5a296..9a58d23f1f69 100644
--- a/.github/workflows/ping-codeowners-issues.yml
+++ b/.github/workflows/ping-codeowners-issues.yml
@@ -16,4 +16,3 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ISSUE: ${{ github.event.issue.number }}
COMPONENT: ${{ github.event.label.name }}
- SENDER: ${{ github.event.sender.login }}
diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml
index 6fcfd25eb8d3..52a23fe9f41c 100644
--- a/.github/workflows/prepare-release.yml
+++ b/.github/workflows/prepare-release.yml
@@ -24,9 +24,9 @@ jobs:
- uses: actions/checkout@v4
with:
path: opentelemetry-collector-contrib
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Prepare release for contrib
working-directory: opentelemetry-collector-contrib
diff --git a/.github/workflows/prometheus-compliance-tests.yml b/.github/workflows/prometheus-compliance-tests.yml
index f0bdfabe3feb..b8caf05bb450 100644
--- a/.github/workflows/prometheus-compliance-tests.yml
+++ b/.github/workflows/prometheus-compliance-tests.yml
@@ -5,6 +5,7 @@ on:
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'
pull_request:
+ merge_group:
# Do not cancel this workflow on main. See https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/16616
concurrency:
@@ -24,14 +25,14 @@ jobs:
- uses: actions/checkout@v4
with:
path: opentelemetry-collector-contrib
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
diff --git a/.github/workflows/scripts/add-component-options.sh b/.github/workflows/scripts/add-component-options.sh
deleted file mode 100755
index 372d72024c5f..000000000000
--- a/.github/workflows/scripts/add-component-options.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/usr/bin/env sh
-#
-# Copyright The OpenTelemetry Authors
-# SPDX-License-Identifier: Apache-2.0
-#
-# Takes the list of components from the CODEOWNERS file and inserts them
-# as a YAML list in a GitHub issue template, then prints out the resulting
-# contents.
-#
-# Note that this is script is intended to be POSIX-compliant since it is
-# intended to also be called from the Makefile on developer machines,
-# which aren't guaranteed to have Bash or a GNU userland installed.
-
-if [ -z "${FILE}" ]; then
- echo 'FILE is empty, please ensure it is set.'
- exit 1
-fi
-
-CUR_DIRECTORY=$(dirname "$0")
-
-# Get the line number for text within a file
-get_line_number() {
- text=$1
- file=$2
-
- grep -n "${text}" "${file}" | awk '{ print $1 }' | grep -oE '[0-9]+'
-}
-
-LABELS=""
-
-START_LINE=$(get_line_number '# Start Collector components list' "${FILE}")
-END_LINE=$(get_line_number '# End Collector components list' "${FILE}")
-TOTAL_LINES=$(wc -l "${FILE}" | awk '{ print $1 }')
-
-head -n "${START_LINE}" "${FILE}"
-for COMPONENT in $(sh "${CUR_DIRECTORY}/get-components.sh"); do
- TYPE=$(echo "${COMPONENT}" | cut -f1 -d'/')
- REST=$(echo "${COMPONENT}" | cut -f2- -d'/' | sed "s%${TYPE}/%/%" | sed "s%${TYPE}\$%%")
- LABEL=""
-
- if [ -z "${TYPE}" ] | [ -z "${REST}" ]; then
- LABEL="${COMPONENT}"
- else
- LABEL="${TYPE}/${REST}"
- fi
-
- LABELS="${LABELS}${LABEL}\n"
-done
-printf "${LABELS}" | sort | awk '{ printf " - %s\n",$1 }'
-tail -n $((TOTAL_LINES-END_LINE+1)) "${FILE}"
-
diff --git a/.github/workflows/scripts/check-codeowners.sh b/.github/workflows/scripts/check-codeowners.sh
index ffd55d87ef9e..1aee6d5ecc7e 100755
--- a/.github/workflows/scripts/check-codeowners.sh
+++ b/.github/workflows/scripts/check-codeowners.sh
@@ -63,7 +63,7 @@ check_component_existence() {
do
if [[ $line =~ ^[^#\*] ]]; then
COMPONENT_PATH=$(echo "$line" | cut -d" " -f1)
- if [ ! -d "$COMPONENT_PATH" ]; then
+ if [ ! -e "$COMPONENT_PATH" ]; then
echo "\"$COMPONENT_PATH\" does not exist as specified in CODEOWNERS"
((NOT_EXIST_COMPONENTS=NOT_EXIST_COMPONENTS+1))
fi
diff --git a/.github/workflows/scripts/check-collector-module-version.sh b/.github/workflows/scripts/check-collector-module-version.sh
index c5e37572f687..2237f016c230 100755
--- a/.github/workflows/scripts/check-collector-module-version.sh
+++ b/.github/workflows/scripts/check-collector-module-version.sh
@@ -57,20 +57,12 @@ for mod in ${beta_modules[@]}; do
check_collector_versions_correct "$mod" "$BETA_MOD_VERSION"
done
-# Check RC modules
-RC_MODULE="go.opentelemetry.io/collector/pdata"
-RC_MOD_VERSION=$(get_collector_version "$RC_MODULE " "$MAIN_MOD_FILE")
-check_collector_versions_correct "$RC_MODULE" "$RC_MOD_VERSION"
-for mod in ${rc_modules[@]}; do
- check_collector_versions_correct "$mod" "$RC_MOD_VERSION"
-done
-
# Check stable modules, none currently exist, uncomment when pdata is 1.0.0
-# STABLE_MODULE="go.opentelemetry.io/collector/pdata "
-# STABLE_MOD_VERSION=$(get_collector_version "$STABLE_MODULE" "$MAIN_MOD_FILE")
-# check_collector_versions_correct "$STABLE_MODULE" "$STABLE_MOD_VERSION"
-# for mod in ${stable_modules[@]}; do
-# check_collector_versions_correct "$mod" "$STABLE_MOD_VERSION"
-# done
+STABLE_MODULE="go.opentelemetry.io/collector/pdata"
+STABLE_MOD_VERSION=$(get_collector_version "$STABLE_MODULE" "$MAIN_MOD_FILE")
+check_collector_versions_correct "$STABLE_MODULE" "$STABLE_MOD_VERSION"
+for mod in ${stable_modules[@]}; do
+ check_collector_versions_correct "$mod" "$STABLE_MOD_VERSION"
+done
git diff --exit-code
diff --git a/.github/workflows/scripts/dependabot-pr.sh b/.github/workflows/scripts/dependabot-pr.sh
deleted file mode 100755
index eb771351fb53..000000000000
--- a/.github/workflows/scripts/dependabot-pr.sh
+++ /dev/null
@@ -1,50 +0,0 @@
-#!/bin/zsh -ex
-
-# Copyright The OpenTelemetry Authors
-# SPDX-License-Identifier: Apache-2.0
-
-git config user.name opentelemetrybot
-git config user.email 107717825+opentelemetrybot@users.noreply.github.com
-
-PR_NAME=dependabot-prs/`date +'%Y-%m-%dT%H%M%S'`
-git checkout -b $PR_NAME
-
-IFS=$'\n'
-requests=($( gh pr list --search "author:app/dependabot" --limit 1000 --json title --jq '.[].title' | sort ))
-message=""
-dirs=(`find . -type f -name "go.mod" -exec dirname {} \; | sort | egrep '^./'`)
-
-declare -A mods
-
-for line in $requests; do
- echo $line
- if [[ $line != Bump* ]]; then
- continue
- fi
-
- module=$(echo $line | cut -f 2 -d " ")
- version=$(echo $line | cut -f 6 -d " ")
-
- mods[$module]=$version
- message+=$line
- message+=$'\n'
-done
-
-for module version in ${(kv)mods}; do
- topdir=`pwd`
- for dir in $dirs; do
- echo "checking $dir"
- cd $dir && if grep -q "$module " go.mod; then go get "$module"@v"$version"; fi
- cd $topdir
- done
-done
-
-make gotidy genotelcontribcol genoteltestbedcol otelcontribcol
-
-git add go.sum go.mod
-git add "**/go.sum" "**/go.mod"
-git commit -m "dependabot updates `date`
-$message"
-git push origin $PR_NAME
-
-gh pr create --title "[chore] dependabot updates `date`" --body "$message"
diff --git a/.github/workflows/scripts/get-codeowners.sh b/.github/workflows/scripts/get-codeowners.sh
index e7bb4ec673cc..8d84b99e7787 100755
--- a/.github/workflows/scripts/get-codeowners.sh
+++ b/.github/workflows/scripts/get-codeowners.sh
@@ -9,24 +9,32 @@
set -euo pipefail
+get_component_type() {
+ echo "${COMPONENT}" | cut -f 1 -d '/'
+}
+
+get_codeowners() {
+ # grep arguments explained:
+ # -m 1: Match the first occurrence
+ # ^: Match from the beginning of the line
+ # ${1}: Insert first argument given to this function
+ # [\/]\?: Match 0 or 1 instances of a forward slash
+ # \s: Match any whitespace character
+ echo "$((grep -m 1 "^${1}[\/]\?\s" .github/CODEOWNERS || true) | \
+ sed 's/ */ /g' | \
+ cut -f3- -d ' ')"
+}
+
if [[ -z "${COMPONENT:-}" ]]; then
echo "COMPONENT has not been set, please ensure it is set."
exit 1
fi
-# grep exits with status code 1 if there are no matches,
-# so we manually set RESULT to 0 if nothing is found.
-RESULT=$(grep -c "${COMPONENT}" .github/CODEOWNERS || true)
+OWNERS="$(get_codeowners "${COMPONENT}")"
-# there may be more than 1 component matching a label
-# if so, try to narrow things down by appending the component
-# type to the label
-if [[ ${RESULT} != 1 ]]; then
- COMPONENT_TYPE=$(echo "${COMPONENT}" | cut -f 1 -d '/')
- COMPONENT="${COMPONENT}${COMPONENT_TYPE}"
+if [[ -z "${OWNERS:-}" ]]; then
+ COMPONENT_TYPE=$(get_component_type "${COMPONENT}")
+ OWNERS="$(get_codeowners "${COMPONENT}${COMPONENT_TYPE}")"
fi
-OWNERS=$( (grep -m 1 "${COMPONENT}" .github/CODEOWNERS || true) | sed 's/ */ /g' | cut -f3- -d ' ' )
-
echo "${OWNERS}"
-
diff --git a/.github/workflows/scripts/ping-codeowners-issues.sh b/.github/workflows/scripts/ping-codeowners-issues.sh
index cce1d37dbe18..a9ce7a875cbe 100755
--- a/.github/workflows/scripts/ping-codeowners-issues.sh
+++ b/.github/workflows/scripts/ping-codeowners-issues.sh
@@ -7,8 +7,8 @@
set -euo pipefail
-if [[ -z "${COMPONENT:-}" || -z "${ISSUE:-}" || -z "${SENDER:-}" ]]; then
- echo "At least one of COMPONENT, ISSUE, or SENDER has not been set, please ensure each is set."
+if [[ -z "${COMPONENT:-}" || -z "${ISSUE:-}" ]]; then
+ echo "Either COMPONENT or ISSUE has not been set, please ensure both are set."
exit 0
fi
@@ -20,9 +20,4 @@ if [[ -z "${OWNERS}" ]]; then
exit 0
fi
-if [[ "${OWNERS}" =~ "${SENDER}" ]]; then
- echo "Label applied by code owner ${SENDER}"
- exit 0
-fi
-
gh issue comment "${ISSUE}" --body "Pinging code owners for ${COMPONENT}: ${OWNERS}. See [Adding Labels via Comments](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#adding-labels-via-comments) if you do not have permissions to add labels yourself."
diff --git a/.github/workflows/scripts/release-prepare-release.sh b/.github/workflows/scripts/release-prepare-release.sh
index 5e4181807a56..23f349b28f1e 100755
--- a/.github/workflows/scripts/release-prepare-release.sh
+++ b/.github/workflows/scripts/release-prepare-release.sh
@@ -50,6 +50,11 @@ git add .
git commit -m "make multimod-sync changes ${CANDIDATE_BETA}" || (echo "no multimod changes to commit")
make gotidy
+
+pushd cmd/otelcontribcol
+go mod tidy
+popd
+
git add .
git commit -m "make gotidy changes ${CANDIDATE_BETA}" || (echo "no gotidy changes to commit")
make otelcontribcol
diff --git a/.github/workflows/telemetrygen.yml b/.github/workflows/telemetrygen.yml
index dcd828bb935d..1e1f40793d2a 100644
--- a/.github/workflows/telemetrygen.yml
+++ b/.github/workflows/telemetrygen.yml
@@ -6,7 +6,12 @@ on:
- 'aws-cwa-*'
tags:
- 'v[0-9]+.[0-9]+.[0-9]+*'
+ merge_group:
pull_request:
+env:
+ # Make sure to exit early if cache segment download times out after 2 minutes.
+ # We limit cache download as a whole to 5 minutes.
+ SEGMENT_DOWNLOAD_TIMEOUT_MINS: 2
# Do not cancel this workflow on main. See https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/16616
concurrency:
@@ -19,12 +24,37 @@ jobs:
if: ${{ github.actor != 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v4
+ - uses: actions/setup-go@v5
+ with:
+ go-version: "1.21.9"
+ cache: false
+ - name: Cache Go
+ id: go-cache
+ timeout-minutes: 5
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/go/bin
+ ~/go/pkg/mod
+ key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
+ - name: Build binaries
+ run: |
+ GOOS=linux GOARCH=ppc64le make telemetrygen
+ GOOS=linux GOARCH=arm64 make telemetrygen
+ GOOS=linux GOARCH=amd64 make telemetrygen
+ GOOS=linux GOARCH=s390x make telemetrygen
+ cp bin/telemetrygen_* cmd/telemetrygen/
- name: Build telemetrygen
uses: docker/build-push-action@v5
with:
context: cmd/telemetrygen
push: false
tags: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:dev
+ platforms: linux/amd64,linux/arm64,linux/s390x,linux/ppc64le
publish-latest:
runs-on: ubuntu-latest
@@ -33,18 +63,43 @@ jobs:
packages: write
steps:
- uses: actions/checkout@v4
+ - uses: actions/setup-go@v5
+ with:
+ go-version: "1.21.9"
+ cache: false
+ - name: Cache Go
+ id: go-cache
+ timeout-minutes: 5
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/go/bin
+ ~/go/pkg/mod
+ key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
+ - name: Build binaries
+ run: |
+ GOOS=linux GOARCH=ppc64le make telemetrygen
+ GOOS=linux GOARCH=arm64 make telemetrygen
+ GOOS=linux GOARCH=amd64 make telemetrygen
+ GOOS=linux GOARCH=s390x make telemetrygen
+ cp bin/telemetrygen_* cmd/telemetrygen/
- name: Push telemetrygen to Github packages
uses: docker/build-push-action@v5
with:
context: cmd/telemetrygen
push: true
tags: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:latest
+ platforms: linux/amd64,linux/arm64,linux/s390x,linux/ppc64le
publish-stable:
runs-on: ubuntu-latest
@@ -53,6 +108,23 @@ jobs:
packages: write
steps:
- uses: actions/checkout@v4
+ - uses: actions/setup-go@v5
+ with:
+ go-version: "1.21.9"
+ cache: false
+ - name: Cache Go
+ id: go-cache
+ timeout-minutes: 5
+ uses: actions/cache@v4
+ with:
+ path: |
+ ~/go/bin
+ ~/go/pkg/mod
+ key: go-cache-${{ runner.os }}-${{ hashFiles('**/go.sum') }}
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v3
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v3
- name: Set Release Tag
id: github_tag
run: ./.github/workflows/scripts/set_release_tag.sh
@@ -62,9 +134,17 @@ jobs:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- - name: Push telemetrygen to Github packages
+ - name: Build binaries
run: |
- docker build cmd/telemetrygen -t ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:$RELEASE_TAG
- docker push ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:$RELEASE_TAG
- env:
- RELEASE_TAG: ${{ steps.github_tag.outputs.tag }}
+ GOOS=linux GOARCH=ppc64le make telemetrygen
+ GOOS=linux GOARCH=arm64 make telemetrygen
+ GOOS=linux GOARCH=amd64 make telemetrygen
+ GOOS=linux GOARCH=s390x make telemetrygen
+ cp bin/telemetrygen_* cmd/telemetrygen/
+ - name: Push telemetrygen to Github packages
+ uses: docker/build-push-action@v5
+ with:
+ context: cmd/telemetrygen
+ push: true
+ tags: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:${{ steps.github_tag.outputs.tag }}
+ platforms: linux/amd64,linux/arm64,linux/s390x,linux/ppc64le
diff --git a/.github/workflows/tidy-dependencies.yml b/.github/workflows/tidy-dependencies.yml
index 04c874d40fd8..328b4c598ba9 100644
--- a/.github/workflows/tidy-dependencies.yml
+++ b/.github/workflows/tidy-dependencies.yml
@@ -12,26 +12,21 @@ env:
jobs:
setup-environment:
- # disabling until permission issues is resolved
- # see: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/22953
- if: ${{ false }}
timeout-minutes: 30
runs-on: ubuntu-latest
- # if: ${{ contains(github.event.pull_request.labels.*.name, 'dependencies') }}
+ if: ${{ !contains(github.event.pull_request.labels.*.name, 'dependency-major-update') && (github.actor == 'renovate[bot]' || contains(github.event.pull_request.labels.*.name, 'renovatebot')) }}
steps:
- uses: actions/checkout@v4
with:
- repository: "renovate-bot/open-telemetry-_-opentelemetry-collector-contrib"
ref: ${{ github.head_ref }}
- token: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }}
- - uses: actions/setup-go@v4
+ - uses: actions/setup-go@v5
with:
- go-version: ~1.20.11
+ go-version: "1.21.9"
cache: false
- name: Cache Go
id: go-cache
timeout-minutes: 5
- uses: actions/cache@v3
+ uses: actions/cache@v4
with:
path: |
~/go/bin
@@ -43,12 +38,15 @@ jobs:
- name: Install Tools
if: steps.go-cache.outputs.cache-hit != 'true'
run: make install-tools
- - name: go mod tidy
+ - name: go mod tidy, make genotelcontribcol and make genoteltestbedcol
run: |
- make gotidy
+ make gotidy && make genotelcontribcol && make genoteltestbedcol
git config user.name opentelemetrybot
git config user.email 107717825+opentelemetrybot@users.noreply.github.com
- echo "git diff --exit-code || (git add . && git commit -m \"go mod tidy\" && git push)"
- git diff --exit-code || (git add . && git commit -m "go mod tidy" && git push)
+ echo "git diff --exit-code || (git add . && git commit -m \"go mod tidy, make genotelcontribcol and make genoteltestbedcol\" && git push)"
+ git diff --exit-code || (git add . && git commit -m "go mod tidy, make genotelcontribcol and make genoteltestbedcol" && git push)
env:
GITHUB_TOKEN: ${{ secrets.OPENTELEMETRYBOT_GITHUB_TOKEN }}
+ - uses: actions-ecosystem/action-remove-labels@v1
+ with:
+ labels: renovatebot
diff --git a/.golangci.yml b/.golangci.yml
index 8692ebe9e1ea..16fb19e4b5b3 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -170,3 +170,6 @@ issues:
- text: "G402:"
linters:
- gosec
+ - text: "SA1019: \"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/configschema"
+ linters:
+ - staticcheck
diff --git a/CHANGELOG-API.md b/CHANGELOG-API.md
index b861ff18d305..d01d4e28266e 100644
--- a/CHANGELOG-API.md
+++ b/CHANGELOG-API.md
@@ -7,6 +7,132 @@ If you are looking for user-facing changes, check out [CHANGELOG.md](./CHANGELOG
+## v0.98.0
+
+### 💡 Enhancements 💡
+
+- `pkg/sampling`: Usability improvements in the sampling API. (#31918)
+
+## v0.97.0
+
+### 🛑 Breaking changes 🛑
+
+- `datadogexporter`: Remove config structs `LimitedClientConfig` and `LimitedTLSClientSettings` (#31733)
+ This should have no impact to end users as long as they do not import Datadog exporter config structs in their source code.
+- `cmd/mdatagen`: Delete deprecated cmd/mdatagen from this project. Use go.opentelemetry.io/collector/cmd/mdatagen instead. (#30497)
+- `azuremonitorreceiver`: Reduce the public API for this receiver. (#24850)
+ This unexports the following types ArmClient, MetricsDefinitionsClientInterface, MetricsValuesClient.
+- `general`: Update any component using `scraperhelper.ScraperControllerSettings` to use `scraperhelper.ControllerConfig` (#31816)
+ This changes the config field name from `ScraperControllerSettings` to `ControllerConfig`
+- `prometheusreceiver`: Remove enable_protobuf_negotiation option on the prometheus receiver. Use config.global.scrape_protocols = [ PrometheusProto, OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText0.0.4 ] instead. (#30883)
+ See https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file for details on setting scrape_protocols.
+
+### 🚩 Deprecations 🚩
+
+- `pkg/stanza`: Deprecate fileconsumer.BuildWithSplitFunc in favor of Build with options pattern (#31596)
+
+### 💡 Enhancements 💡
+
+- `clickhouseexporter`: Allow configuring `ON CLUSTER` and `ENGINE` when creating database and tables (#24649)
+ Increases table creation flexibility with the ability to add replication for fault tolerance
+- `all`: Remove explicit checks in all receivers to check if the next consumer is nil (#31793)
+ The nil check is now done by the pipeline builder.
+
+## v0.96.0
+
+### 🛑 Breaking changes 🛑
+
+- `cmd/mdatagen`: Use enum for stability levels in the Metadata struct (#31530)
+- `httpforwarder`: Remove extension named httpforwarder, use httpforwarderextension instead. (#24171)
+
+## v0.95.0
+
+### 🛑 Breaking changes 🛑
+
+- `pkg/stanza`: Remove deprecated pkg/stanza/attrs (#30449)
+- `httpforwarderextension`: Rename the extension httpforwarder to httpforwarderextension (#24171)
+- `extension/storage`: The `filestorage` and `dbstorage` extensions are now standalone modules. (#31040)
+ If using the OpenTelemetry Collector Builder, you will need to update your import paths to use the new module(s).
+ - `github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage`
+ - `github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage`
+
+
+### 💡 Enhancements 💡
+
+- `pkg/golden`: Added an option to skip the metric timestamp normalization for WriteMetrics. (#30919)
+- `healthcheckextension`: Remove usage of deprecated `host.ReportFatalError` (#30582)
+
+## v0.94.0
+
+### 🚩 Deprecations 🚩
+
+- `testbed`: Deprecate testbed.GetAvailablePort in favor of testutil.GetAvailablePort (#30811)
+ Move healthcheckextension to use testutil.GetAvailablePort
+
+### 🚀 New components 🚀
+
+- `pkg_sampling`: Package of code for parsing OpenTelemetry tracestate probability sampling fields. (#29738)
+
+## v0.93.0
+
+### 🛑 Breaking changes 🛑
+
+- `testbed`: Remove unused AWS XRay mock receiver (#30381)
+- `docker`: Adopt api_version as strings to correct invalid float truncation (#24025)
+- `prometheusreceiver`: Consolidate Config members and remove the need of placeholders. (#29901)
+- `all`: Remove obsolete "// +build" directive (#30651)
+- `testbed`: Expand TestCase capabilities with broken out LoadGenerator interface (#30303)
+
+### 🚩 Deprecations 🚩
+
+- `pkg/stanza`: Deprecate pkg/stanza/attrs package in favor of pkg/stanza/fileconsumer/attrs (#30449)
+
+### 💡 Enhancements 💡
+
+- `testbed`: Adds and adopts new WithEnvVar child process option, moving GOMAXPROCS=2 to initializations (#30491)
+
+## v0.92.0
+
+### 🛑 Breaking changes 🛑
+
+- `carbonexporter`: Change Config member names (#29862)
+- `carbonreceiver`: Hide unnecessary public API (#29895)
+- `pkg/ottl`: Unexport `ADD`, `SUB`, `MULT`, `DIV`, `EQ`, `NE`, `LT`, `LTE`, `GT`, and `GTE` (#29925)
+- `pkg/ottl`: Change `Path` to be an Interface instead of the grammar struct. (#29897)
+ Affects creators of custom contexts.
+- `golden`: Use testing.TB for golden.WriteMetrics, golden.WriteTraces and golden.WriteLogs over *testing.T (#30277)
+
+### 💡 Enhancements 💡
+
+- `kafkaexporter`: add ability to publish kafka messages with message key of TraceID - it will allow partitioning of the kafka Topic. (#12318)
+- `kafkaexporter`: Adds the ability to configure the Kafka client's Client ID. (#30144)
+
+## v0.91.0
+
+### 🛑 Breaking changes 🛑
+
+- `pkg/ottl`: Rename `Statements` to `StatementSequence`. Remove `Eval` function from `StatementSequence`, use `ConditionSequence` instead. (#29598)
+
+### 💡 Enhancements 💡
+
+- `pkg/ottl`: Add `ConditionSequence` for evaluating lists of conditions (#29339)
+
+## v0.90.0
+
+### 🛑 Breaking changes 🛑
+
+- `clickhouseexporter`: Replace `Config.QueueSettings` field with `exporterhelper.QueueSettings` and remove `QueueSettings` struct (#27653)
+- `kafkareceiver`: Do not export the function `WithTracesUnmarshalers`, `WithMetricsUnmarshalers`, `WithLogsUnmarshalers` (#26304)
+
+### 💡 Enhancements 💡
+
+- `datadogreceiver`: The datadogreceiver supports the new datadog protocol that is sent by the datadog agent API/v0.2/traces. (#27045)
+- `pkg/ottl`: Add ability to independently parse OTTL conditions. (#29315)
+
+### 🧰 Bug fixes 🧰
+
+- `cassandraexporter`: Exist check for keyspace and dynamic timeout (#27633)
+
## v0.89.0
### 🛑 Breaking changes 🛑
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b0b31c3fe868..513843813afa 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,724 @@ If you are looking for developer-facing changes, check out [CHANGELOG-API.md](./
+## v0.98.0
+
+### 🛑 Breaking changes 🛑
+
+- `podmanreceiver`: Adds metrics and resources metadata and sets seconds precision for cpu metrics (#28640)
+- `clickhouseexporter`: Add ServiceName as `column` into Clickhouse metrics tables (#31670)
+ It's a breaking change. users who upgrade to the latest version need to alter the Clickhouse table:
+ ```sql
+ ALTER TABLE otel_metrics_exponential_histogram ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
+ ALTER TABLE otel_metrics_gauge ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
+ ALTER TABLE otel_metrics_histogram ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
+ ALTER TABLE otel_metrics_sum ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
+ ALTER TABLE otel_metrics_summary ADD COLUMN ServiceName LowCardinality(String) CODEC(ZSTD(1));
+ ```
+
+- `elasticsearchexporter`: Initial pass in implementing the `ecs` mapping mode (#31553)
+ Breaking change if mapping `mode` is set to `ecs`, use `none` to maintain existing format
+- `pkg/stanza`: Revert recombine operator's 'overwrite_with' default value. (#30783)
+ Restores the previous the default value of `oldest`, meaning that the recombine operator will emit the
+ first entry from each batch (with the recombined field). This fixes the bug introduced by 30783 and restores
+ the default setting so as to effectively cancel out the bug for users who were not using this setting.
+ For users who were explicitly setting `overwrite_with`, this corrects the intended behavior.
+
+- `processor/attributes, processor/resource`: Remove stable coreinternal.attraction.hash.sha256 feature gate. (#31997)
+- `receiver/dockerstats`: Remove stable receiver.dockerstats.useScraperV2 feature gate. (#31999)
+- `awsxrayexporter`: change x-ray exporter's translator to make "." split annotation pass as-is (#31732)
+ In the past, X-Ray doesn’t support “.”. So we have a translator in x-ray export to translates it to “_” before sending traces to X-Ray Service. | To match otel naming style, x-ray service team decide to change their service to support both "." type and "" type of naming. In this case the translator that translate "." to "" is no-longer needed. This PR change the way this translator work | X-Ray PMs agree on rolling out this change by using feature-gate
+
+### 🚩 Deprecations 🚩
+
+- `postgresqlreceiver`: Minimal supported PostgreSQL version will be updated from 9.6 to 12.0 in a future release. (#30923)
+ Aligning on the supported versions as can be seen [in the PostgreSQL releases section](https://www.postgresql.org/support/versioning)
+
+
+### 🚀 New components 🚀
+
+- `avrologencodingextension`: Add new encoding extension to support mapping of AVRO messages to logs. (#21067)
+
+### 💡 Enhancements 💡
+
+- `ottl`: Add new Unix function to convert from epoch timestamp to time.Time (#27868)
+- `filelogreceiver`: When reading a file on filelogreceiver not on windows, if include_file_owner_name is true, it will add the file owner name as the attribute `log.file.owner.name` and if include_file_owner_group_name is true, it will add the file owner group name as the attribute `log.file.owner.group.name`. (#30775)
+- `awsproxyextension`: Make awsproxy extension more resilient by initiating the AWS client during Start. (#27849)
+- `deltatocumulativeprocessor`: self-instrumentation to observe key metrics of the stream accumulation (#30705)
+- `datadog/connector`: Enable connector to use any attribute from the resource as Container Tag (#32224)
+ This change allows the connector to use any attribute from the resource as a container tag. This is useful when you want to use a custom attribute from the resource as a container tag. For example, you can use the `namespace` attribute from the resource as a container tag.
+
+- `exceptionsconnector`: change stability of exceptionsconnector from development to alpha (#31820)
+- `exceptionsconnector`: Copy span attributes to the generated log from exception. (#24410)
+- `prometheusreceiver`: Allows receiving prometheus native histograms (#26555)
+ - Native histograms are compatible with OTEL exponential histograms.
+ - The feature can be enabled via the feature gate `receiver.prometheusreceiver.EnableNativeHistograms`.
+ Run the collector with the command line option `--feature-gates=receiver.prometheusreceiver.EnableNativeHistograms`.
+ - Currently the feature also requires that targets are scraped via the ProtoBuf format.
+ To start scraping native histograms, set
+ `config.global.scrape_protocols` to `[ PrometheusProto, OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText0.0.4 ]` in the
+ receiver configuration. This requirement will be lifted once Prometheus can scrape native histograms over text formats.
+ - For more up to date information see the README.md file of the receiver at
+ https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/prometheusreceiver/README.md#prometheus-native-histograms.
+
+- `all`: Add support for ARM build (#12920)
+- `failoverconnector`: Support ignoring `max_retries` setting in failover connector (#9868)
+- `spanmetricsconnector`: Change default value of metrics_flush_interval from 15s to 60s (#31776)
+- `pkg/ottl`: Adding a string converter into pkg/ottl (#27867)
+- `cmd/opampsupervisor`: Handle OpAMP connection settings. (#21043)
+- `loadbalancingexporter`: Support the timeout period of k8s resolver list watch can be configured. (#31757)
+- `cmd/telemetrygen`: Add Support for specifying Log Severity (#26498)
+
+### 🧰 Bug fixes 🧰
+
+- `datadog/connector`: Fix data race in datadog metrics client (#31964)
+ The PR ensures mutex protects gauges map in every code path.
+- `exporter/awskinesisexporter`: Fixed issue with compression what was causing EOF exceptions when attempting to decompress the payload (#32081)
+- `filelogreceiver`: Fix missing scope name and group logs based on scope (#23387)
+- `jaegerremotesamplingextension`: Fix leaking goroutine on shutdown (#31157)
+- `jmxreceiver`: Fix memory leak during component shutdown (#32289)
+- `k8sobjectsreceiver`: Fix memory leak caused by the pull mode's interval ticker (#31919)
+- `kafkareceiver`: fix kafka receiver panic on shutdown (#31926)
+- `oracledbreceiver`: Fix incorrect values being set for oracledb.tablespace_size.limit and oracledb.tablespace_size.usage (#31451)
+- `prometheusreceiver`: Fix a bug where a new prometheus receiver with the same name cannot be created after the previous receiver is Shutdown (#32123)
+- `resourcedetectionprocessor`: Only attempt to detect Kubernetes node resource attributes when they're enabled. (#31941)
+- `syslogreceiver`: Fix issue where static resource and attributes were ignored (#31849)
+
+## v0.97.0
+
+### 🛑 Breaking changes 🛑
+
+- `datadogconnector`: Remove feature gate `connector.datadogconnector.performance` (#31638)
+- `cmd/mdatagen`: Delete deprecated cmd/mdatagen from this project. Use go.opentelemetry.io/collector/cmd/mdatagen instead. (#30497)
+- `receiver/postgresql`: Bump postgresqlreceiver.preciselagmetrics gate to beta (#31220)
+- `receiver/vcenter`: Bump receiver.vcenter.emitPerfMetricsWithObjects feature gate to stable (#31215)
+- `prometheusreceiver`: Remove enable_protobuf_negotiation option on the prometheus receiver. Use config.global.scrape_protocols = [ PrometheusProto, OpenMetricsText1.0.0, OpenMetricsText0.0.1, PrometheusText0.0.4 ] instead. (#30883)
+ See https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration-file for details on setting scrape_protocols.
+- `vcenterreceiver`: Fixed the resource attribute model to more accurately support multi-cluster deployments (#30879)
+ For more information on impacts please refer https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/31113. The main impacts are that
+ the `vcenter.resource_pool.name`, `vcenter.resource_pool.inventory_path`, and `vcenter.cluster.name` are reported with more accuracy on VM metrics.
+
+
+### 🚩 Deprecations 🚩
+
+- `instanaexporter`: Mark the Instana Exporter as deprecated. (#31765)
+
+### 🚀 New components 🚀
+
+- `awss3receiver`: introduce the AWS S3 receiver (#30750)
+- `sumologicextension`: promote to `alpha` stability (#29601)
+- `googleclientauthextension`: Add boilerplate for Google Client Auth Extension (#31412)
+- `grafanacloudconnector`: Adds a connector to generate metrics for Grafana Cloud. (#31647)
+- `rabbitmqexporter`: Add new exporter for sending telemetry to RabbitMQ brokers using the AMQP 0.9.1 protocol (#28891)
+
+### 💡 Enhancements 💡
+
+- `exporter/loadbalancingexporter`: Adding AWS Cloud Map for service discovery of Collectors backend. (#27241)
+- `ottl`: Add new function to decode a base64 encoded string and output the original string (#31543)
+- `ackextension`: adding the in-memory implementation of the ackextension (#26376)
+- `awss3exporter`: add `compression` option to enable file compression on S3 (#27872)
+ Add `compression` option to compress files using `compress/gzip` library before uploading to S3.
+
+- `servicegraphprocessor`: Added a new configuration option `database_name_attribute` to allow users to specify a custom attribute name for identifying the database name in span attributes. (#30726)
+- `awss3exporter`: Add support for encoding extension to awss3exporter (#30554)
+- `processor/k8sattributes`: Add support for `k8s.node.uid` metadata (#31637)
+- `awss3exporter`: Add support for specifying the file extension for files uploaded to S3 when using an encoding extension. (#31818)
+- `datadogexporter`: Datadog exporter uses the same default HTTP settings as Datadog Agent HTTP transport (#31733)
+- `datadogexporter`: Datadog exporter respects a subset of settings in confighttp client configs (#31733)
+ Currently the following configs are respected: `read_buffer_size`, `write_buffer_size`, `timeout`, `max_idle_conns`, `max_idle_conns_per_host`, `max_conns_per_host`, `idle_conn_timeout`, `disable_keep_alives` and `tls.insecure_skip_verify`.
+- `deltatocumulativeprocessor`: introduce configurable stream limit (#31488)
+ Adds `max_streams` option that allows to set upper bound (default = unlimited)
+ to the number of tracked streams. Any additional streams exceeding the limit
+ are dropped.
+
+- `deltatocumulativeprocessor`: expire stale series (#30705, #31016)
+ Adds `max_stale` option that allows to set an interval (default = `5min`)
+ after which a series that no longer receives new samples is removed from
+ tracking.
+
+- `datadogconnector`: Add a new option to the Datadog connector to enable container tags on stats Payloads. (#31642)
+ This change adds a new option to the Datadog connector to enable container tags on stats Payloads. This is useful for users who want to use container tags as second primary tag for Datadog APM.
+
+- `dockerstatsreceiver`: add metrics for online CPU count and memory fails count (#31366)
+- `fileexporter`: Adopt the encoding extension with the file exporter. (#31774)
+- `pkg/ottl`: Add `ParseXML` function for parsing XML from a target string. (#31133)
+- `fileexporter`: Added the option to write telemetry data into multiple files, where the file path is based on a resource attribute. (#24654)
+- `fileexporter`: File write mode is configurable now (truncate or append) (#31364)
+- `elasticsearchexporter`: When timestamp is not set, use observedTimestamp (#11752)
+- `k8sclusterreceiver`: add optional status_last_terminated_reason resource attribute (#31282)
+- `awsproxyextension`: Expose service_name as configurable option. Previously, it was hardcoded as xray. (#29550)
+- `datadogexporter`: Add new telemetry metric, `otelcol_datadog_otlp_translator_resources_missing_source` that counts OTLP resources missing a hostname-identifying attribute. (#31805)
+ - Enable Collector metrics https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/troubleshooting.md#metrics to check for this metric.
+
+- `extension/opamp`: Promote the OpAMP extension to alpha stability (#31616)
+- `prometheusremotewriteexporter`: Publish telemetry about translation of metrics from Otel to Prometheus. Don't drop all data points if some fail translation. (#29729)
+- `prometheusreceiver`: Use confighttp for target allocator client (#31449)
+- `spanmetricsconnector`: Add `metrics_expiration` option to enable expiration of metrics if spans are not received within a certain time frame. (#30559)
+ The feature can be configured by specifiying the desired duration in the `metrics_expiration` option. By default, the expiration is disabled (set to 0).
+- `splunkentreceiver`: Updated the config.go and propogated these changes to other receiver components. Change was necessary to differentiate different configurable endpoints. (#30254)
+- `exporter/datadogexporter`: Do not drop traces when payload channel is full. (#31893)
+- `connector/datadogconnector`: Do not resolve container tags if payload already has tags associated with it. (#31893)
+
+### 🧰 Bug fixes 🧰
+
+- `bigipreceiver`: Fix potential nil pointer usage in GetPoolMembers (#31899)
+- `carbonreceiver`: Do not report fatal error when closed normally (#31913)
+- `datadogexporter`: Fix data race in metrics exporter shutdown (#31663)
+- `deltatocumulativeprocessor`: timer-based expiry (#31615)
+ converts expiry to 1m timer, eliminating a race condition and failing test
+
+- `telemetrygen`: Do not use WithBlock when forming grpc connections for metrics/traces in telemetrygen to avoid infinite retry after failure (#31401)
+- `filestatsreceiver`: Fix file.path to return the proper absolute path of the file (#31738)
+- `internal/docker`: Updated docker dependency and fixed zap.String incompatibility (#31087)
+- `exporter/loadbalancing`: Fix panic when a sub-exporter is shut down while still handling requests. (#31410)
+- `cmd/telemetrygen`: Fixed key mapping for logs telemetry attributes. (#31309)
+- `exporter/awskinesisexporter`: Fix the capacity of records slices in the initialized batch (#20914)
+- `hostmetricsreceiver`: Adds the receiver.hostmetrics.normalizeProcessCPUUtilization feature gate to optionally normalize process.cpu.utilization values. (#31368)
+ When enabled, the receiver.hostmetrics.normalizeProcessCPUUtilization feature gate will cause process.cpu.utilization values to be divided by the number of logical cores on the system. This is necessary to produce a value on the interval of [0-1], as the description of process.cpu.utilization the metric says.
+
+- `transformprocessor`: Change metric unit for metrics extracted with `extract_count_metric()` to be the default unit (`1`) (#31575)
+ The original metric `unit` does not apply to extracted `count` metrics the same way it does to `sum`, `min` or `max`.
+ Metrics extracted using `extract_count_metric()` now use the more appropriate default unit (`1`) instead.
+
+- `dockerstatsreceiver`: Add shutdown method to fix leaking goroutines (#30438)
+- `loadbalancingexporter`: Fix memory leaks on shutdown (#31050)
+- `signalfxexporter`: Fix memory leak in shutdown (#30864, #30438)
+- `servicegraphprocessor`: Fix 'failed to find dimensions for key' error from race condition in metrics cleanup. (#31701)
+- `processor/k8sattributes`: Allows k8sattributes processor to work with k8s role/rolebindings when filter::namespace is set. (#14742)
+- `exporter/datadog`: Demote noisy gohai logs to debug level (#29741)
+ These logs would be present at the info level when using the official Docker images but were not useful to end-users.
+
+- `opencensusreceiver`: Refactor the opencensusreceiver to pass lifecycle tests and avoid leaking gRPC connections. (#31643)
+- `sqlqueryreceiver`: Fix memory leak on shutdown for log telemetry (#31782)
+
+## v0.96.0
+
+### 🛑 Breaking changes 🛑
+
+- `f5cloudexporter`: Remove deprecated module (#31531)
+- `datadogconnector`: Move feature gate `connector.datadogconnector.performance` to stable stage. (#31414)
+ `connector.datadogconnector.performance` will be removed in the next release
+- `spanmetricsprocessor`: Remove spanmetrics processor (#29567)
+ - You can use the spanmetrics connector as a replacement
+
+- `httpforwarder`: Remove extension named httpforwarder, use httpforwarderextension instead. (#24171)
+- `k8sclusterreceiver`: Remove deprecated k8s.kubeproxy.version resource attribute (#29748)
+
+### 🚀 New components 🚀
+
+- `ackextension`: Adding an interface for Acknowledgement extension (#26376)
+- `sumologicextension`: add implementation of Sumo Logic Extension (#29601)
+
+### 💡 Enhancements 💡
+
+- `datadogexporter`: Attach the collector version to stats payloads to improve the debugging experience. (#31454)
+- `awsxrayexporter`: support both deprecated and stable http attributes translation for backward compatibility. (#30935)
+- `azuremonitorexporter`: Added support for configuring the Azure Monitor Exporter connection string via the `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable. (#31523)
+- `datadogconnector`: datadogconnector no longer mutates the input traces in trace-to-trace pipelines. (#31414)
+- `statsdreceiver`: Add support for the latest version of DogStatsD protocol (v1.3) (#31295)
+- `fileexporter`: Scope the behavior of the fileexporter to its lifecycle, so it is safe to shut it down or restart it. (#27489)
+- `processor/resourcedetection`: Add `processor.resourcedetection.hostCPUSteppingAsString` feature gate to change the type of `host.cpu.stepping` from `int` to `string`. (#31136)
+ This feature gate will graduate to beta in the next release.
+
+- `routingconnector`: a warning is logged if there are two or more routing items with the same routing statement (#30663)
+- `pkg/ottl`: Add new IsInt function to facilitate type checking. (#27894)
+- `cmd/mdatagen`: Make lifecycle tests generated by default (#31532)
+- `opampextension`: enables creating and using an http client (#31389)
+- `pkg/stanza`: Improve timestamp parsing documentation (#31490)
+- `postgresqlreceiver`: Add `receiver.postgresql.connectionPool` feature gate to reuse database connections (#30831)
+ The default implementation recreates and closes connections on each scrape per database configured/discovered.
+ This change offers a feature gated alternative to keep connections open. Also, it exposes connection configuration to control the behavior of the pool.
+
+- `datadogconnector`: Add `source:datadogconnector` tag to trace agent telemetry metrics generated by the datadogconnector. (#31528)
+- `datadogexporter`: Add `source:datadogexporter` tag to trace agent telemetry metrics generated by the datadogexporter. (#31528)
+- `datadogexporter`: Automatically map `cloud.region`, `cloud.availability_zone` and `cloud.provider` to the `region`, `zone` and `cloud_provider` host tags. (#31372)
+
+### 🧰 Bug fixes 🧰
+
+- `carbonreceiver`: Accept carbon metrics with float timestamps (#31312)
+- `chronyreceiver`: move initialization of the chrony client to the start function (#27849)
+- `deltatocumulativeprocessor`: permits advancing delta start timestamps, as required by spec. (#31365)
+- `deltatocumulativeprocessor`: due to an oversight, only the first sample of each stream was processed. now all samples are. (#31350)
+- `cmd/telemetrygen`: Inherit root CAs from the host environment if not supplied on the command line. (#31191)
+- `syslogexporter`: fix setting network connection, do not load TLS configuration for UDP (#31130)
+- `journaldreceiver`: Fix bug where failed startup could bury error message due to panic during shutdown (#31476)
+- `loadbalancingexporter`: Fixes a bug where the endpoint become required, despite not being used by the load balancing exporter. (#31371)
+- `oracledbreceiver`: Use metadata.Type for the scraper id to avoid invalid scraper IDs. (#31457)
+- `filelogreceiver`: Fix bug where delete_after_read would cause panic (#31383)
+- `receiver/filelog`: Fix issue where file fingerprint could be corrupted while reading. (#22936)
+- `cmd/telemetrygen`: Fix incorrect error logged in traces batch span processor shutdown (#31362)
+
+## v0.95.0
+
+### 🛑 Breaking changes 🛑
+
+- `all`: Bump minimum version to go 1.21 (#31105)
+- `receiver/elasticsearch`: Remove receiver.elasticsearch.emitNodeVersionAttr feature gate (#31221)
+- `receiver/mongodb`: Bump receiver.mongodb.removeDatabaseAttr feature gate to beta (#31212)
+- `splunkenterprisereceiver`: adds additional metrics specific to indexers (#30704)
+- `exporter/datadogexporter`: Disable APM stats computation in Datadog Exporter by default, `exporter.datadogexporter.DisableAPMStats` is changed to beta (#31219)
+- `extension/storage`: The `filestorage` and `dbstorage` extensions are now standalone modules. (#31040)
+ If using the OpenTelemetry Collector Builder, you will need to update your import paths to use the new module(s).
+ - `github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage`
+ - `github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage`
+
+
+### 🚩 Deprecations 🚩
+
+- `f5cloudexporter`: deprecating component that is no longer maintained (#31186)
+
+### 🚀 New components 🚀
+
+- `confmap/secretsmanagerprovider`: Initial implementation of secrets manager provider. Allows fetch variables from AWS Secrets Manager (#19368)
+- `deltatocumulative`: adds processor to convert sums (initially) from delta to cumulative temporality (#30705)
+
+### 💡 Enhancements 💡
+
+- `hostmetricsreceiver`: Add a new optional resource attribute `process.cgroup` to the `process` scraper of the `hostmetrics` receiver. (#29282)
+- `datadogexporter`: Adds support for stable JVM metrics introduced in opentelemetry-java-instrumentation v2.0.0 (#31194)
+ See https://github.com/DataDog/opentelemetry-mapping-go/pull/265 for details.
+- `datasetexporter`: Release resources if they haven't been used for some time. (#31292)
+- `datadogconnector`: Add a trace config `peer_tags` on supplementary peer tags on APM stats. (#31158)
+- `datadogexporter`: Add a trace config `peer_tags` on supplementary peer tags on APM stats. (#31158)
+- `awss3exporter`: Add a marshaler that stores the body of log records in s3. (#30318)
+- `pkg/ottl`: Adds a new ParseCSV converter that can be used to parse CSV strings. (#30921)
+- `loadbalancingexporter`: Add benchmarks for Metrics and Traces (#30915)
+- `pkg/ottl`: Add support to specify the format for a replacement string (#27820)
+- `pkg/ottl`: Add `ParseKeyValue` function for parsing key value pairs from a target string (#30998)
+- `receivercreator`: Remove use of `ReportFatalError` (#30596)
+- `processor/tail_sampling`: Add metrics that measure the number of sampled spans and the number of spans that are dropped due to sampling decisions. (#30482)
+- `exporter/signalfx`: Send histograms in otlp format with new config `send_otlp_histograms` option (#26298)
+- `receiver/signalfx`: Accept otlp protobuf requests when content-type is "application/x-protobuf;format=otlp" (#26298)
+- `signalfxreceiver`: Remove deprecated use of `host.ReportFatalError` (#30598)
+- `syslogexporter`: Adding support for sending rfc6587 octet counts in syslog messages (#31013)
+- `connector/datadogconnector`: Internal telemetry metrics for the Datadog traces exporter are now reported through the Collector's self-telemetry (#31179)
+ - These internal metrics may be dropped or change name without prior notice
+
+- `exporter/datadogexporter`: Internal telemetry metrics for the Datadog traces exporter are now reported through the Collector's self-telemetry (#31179)
+ - These internal metrics may be dropped or change name without prior notice
+
+
+### 🧰 Bug fixes 🧰
+
+- `pkg/stanza`: Add 'allow_skip_pri_header' flag to syslog setting. (#30397)
+ Allow parsing syslog records without PRI header. Currently pri header is beng enforced although it's not mandatory by the RFC standard. Since influxdata/go-syslog is not maintained we had to switch to haimrubinstein/go-syslog.
+
+- `datadogexporter`: Fix bug where multiple resources would cause datadogexporter to send extraneous additional stats buckets. (#31173)
+- `extension/storage`: Ensure fsync is turned on after compaction (#20266)
+- `logstransformprocessor`: Fix potential panic on shutdown due to incorrect shutdown order (#31139)
+- `logicmonitorexporter`: Fix memory leak on shutdown (#31150)
+- `opencensusreceiver`: Fix memory leak on shutdown (#31152)
+- `receiver/prometheusreceiver`: prometheusreceiver fix translation of metrics with _created suffix (#30309)
+- `pkg/stanza`: Fixed a bug in the keyvalue_parser where quoted values could be split if they contained a delimited. (#31034)
+
+## v0.94.0
+
+### 🛑 Breaking changes 🛑
+
+- `servicegraphprocessor`: removed deprecated component, use the servicegraph connector instead. (#26091)
+- `datadogconnector`: Enable feature gate `connector.datadogconnector.performance` by default. (#30829)
+ See https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/connector/datadogconnector#feature-gate-for-performance for caveats of this feature gate.
+- `datadogprocessor`: Delete datadogprocessor which has been deprecated since v0.84.0 (#31026)
+ Use datadogconnector instead.
+- `kafkareceiver`: standardizes the default topic name for metrics and logs receivers to the same topic name as the metrics and logs exporters of the kafkaexporter (#27292)
+ If you are using the Kafka receiver in a logs and/or a metrics pipeline
+ and you are not customizing the name of the topic to read from with the `topic` property,
+ the receiver will now read from `otlp_logs` or `otlp_metrics` topic instead of `otlp_spans` topic.
+ To maintain previous behavior, set the `topic` property to `otlp_spans`.
+
+- `pkg/stanza`: Entries are no longer logged during error conditions. (#26670)
+ This change is being made to ensure sensitive information contained in logs are never logged inadvertently.
+ This change is a breaking change because it may change user expectations. However, it should require
+ no action on the part of the user unless they are relying on logs from a few specific error cases.
+
+- `pkg/stanza`: Invert recombine operator's 'overwrite_with' default value. (#30783)
+ Previously, the default value was `oldest`, meaning that the recombine operator _should_ emit the
+ first entry from each batch (with the recombined field). However, the actual behavior was inverted.
+ This fixes the bug but also inverts the default setting so as to effectively cancel out the bug fix
+ for users who were not using this setting. For users who were explicitly setting `overwrite_with`,
+ this corrects the intended behavior.
+
+
+### 🚩 Deprecations 🚩
+
+- `skywalkingexporter`: Mark the component as unmaintained. If we don't find new maintainers, it will be deprecated and removed. (#23796)
+
+### 🚀 New components 🚀
+
+- `sumologicextension`: add configuration and readme (#29601)
+- `failoverconnector`: Refactor of connector to seperate concerns between managing indexes and core failover component (#20766)
+- `otelarrow`: Skeleton of new OpenTelemetry Protocol with Apache Arrow Receiver (#26491)
+- `processor/interval`: Adds the initial structure for a new processor that aggregates metrics and periodically forwards the latest values to the next component in the pipeline. (#29461)
+ As per the CONTRIBUTING.md recommendations, this PR only creates the basic structure of the processor. The concrete implementation will come as a separate followup PR
+
+
+### 💡 Enhancements 💡
+
+- `receiver/journald`: add a new config option "all" that turns on full output from journalctl, including lines that are too long. (#30920)
+- `pkg/stanza`: Add support in a header configuration for json array parser. (#30321)
+- `awss3exporter`: Add the ability to export trace/log/metrics in OTLP ProtoBuf format. (#30682)
+- `dockerobserver`: Upgrading Docker API version default from 1.22 to 1.24 (#30900)
+- `filterprocessor`: move metrics from OpenCensus to OpenTelemetry (#30736)
+- `groupbyattrsprocessor`: move metrics from OpenCensus to OpenTelemetry (#30763)
+- `datadogconnector`: Add trace configs that mirror datadog exporter (#30787)
+ ignore_resources: disable certain traces based on their resource name
+ span_name_remappings: map of datadog span names and preferred name to map to
+ span_name_as_resource_name: use OTLP span name as datadog operation name
+ compute_stats_by_span_kind: enables an additional stats computation check based on span kind
+ peer_tags_aggregation: enables aggregation of peer related tags
+ trace_buffer: specifies the buffer size for datadog trace payloads
+
+- `elasticsearchexporter`: Add `mapping.mode: raw` configuration option (#26647)
+ Setting `mapping.mode: raw` in the Elasticsearch exporter's configuration
+ will result logs and traces being indexed into Elasticsearch with their
+ attribute fields directly at the root level of the document instead inside an
+ `Attributes` object. Similarly, this setting will also result in traces being
+ indexed into Elasticsearch with their event fields directly at the root level
+ of the document instead of inside an `Events` object.
+
+- `loadbalancingexporter`: Optimize metrics and traces export (#30141)
+- `gitproviderreceiver`: Add pull request metrics (#22028)
+ - git.repository.pull_request.open.count
+ - git.repository.pull_request.open.time
+ - git.repository.pull_request.merged.count
+ - git.repository.pull_request.merged.time
+ - git.repository.pull_request.approved.time
+
+- `all`: Add `component.UseLocalHostAsDefaultHost` feature gate that changes default endpoints from 0.0.0.0 to localhost (#30702)
+ This change affects the following components:
+ - extension/awsproxy
+ - extension/health_check
+ - extension/jaegerremotesampling
+ - internal/aws/proxy
+ - processor/remotetap
+ - receiver/awsfirehose
+ - receiver/awsxray
+ - receiver/influxdb
+ - receiver/jaeger
+ - receiver/loki
+ - receiver/opencensus
+ - receiver/sapm
+ - receiver/signalfx
+ - receiver/skywalking
+ - receiver/splunk_hec
+ - receiver/zipkin
+ - receiver/zookeeper
+
+- `googlepubsubreceiver`: Add support for GoogleCloud logging encoding (#29299)
+- `processor/resourcedetectionprocessor`: Detect Azure cluster name from IMDS metadata (#26794)
+- `processor/transform`: Add `copy_metric` function to allow duplicating a metric (#30846)
+
+### 🧰 Bug fixes 🧰
+
+- `basicauthextension`: Accept empty usernames. (#30470)
+ Per https://datatracker.ietf.org/doc/html/rfc2617#section-2, username and password may be empty strings ("").
+ The validation used to enforce that usernames cannot be empty.
+
+- `servicegraphconnector`: update prefix to match the component type (#31023)
+- `datadog/connector`: Create a separate connector in the Datadog connector for the trace-to-metrics and trace-to-trace pipelines. It should reduce the number of conversions we do and help with Datadog connector performance. (#30828)
+ Simplify datadog/connector with two separate connectors in trace-to-metrics pipeline and trace-to-trace pipeline.
+- `datadogreceiver`: Set AppVersion to allow Datadog version property to transform properly to service.version resource attribute (#30225)
+- `cmd/opampsupervisor`: Fix memory leak on shutdown (#30438)
+- `exporter/datadog`: Fixes a bug where empty histograms were not being sent to the backend in the distributions mode. (#31019)
+- `pkg/ottl`: Fix parsing of string escapes in OTTL (#23238)
+- `pkg/stanza`: Recombine operator should always recombine partial logs (#30797)
+ Previously, certain circumstances could result in partial logs being emitted without any
+ recombiniation. This could occur when using `is_first_entry`, if the first partial log from
+ a source was emitted before a matching "start of log" indicator was found. This could also
+ occur when the collector was shutting down.
+
+- `pkg/stanza`: Fix bug where recombine operator's 'overwrite_with' condition was inverted. (#30783)
+- `exporter/signalfx`: Use "unknown" value for the environment correlation calls as fallback. (#31052)
+ This fixed the APM/IM correlation in the Splunk Observability UI for the users that send traces with no "deployment.environment" resource attribute value set.
+- `namedpipereceiver`: Fix SIGSEGV when named pipe creation fails (#31088)
+
+## v0.93.0
+
+### 🛑 Breaking changes 🛑
+
+- `azuremonitorexporter`: Fixed an issue where span attributes with double and int values were incorrectly added to the `measurements` field in the Application Insights schema. These attributes are now correctly placed in the `properties` field. (#29683)
+- `vcenterreceiver`: Bump "receiver.vcenter.emitPerfMetricsWithObjects" feature gate (#30615)
+- `docker`: Adopt api_version as strings to correct invalid float truncation (#24025)
+- `extension/filestorage`: Replace path-unsafe characters in component names (#3148)
+ The feature gate `extension.filestorage.replaceUnsafeCharacters` is now enabled by default.
+ See the File Storage extension's README for details.
+
+- `postgresqlreceiver`: add schema attribute to postgresqlreceiver (#29559)
+ Adds a new resource attribute to the PSQL receiver to store the schema of the table or index
+ Existing table attributes are adjusted to not include the schema, which was inconsistently used
+
+
+### 🚩 Deprecations 🚩
+
+- `mdatagen`: Deprecate mdatagen in preparation for its move to opentelemetry-collector (#30497)
+
+### 🚀 New components 🚀
+
+- `solarwindsapmsettingsextension`: added configuration and readme (#27668)
+- `alertmanagerexporter`: Add Alertmanager exporter to builder config (#23569)
+- `otelarrow`: Skeleton of new OpenTelemetry Protocol with Apache Arrow Exporter. (#26491)
+- `osqueryreceiver`: Adds osquery receiver skeleton (#30375)
+
+### 💡 Enhancements 💡
+
+- `pkg/stanza`: Add a json array parser operator and an assign keys transformer. (#30321)
+ Json array parser opreator can be used to parse a json array string input into a list of objects. |
+ Assign keys transformer can be used to assigns keys from the configuration to an input list
+
+- `splunkhecexporter`: Batch data according to access token and index, if present. (#30404)
+- `awscloudwatchlogsexporter`: Add instrumentation scope in log records exported to CloudWatch logs (#30316, #29884)
+- `cassandraexporter`: added authorization by username and password (#27827)
+- `lokiexporter`: migrate metrics to use OpenTelemetry (#30170)
+- `cmd/telemetrygen`: This updates telemetrygen to create multiple child spans per trace and enhances the tool's functionality for load testing the remote tracing backend. (#30687)
+- `cmd/telemetrygen`: This updates telemetrygen with TLS/mTLS options to test the security of telemetry ingestion services and infrastructure for secure communication. To illustrate the usage, a new example, secure-tracing is added to examples collection. (#29681)
+- `k8sattributesprocessor`: Apply lifecycle tests to k8sprocessor, change its behavior to report fatal error (#30387)
+- `k8sclusterreceiver`: add new disabled os.description, k8s.container_runtime.version resource attributes (#30342)
+- `k8sclusterreceiver`: add os.type resource attribute (#30342)
+- `kubeletstatsreceiver`: Add new `*.cpu.usage` metrics. (#25901)
+- `oidcauthextension`: Move validation logic outside of the extension creation, to the configuration validation (#30460)
+- `datadogexporter`: Add support for setting host tags via host metadata. (#30680)
+ When the `datadog.host.use_as_metadata` resource attribute is set to `true`:
+ - Nonempty string-value resource attributes starting with `datadog.host.tag.` will be added as host tags for the host associated with the resource.
+ - deployment.environment and k8s.cluster.name as mapped to Datadog names and added as host tags for the host associated with the resource.
+
+- `opensearchexporter`: added opensearch exporter to the contrib distribution metadata (#30183)
+- `pkg/ottl`: Add `flatten` function for flattening maps (#30455)
+- `redisreciever`: adds metric for slave_repl_offset (#6942)
+ also adds a shell script to set up docker-compose integration test
+- `exporter/datadogexporter`: Add kafka metrics mapping. This allows users of the JMX Receiver/JMX Metrics Gatherer and kafka metrics receiver to have access to the OOTB kafka Dashboard. (#30731)
+- `receiver/sqlquery`: Add debug log when running SQL query (#29672)
+- `cmd/opampsupervisor`: Use a bootstrapping flow to get the Collector's agent description. (#21071)
+
+### 🧰 Bug fixes 🧰
+
+- `receiver/filelog`: fix panic after upgrading from v0.71.0 when using storage (#30235)
+- `clickhouseexporter`: Fix clickhouse exporter insert metrics data bug (#30210)
+- `prometheusremotewriteexporter`: Check if the context was canceled by a timeout in the component level to avoid unnecessary retries. (#30308)
+- `elasticsearchreceifver`: Fix nil panic on non-linux systems (#30140)
+- `kafkareceiver`: The Kafka receiver now exports some partition-specific metrics per-partition, with a `partition` tag (#30177)
+ The following metrics now render per partition:
+ - kafka_receiver_messages
+ - kafka_receiver_current_offset
+ - kafka_receiver_offset_lag
+
+
+## v0.92.0
+
+### 🛑 Breaking changes 🛑
+
+- `httpforwarder`: Use confighttp.HTTPDefaultClientSettings when configuring the HTTPClientSettings for the httpforwarder extension. (#6641)
+ By default, the HTTP forwarder extension will now use the defaults set in the extension:
+ * The idle connection timeout is set to 90s.
+ * The max idle connection count is set to 100.
+
+- `pkg/ottl`: Now validates against extraneous path segments that a context does not know how to use. (#30042)
+- `pkg/ottl`: Throw an error if keys are used on a path that does not allow them. (#30162)
+- `tanzuexporter`: Remove tanzuexporter, user can still use versions 0.91. (#30184)
+- `zipkinexporter`: Use default client HTTP settings in zipkinexporter, move validation to config validation (#29931)
+
+### 🚩 Deprecations 🚩
+
+- `mdatagen`: Component is being moved to core to allow it to be used there as well. (#30173)
+- `k8sclusterreceiver`: deprecate optional k8s.kubeproxy.version resource attribute (#29748)
+- `configschema`: Deprecating configschema to prefer generating documentation as part of its metadata generation with mdatagen (#30187)
+
+### 🚀 New components 🚀
+
+- `failoverconnector`: PR provides core logic for failover connector and implements failover for trace signals (#20766)
+- `failoverconnector`: PR extends failover connector for metric and log pipelines (#20766)
+- `namedpipereceiver`: Add "namedpipereceiver" that allows ingesting logs over a Named Pipe (#27234)
+
+### 💡 Enhancements 💡
+
+- `encoding/jaegerencodingextension`: Add support for JSON protocol for jaeger codec (#6272)
+- `githubgen`: Adds a set of distribution reports that can be used to notify distribution maintainers of any changes to distributions. (#28628)
+- `vcenterreceiver`: Add explicit statement of support for version 8 of ESXi and vCenter (#30274)
+- `carbonexporter`: Add support for resourcetotelemetry (#29879)
+- `carbonexporter`: Add retry and queue, use standard configs (#29862)
+- `carbonexporter`: Add ability to configure max_idle_conns (#30109)
+- `mdatagen`: add Meter/Tracer methods to simplify instrumenting components (#29927)
+- `servicegraphprocessor`: update own telemetry to use otel (#29917)
+- `datadogexporter`: DataDog log timestamp (ie. '@timestamp') now includes milliseconds (#29785)
+- `exporter/elasticsearch`: set the User-Agent header in the outgoing HTTP requests. (#29898)
+- `elasticsearchexporter`: add missing trace status description in span (#27645)
+- `routingconnector`: routingconnector supports matching the statement only once (#26353)
+- `filestatsreceiver`: Add a file.count metric to filestatsreceiver that reports the number of files matched by the receiver (#24651)
+- `filterprocessor`: Add telemetry for metrics, logs, and spans that were intentionally dropped via filterprocessor. (#13169)
+- `googlecloudpubsubexporter`: Expose `Endpoint` and `Insecure` in configuration. (#29304)
+- `exporter/honeycombmarker`: set the User-Agent header in the outgoing HTTP requests (#29894)
+- `pkg/ottl`: Add Hour OTTL Converter (#29468)
+- `kafkaexporter`: add ability to publish kafka messages with message key of TraceID - it will allow partitioning of the kafka Topic. (#12318)
+- `kafkareceiver`: Add three new metrics to record unmarshal errors. (#29302)
+- `kineticaexporter`: added metrics handling (#27239)
+- `logzioexporter`: add scopename to exported logs (#20659)
+ when it exists, scope name will be added to exported logs under the scopeName field.
+- `hostmetricsreceiver`: Add `system.memory.limit` metric reporting the total memory available. (#30306)
+ This metric is opt-in. To enable it, set `scrapers::memory::metrics::system.memory.limit::enabled` to `true` in the hostmetrics config.
+
+- `datadogexporter`: Add support for more semantic conventions related to host metadata (#30158)
+ The following semantic conventions are now detected for host metadata:
+ - `host.ip`
+ - `host.mac`
+ - `system.cpu.physical.count`
+ - `system.cpu.logical.count`
+ - `system.cpu.frequency`
+ - `system.memory.limit`
+
+- `prometheusexporter`: Accumulate histograms with delta temporality (#4968)
+- `kafkaexporter`: Adds the ability to configure the Kafka client's Client ID. (#30144)
+- `pkg/stanza`: Remove sampling policy from logger (#23801)
+- `resourcedetectionprocessor`: Add "aws.ecs.task.id" attribute (#8274)
+ Resourcedetectionprocessor now exports "aws.ecs.task.id" attribute, in addition to "aws.ecs.task.arn".
+ This allows exporters like "awsemfexporter" to automatically pick up that attribute and make it available
+ in templating (e.g. to use in CloudWatch log stream name).
+
+- `spanmetricsconnector`: Fix OOM issue for spanmetrics by limiting the number of exemplars that can be added to a unique dimension set (#27451)
+- `connector/spanmetrics`: Configurable resource metrics key attributes, filter the resource attributes used to create the resource metrics key. (#29711)
+ This enhancement can be used to fix broken spanmetrics counters after a span producing service restart, when resource attributes contain dynamic/ephemeral values (e.g. process id).
+- `splunkhecreceiver`: Returns json response in raw endpoint when it is successful (#20766)
+- `logicmonitorexporter`: add support for log resource mapping configurations (#29732)
+- `sqlqueryreceiver`: Swap MS SQL Server driver from legacy 'denisenkom' to official Microsoft fork (#27200)
+
+### 🧰 Bug fixes 🧰
+
+- `awsemfexporter`: AWS EMF Exporter will drop metrics that contain Inf values to avoid JSON marshal errors. (#29336)
+- `azuretranslatorpkg`: When receiving data from Azure some data does not meet the Common Specifications when sending the timestamp. Allow the attribute timeStamp to be used as an alternative to the standard time. (#28806)
+- `datadogconnector`: Add feature flag to address memory issue with Datadog Connector (#29755)
+- `filterset`: Fix concurrency issue when enabling caching. (#11829)
+- `pkg/ottl`: Fix issue with the hash value of a match subgroup in replace_pattern functions. (#29409)
+- `opampsupervisor`: Fix panic on agent shutdown (#29955)
+- `prometheusreceiver`: Fix configuration validation to allow specification of Target Allocator configuration without providing scrape configurations (#30135)
+- `carbonexporter`: Fix metric with empty numberdatapoint serialization (#30182)
+- `wavefrontreceiver`: Return error if partially quoted (#30315)
+- `hosmetricsreceiver`: change cpu.load.average metrics from 1 to {thread} (#29914)
+- `bearertokenauthextension`: Http receiver trying to get the authorization with the lower case from headers, But The headers from Http is received as Authorization capitalcase even-though we sent in lower case and Always return 401 Unauthorized (#24656)
+- `pkg/ottl`: Fix bug where the Converter `IsBool` was not usable (#30151)
+- `prometheusremotewriteexporter`: sanitize retry default settings (#30286)
+- `snowflakereceiver`: Fixed bug where storage metrics for snowflake were not being reported (#29750)
+- `apachesparkreceiver`: propagate application list errors to reveal underlying issue (#30278)
+- `haproxyreceiver`: Support empty values in haproxy stats. (#30252)
+- `time`: The `%z` strptime format now correctly parses `Z` as a valid timezone (#29929)
+ `strptime(3)` says that `%z` is "an RFC-822/ISO 8601 standard
+ timezone specification", but the previous code did not allow the
+ string "Z" to signify UTC time, as required by ISO 8601. Now, both
+ `+0000` and `Z` are recognized as UTC times in all components that
+ handle `strptime` format strings.
+
+
+## v0.91.0
+
+### 🚀 New components 🚀
+
+- `alertmanagerexporter`: Add Alertmanager exporter implementation and tests (#23569)
+
+### 💡 Enhancements 💡
+
+- `spanmetricsconnector`: Add exemplars to sum metric (#27451)
+- `exporter/datadogexporter`: Add support for nested log attributes. (#29633)
+- `jaegerreceiver,jaegerremotesamplingextension`: mark featuregates to replace Thrift-gen with Proto-gen types for sampling strategies as stable (#27636)
+ The following featuregates are stable:
+ - extension.jaegerremotesampling.replaceThriftWithProto
+ - receiver.jaegerreceiver.replaceThriftWithProto
+
+- `awsemfexporter/awscloudwatchlogsexporter`: Add component name to user agent header for outgoing put log even requests (#29595)
+- `elasticsearchexporter`: Logstash format compatibility. Traces or Logs data can be written into an index in logstash format. (#29624)
+- `extension/opampextension`: Implement `extension.NotifyConfig` to be notified of the Collector's effective config and report it to the OpAMP server. (#27293)
+- `receiver/influxdbreceiver`: Endpoint `/ping` added to enhance compatibility with third party products (#29594)
+- `kafkareceiver`: Add the ability to consume logs from Azure Diagnostic Settings streamed through Event Hubs using the Kafka API. (#18210)
+- `resourcedetectionprocessor`: Add detection of host.ip to system detector. (#24450)
+- `resourcedetectionprocessor`: Add detection of host.mac to system detector. (#29587)
+- `pkg/ottl`: Add `silent` ErrorMode to allow disabling logging of errors that are ignored. (#29710)
+- `postgresqlreceiver`: Add config property for excluding specific databases from scraping (#29605)
+- `redisreceiver`: Upgrade the redis library dependency to resolve security vulns in v7 (#29600)
+- `signalfxexporter`: Enable HTTP/2 health check by default (#29716)
+- `splunkhecexporter`: Enable HTTP/2 health check by default (#29717)
+- `statsdreceiver`: Add support for 'simple' tags that do not have a defined value, to accommodate DogStatsD metrics that may utilize these. (#29012)
+ This functionality is gated behind a new `enable_simple_tags` config boolean, as it is not part of the StatsD spec.
+
+### 🧰 Bug fixes 🧰
+
+- `exporter/prometheusremotewrite`: prometheusremotewrite exporter fix created metrics missing timestamp (#24915)
+- `connector/spanmetrics`: Fix memory leak when the cumulative temporality is used. (#27654)
+- `awscontainerinsightreceiver`: Filter terminated pods from node request metrics (#27262)
+- `clickhouseexporter`: Fix regression error introduced in #29095 (#29573)
+- `prometheusexporter`: Fix panic when exporter mutates data (#29574)
+- `splunkhecexporter`: Do not send null event field values in HEC events. Replace null values with an empty string. (#29551)
+- `k8sobjectsreceiver`: fix k8sobjects receiver fails when some unrelated Kubernetes API is down (#29706)
+- `resourcedetectionprocessor`: Change type of `host.cpu.model.id` and `host.cpu.model.family` from int to string. (#29025)
+ - Disable the `processor.resourcedetection.hostCPUModelAndFamilyAsString` feature gate to get the old behavior.
+
+- `Fix problem where checkpoints could be lost when collector is shutdown abruptly`: filelogreceiver (#29609, #29491)
+- `googlecloudspannerreceiver`: Google Cloud Spanner Receiver currently generates an exception and exits if it attempts to read data from a database that doesn't exist. However it's normal for a single receiver to poll multiple databases, so this is not graceful failure. This PR makes a change to gracefully generate an error in case of an unreadable missing database and then continue reading other databases.. (#26732)
+- `pkg/stanza`: Allow `key_value_parser` to parse values that contain the delimiter string. (#29629)
+
+## v0.90.1
+
+### 🧰 Bug fixes 🧰
+
+- `exporters`: Upgrade core dependency to remove noisy "Exporting finished" log message in exporters. (#29612)
+
+## v0.90.0
+
+### 🛑 Breaking changes 🛑
+
+- `dockerstatsreceiver`: Add [container.cpu.limit], [container.cpu.shares] and [container.restarts] metrics from docker container api (#21087)
+ It requires API version 1.25 or greater.
+
+### 🚀 New components 🚀
+
+- `failoverconnector`: New component that will allow for pipeline failover triggered by the health of target downstream exporters (#20766)
+- `gitproviderreceiver`: add repo, branch, and contributor count metrics (#22028)
+
+### 💡 Enhancements 💡
+
+- `opensearchexporter`: Promote opensearchexporter to alpha. (#24668)
+- `awsemfexporter`: Improve NaN value checking for Summary metric types. (#28894)
+- `awsemfexporter`: Logs relating to the start and finish of processing metrics have been reduced to debug level (#29337)
+- `azuremonitorreceiver`: Support Azure gov cloud (#27573)
+- `clickhouseexporter`: Added support for more control over TTL configuration. Currently, it supports timelines only in days, now also in hours, minutes and seconds (propertyName ttl_days --> ttl). (#28675)
+- `datasetexporter`: Collect usage metrics with Otel and send grouped attributes in session info. (#27650, #27652)
+- `resourcedetectionprocessor`: Add k8s cluster name detection when running in EKS (#26794)
+- `pkg/ottl`: Add new IsDouble function to facilitate type checking. (#27895)
+- `configschema`: Generate metadata for connectors. (#26990)
+- `telemetrygen`: Exposes the span duration as a command line argument `--span-duration` (#29116)
+- `honeycombmarkerexporter`: Change honeycombmarkerexporter to alpha (#27666)
+- `mysqlreceiver`: expose tls in mysqlreceiver (#29269)
+ If `tls` is not set, the default is to disable TLS connections.
+- `processor/transform`: Convert between sum and gauge in metric context when alpha feature gate `processor.transform.ConvertBetweenSumAndGaugeMetricContext` enabled (#20773)
+- `receiver/mongodbatlasreceiver`: adds project config to mongodbatlas metrics to filter by project name and clusters. (#28865)
+- `pkg/stanza`: Add "namedpipe" operator. (#27234)
+- `pkg/resourcetotelemetry`: Do not clone data in pkg/resourcetotelemetry by default (#29327)
+ - The resulting consumer will be marked as `MutatesData` instead
+
+- `pkg/stanza`: Improve performance by not calling decode when nop encoding is defined (#28899)
+- `exporter/prometheusremotewrite`: prometheusremotewrite exporter add option to send metadata (#13849)
+- `receivercreator`: Added support for discovery of endpoints based on K8s services (#29022)
+ By discovering endpoints based on K8s services, a dynamic probing of K8s service leveraging for example the httpcheckreceiver get enabled
+- `signalfxexporter`: change default timeout to 10 seconds (#29436)
+- `awss3exporter`: add support for `s3_force_path_style` and `disable_ssl` parameters (#29331)
+ In order to support alternative object-storage, these parameters are useful and help to leverage those systems not
+ compatible with domain style path, or just hosted without ssl (like just deployed in a k8s namespace).
+
+- `hostmetricsreceiver`: Add optional Linux-only metric `system.linux.memory.available` (#7417)
+ This is an alternative to `system.memory.usage` metric with `state=free`.
+ Linux starting from 3.14 exports "available" memory. It takes "free" memory as a baseline, and then factors in kernel-specific values.
+ This is supposed to be more accurate than just "free" memory.
+ For reference, see the calculations [here](https://superuser.com/a/980821).
+ See also `MemAvailable` in [/proc/meminfo](https://man7.org/linux/man-pages/man5/proc.5.html).
+
+- `azuremonitorexporter`: Updated Azure Monitor Exporter service version from v2.0 to v2.1. (#29234)
+
+### 🧰 Bug fixes 🧰
+
+- `cassandraexporter`: Exist check for keyspace and dynamic timeout (#27633)
+- `datadogreceiver`: Fix set telemetry.sdk.language=dotnet instead of .NET (#29459)
+- `filelogreceiver`: Fix issue where files were unnecessarily kept open on Windows (#29149)
+- `receiver/activedirectoryds`: Fix shutdown of `activedirectorydsreceiver` when shutdown was called right after creation, without a corresponding start call. (#29505)
+- `honeycombmarkerexporter`: Fix default api_url and dataset_slug (#29309)
+- `influxdbexporter`: When InfluxDB v1 compatibility is enabled AND username&password are set, the exporter panics. Not any more! (#27084)
+- `mongodbreceiver`: add `receiver.mongodb.removeDatabaseAttr` Alpha feature gate to remove duplicate database name attribute (#24972)
+- `pkg/stanza`: Fix panic during stop for udp async mode only. (#29120)
+
## v0.89.0
### 🛑 Breaking changes 🛑
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 509b253c4879..cddc12daa12f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -119,7 +119,7 @@ Components refer to connectors, exporters, extensions, processors, and receivers
* Implement the [component.Component](https://pkg.go.dev/go.opentelemetry.io/collector/component#Component) interface
* Provide a configuration structure which defines the configuration of the component
* Provide the implementation which performs the component operation
-* Have a `metadata.yaml` file and its generated code (using [mdatadgen](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/cmd/mdatagen/README.md)).
+* Have a `metadata.yaml` file and its generated code (using [mdatadgen](https://github.com/open-telemetry/opentelemetry-collector/blob/main/cmd/mdatagen/README.md)).
Familiarize yourself with the interface of the component that you want to write, and use existing implementations as a reference.
[Building a Trace Receiver](https://opentelemetry.io/docs/collector/trace-receiver/) tutorial provides a detailed example of building a component.
@@ -152,7 +152,26 @@ and its contributors.
and in the respective testing harnesses. To align with the test goal of the project, components must be testable within the framework defined within
the folder. If a component can not be properly tested within the existing framework, it must increase the non testable
components number with a comment within the PR explaining as to why it can not be tested.
-- Create a `metadata.yaml` file with at minimum the required fields defined in [metadata-schema.yaml](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/cmd/mdatagen/metadata-schema.yaml).
+- Enable [goleak checks](https://github.com/uber-go/goleak) to help ensure your component does not leak goroutines. This
+ requires adding a file named `package_test.go` to every sub-directory containing tests. This file should have the following contents by default:
+```
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package fooreceiver
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
+```
+
+- Create a `metadata.yaml` file with at minimum the required fields defined in [metadata-schema.yaml](https://github.com/open-telemetry/opentelemetry-collector/blob/main/cmd/mdatagen/metadata-schema.yaml).
Here is a minimal representation:
```
type:
@@ -181,7 +200,7 @@ status:
// Package fooreceiver bars.
package fooreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fooreceiver"
```
-- Type `make update-codeowners`. This will trigger the regeneration of the `.github/CODEOWNERS` file and the [metadata generator](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/cmd/mdatagen/README.md#using-the-metadata-generator) to generate the associated code/documentation.
+- Type `make update-codeowners`. This will trigger the regeneration of the `.github/CODEOWNERS` file and the [metadata generator](https://github.com/open-telemetry/opentelemetry-collector/blob/main/cmd/mdatagen/README.md#using-the-metadata-generator) to generate the associated code/documentation.
When submitting a component to the community, consider breaking it down into separate PRs as follows:
@@ -201,7 +220,6 @@ When submitting a component to the community, consider breaking it down into sep
* `make genotelcontribcol`
* `make genoteltestbedcol`
* `make generate`
- * `make gendependabot`
* `make multimod-verify`
* `make generate-gh-issue-templates`
* **Second PR** should include the concrete implementation of the component. If the
@@ -222,6 +240,7 @@ to be included in the distributed otelcol-contrib binaries and docker images.
The following GitHub users are the currently available sponsors, either by being an approver or a maintainer of the contrib repository. The list is ordered based on a random sort of the list of sponsors done live at the Collector SIG meeting on 27-Apr-2022 and serves as the seed for the round-robin selection of sponsors, as described in the section above.
+* [@crobert-1](https://github.com/crobert-1)
* [@djaglowski](https://github.com/djaglowski)
* [@codeboten](https://github.com/codeboten)
* [@Aneurysm9](https://github.com/Aneurysm9)
@@ -233,6 +252,11 @@ The following GitHub users are the currently available sponsors, either by being
* [@jpkrohling](https://github.com/jpkrohling)
* [@dashpole](https://github.com/dashpole)
* [@TylerHelmuth](https://github.com/TylerHelmuth)
+* [@fatsheep9146](https://github.com/fatsheep9146)
+* [@astencel-sumo](https://github.com/astencel-sumo)
+* [@songy23](https://github.com/songy23)
+* [@Bryan Aguilar](https://github.com/bryan-aguilar)
+* [@atoulme](https://github.com/atoulme)
Whenever a sponsor is picked from the top of this list, please move them to the bottom.
@@ -357,13 +381,18 @@ Example label comment:
## Becoming a Code Owner
-A Code Owner is responsible for a component within Collector Contrib, as indicated by the [CODEOWNERS file](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/.github/CODEOWNERS). That responsibility includes maintaining the component, responding to issues, and reviewing pull requests.
+A Code Owner is responsible for a component within Collector Contrib, as indicated by the [CODEOWNERS file](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/.github/CODEOWNERS). That responsibility includes maintaining the component, triaging and responding to issues, and reviewing pull requests.
Sometimes a component may be in need of a new or additional Code Owner. A few reasons this situation may arise would be:
-- The component was never assigned a Code Owner.
+
+- The existing Code Owners are actively looking for more help.
- A previous Code Owner stepped down.
- An existing Code Owner has become unresponsive. See [unmaintained stability status](https://github.com/open-telemetry/opentelemetry-collector#unmaintained).
-- The existing Code Owners are actively looking for new Code Owners to help.
+- The component was never assigned a Code Owner.
+
+Code Ownership does not have to be a full-time job. If you can find a couple hours to help out on a recurring basis, please consider pursuing Code Ownership.
+
+### Requirements
If you would like to help and become a Code Owner you must meet the following requirements:
@@ -372,9 +401,18 @@ If you would like to help and become a Code Owner you must meet the following re
Code Ownership is ultimately up to the judgement of the existing Code Owners and Collector Contrib Maintainers. Meeting the above requirements is not a guarantee to be granted Code Ownership.
-To become a Code Owner, open a PR with the CODEOWNERS file modified, adding your GitHub username to the component's row. Be sure to tag the existing Code Owners, if any, within the PR to ensure they receive a notification.
+### How to become a Code Owner
+
+To become a Code Owner, open a PR with the following changes:
+
+1. Add your GitHub username to the active codeowners entry in the component's `metadata.yaml` file.
+2. Run the command `make update-codeowners`.
+ * Note: A GitHub [personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens) must be configured for this command to work.
+ * If this command is unsuccessful, manually update the component's row in the [CODEOWNERS](.github/CODEOWNERS) file, and then run `make generate` to regenerate the component's README header.
+
+Be sure to tag the existing Code Owners, if any, within the PR to ensure they receive a notification.
-### Makefile Guidelines
+## Makefile Guidelines
When adding or modifying the `Makefile`'s in this repository, consider the following design guidelines.
@@ -383,7 +421,7 @@ The [Makefile](./Makefile) SHOULD contain "repo-level" targets. (i.e. targets th
Likewise, `Makefile.Common` SHOULD contain "module-level" targets. (i.e. targets that apply to one module at a time.)
Each module should have a `Makefile` at its root that includes `Makefile.Common`.
-#### Module-level targets
+### Module-level targets
Module-level targets SHOULD NOT act on nested modules. For example, running `make lint` at the root of the repo will
*only* evaluate code that is part of the `go.opentelemetry.io/collector` module. This excludes nested modules such as
@@ -393,7 +431,7 @@ Each module-level target SHOULD have a corresponding repo-level target. For exam
in each module. In this way, the entire repository is covered. The root `Makefile` contains some "for each module" targets
that can wrap a module-level target into a repo-level target.
-#### Repo-level targets
+### Repo-level targets
Whenever reasonable, targets SHOULD be implemented as module-level targets (and wrapped with a repo-level target).
However, there are many valid justifications for implementing a standalone repo-level target.
@@ -403,7 +441,7 @@ However, there are many valid justifications for implementing a standalone repo-
3. A necessary tool does not provide a mechanism for scoping its application. (e.g. `porto` cannot be limited to a specific module.)
4. The "for each module" pattern would result in incomplete coverage of the codebase. (e.g. A target that scans all file, not just `.go` files.)
-#### Default targets
+### Default targets
The default module-level target (i.e. running `make` in the context of an individual module), should run a substantial set of module-level
targets for an individual module. Ideally, this would include *all* module-level targets, but exceptions should be made if a particular
diff --git a/Makefile b/Makefile
index 486fe2a589e2..22749ab3c721 100644
--- a/Makefile
+++ b/Makefile
@@ -3,7 +3,6 @@ include ./Makefile.Common
RUN_CONFIG?=local/config.yaml
CMD?=
OTEL_VERSION=main
-OTEL_RC_VERSION=main
OTEL_STABLE_VERSION=main
VERSION=$(shell git describe --always --match "v[0-9]*" HEAD)
@@ -21,28 +20,30 @@ EX_INTERNAL=-not -path "./internal/*"
EX_PKG=-not -path "./pkg/*"
EX_CMD=-not -path "./cmd/*"
EX_OVERRIDE=-not -path "./override/*"
-# Exclude patches from linting
-EX_PATCH=-not -path "./config/*"
# NONROOT_MODS includes ./* dirs (excludes . dir)
NONROOT_MODS := $(shell find . $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
-RECEIVER_MODS_0 := $(shell find ./receiver/[a-k]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
-RECEIVER_MODS_1 := $(shell find ./receiver/[l-z]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
-RECEIVER_MODS := $(RECEIVER_MODS_0) $(RECEIVER_MODS_1)
+RECEIVER_MODS_0 := $(shell find ./receiver/[a-f]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+RECEIVER_MODS_1 := $(shell find ./receiver/[g-o]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+RECEIVER_MODS_2 := $(shell find ./receiver/[p]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) ) # Prometheus is special and gets its own section.
+RECEIVER_MODS_3 := $(shell find ./receiver/[q-z]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+RECEIVER_MODS := $(RECEIVER_MODS_0) $(RECEIVER_MODS_1) $(RECEIVER_MODS_2) $(RECEIVER_MODS_3)
PROCESSOR_MODS := $(shell find ./processor/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
-EXPORTER_MODS := $(shell find ./exporter/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+EXPORTER_MODS_0 := $(shell find ./exporter/[a-m]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+EXPORTER_MODS_1 := $(shell find ./exporter/[n-z]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+EXPORTER_MODS := $(EXPORTER_MODS_0) $(EXPORTER_MODS_1)
EXTENSION_MODS := $(shell find ./extension/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
CONNECTOR_MODS := $(shell find ./connector/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
INTERNAL_MODS := $(shell find ./internal/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
PKG_MODS := $(shell find ./pkg/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
-CMD_MODS := $(shell find ./cmd/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+CMD_MODS_0 := $(shell find ./cmd/[a-m]* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
+CMD_MODS_1 := $(shell find ./cmd/[n-z]* $(FIND_MOD_ARGS) -not -path "./cmd/otelcontribcol/*" -exec $(TO_MOD_DIR) )
+CMD_MODS := $(CMD_MODS_0) $(CMD_MODS_1)
OVERRIDE_MODS := $(shell find ./override/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
-PATCH_MODS := $(shell find ./config/* $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) )
-OTHER_MODS := $(shell find . $(EX_COMPONENTS) $(EX_INTERNAL) $(EX_PKG) $(EX_CMD) $(EX_OVERRIDE) $(EX_PATCH) $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) ) $(PWD)
-ALL_MODS := $(RECEIVER_MODS) $(PROCESSOR_MODS) $(EXPORTER_MODS) $(EXTENSION_MODS) $(CONNECTOR_MODS) $(INTERNAL_MODS) $(PKG_MODS) $(CMD_MODS) $(OVERRIDE_MODS) $(PATCH_MODS) $(OTHER_MODS)
+OTHER_MODS := $(shell find . $(EX_COMPONENTS) $(EX_INTERNAL) $(EX_PKG) $(EX_CMD) $(FIND_MOD_ARGS) -exec $(TO_MOD_DIR) ) $(PWD)
+ALL_MODS := $(RECEIVER_MODS) $(PROCESSOR_MODS) $(EXPORTER_MODS) $(EXTENSION_MODS) $(CONNECTOR_MODS) $(INTERNAL_MODS) $(PKG_MODS) $(CMD_MODS) $(OTHER_MODS)
-# find -exec dirname cannot be used to process multiple matching patterns
FIND_INTEGRATION_TEST_MODS={ find . -type f -name "*integration_test.go" & find . -type f -name "*e2e_test.go" -not -path "./testbed/*"; }
INTEGRATION_MODS := $(shell $(FIND_INTEGRATION_TEST_MODS) | xargs $(TO_MOD_DIR) | uniq)
@@ -58,13 +59,18 @@ all-modules:
all-groups:
@echo "receiver-0: $(RECEIVER_MODS_0)"
@echo "\nreceiver-1: $(RECEIVER_MODS_1)"
+ @echo "\nreceiver-2: $(RECEIVER_MODS_2)"
+ @echo "\nreceiver-3: $(RECEIVER_MODS_3)"
@echo "\nreceiver: $(RECEIVER_MODS)"
@echo "\nprocessor: $(PROCESSOR_MODS)"
- @echo "\nexporter: $(EXPORTER_MODS)"
+ @echo "\nexporter-0: $(EXPORTER_MODS_0)"
+ @echo "\nexporter-1: $(EXPORTER_MODS_1)"
@echo "\nextension: $(EXTENSION_MODS)"
@echo "\nconnector: $(CONNECTOR_MODS)"
@echo "\ninternal: $(INTERNAL_MODS)"
@echo "\npkg: $(PKG_MODS)"
+ @echo "\ncmd-0: $(CMD_MODS_0)"
+ @echo "\ncmd-1: $(CMD_MODS_1)"
@echo "\ncmd: $(CMD_MODS)"
@echo "\noverride: $(OVERRIDE_MODS)"
@echo "\nother: $(OTHER_MODS)"
@@ -78,7 +84,7 @@ all-common:
.PHONY: e2e-test
e2e-test: otelcontribcol oteltestbedcol
- $(MAKE) -C testbed run-tests
+ $(MAKE) --no-print-directory -C testbed run-tests
.PHONY: integration-test
integration-test:
@@ -94,6 +100,10 @@ stability-tests: otelcontribcol
@echo Stability tests are disabled until we have a stable performance environment.
@echo To enable the tests replace this echo by $(MAKE) -C testbed run-stability-tests
+.PHONY: gogci
+gogci:
+ $(MAKE) $(FOR_GROUP_TARGET) TARGET="gci"
+
.PHONY: gotidy
gotidy:
$(MAKE) $(FOR_GROUP_TARGET) TARGET="tidy"
@@ -111,6 +121,10 @@ gotest-with-cover:
@$(MAKE) $(FOR_GROUP_TARGET) TARGET="test-with-cover"
$(GOCMD) tool covdata textfmt -i=./coverage/unit -o ./$(GROUP)-coverage.txt
+.PHONY: gointegration-test
+gointegration-test:
+ $(MAKE) $(FOR_GROUP_TARGET) TARGET="mod-integration-test"
+
.PHONY: gofmt
gofmt:
$(MAKE) $(FOR_GROUP_TARGET) TARGET="fmt"
@@ -148,18 +162,11 @@ push-tags: $(MULTIMOD)
git push ${REMOTE} $${tag}; \
done;
-DEPENDABOT_PATH=".github/dependabot.yml"
-.PHONY: gendependabot
-gendependabot:
- cd cmd/githubgen && $(GOCMD) install .
- githubgen -dependabot
-
-
# Define a delegation target for each module
.PHONY: $(ALL_MODS)
$(ALL_MODS):
@echo "Running target '$(TARGET)' in module '$@' as part of group '$(GROUP)'"
- $(MAKE) -C $@ $(TARGET)
+ $(MAKE) --no-print-directory -C $@ $(TARGET)
# Trigger each module's delegation target
.PHONY: for-all-target
@@ -174,12 +181,24 @@ for-receiver-0-target: $(RECEIVER_MODS_0)
.PHONY: for-receiver-1-target
for-receiver-1-target: $(RECEIVER_MODS_1)
+.PHONY: for-receiver-2-target
+for-receiver-2-target: $(RECEIVER_MODS_2)
+
+.PHONY: for-receiver-3-target
+for-receiver-3-target: $(RECEIVER_MODS_3)
+
.PHONY: for-processor-target
for-processor-target: $(PROCESSOR_MODS)
.PHONY: for-exporter-target
for-exporter-target: $(EXPORTER_MODS)
+.PHONY: for-exporter-0-target
+for-exporter-0-target: $(EXPORTER_MODS_0)
+
+.PHONY: for-exporter-1-target
+for-exporter-1-target: $(EXPORTER_MODS_1)
+
.PHONY: for-extension-target
for-extension-target: $(EXTENSION_MODS)
@@ -195,6 +214,12 @@ for-pkg-target: $(PKG_MODS)
.PHONY: for-cmd-target
for-cmd-target: $(CMD_MODS)
+.PHONY: for-cmd-0-target
+for-cmd-0-target: $(CMD_MODS_0)
+
+.PHONY: for-cmd-1-target
+for-cmd-1-target: $(CMD_MODS_1)
+
.PHONY: for-override-target
for-override-target: $(OVERRIDE_MODS)
@@ -232,24 +257,28 @@ docker-otelcontribcol:
.PHONY: docker-telemetrygen
docker-telemetrygen:
- COMPONENT=telemetrygen $(MAKE) docker-component
+ GOOS=linux GOARCH=$(GOARCH) $(MAKE) telemetrygen
+ cp bin/telemetrygen_* cmd/telemetrygen/
+ cd cmd/telemetrygen && docker build --platform linux/$(GOARCH) -t telemetrygen:latest .
+ rm cmd/telemetrygen/telemetrygen_*
.PHONY: generate
-generate:
- cd cmd/mdatagen && $(GOCMD) install .
+generate: install-tools
+ cd ./internal/tools && go install go.opentelemetry.io/collector/cmd/mdatagen
$(MAKE) for-all CMD="$(GOCMD) generate ./..."
-.PHONY: mdatagen-test
-mdatagen-test:
- cd cmd/mdatagen && $(GOCMD) install .
- cd cmd/mdatagen && $(GOCMD) generate ./...
- cd cmd/mdatagen && $(GOCMD) test ./...
+.PHONY: githubgen-install
+githubgen-install:
+ cd cmd/githubgen && $(GOCMD) install .
.PHONY: gengithub
-gengithub:
- cd cmd/githubgen && $(GOCMD) install .
+gengithub: githubgen-install
githubgen
+.PHONY: gendistributions
+gendistributions: githubgen-install
+ githubgen distributions
+
.PHONY: update-codeowners
update-codeowners: gengithub generate
@@ -289,7 +318,7 @@ chlog-update-aws: $(CHLOGGEN)
.PHONY: genotelcontribcol
genotelcontribcol: $(BUILDER)
$(BUILDER) --skip-compilation --config cmd/otelcontribcol/builder-config.yaml --output-path cmd/otelcontribcol
- $(MAKE) -C cmd/otelcontribcol fmt
+ $(MAKE) --no-print-directory -C cmd/otelcontribcol fmt
# Build the Collector executable.
.PHONY: otelcontribcol
@@ -300,7 +329,7 @@ otelcontribcol:
.PHONY: genoteltestbedcol
genoteltestbedcol: $(BUILDER)
$(BUILDER) --skip-compilation --config cmd/oteltestbedcol/builder-config.yaml --output-path cmd/oteltestbedcol
- $(MAKE) -C cmd/oteltestbedcol fmt
+ $(MAKE) --no-print-directory -C cmd/oteltestbedcol fmt
# Build the Collector executable, with only components used in testbed.
.PHONY: oteltestbedcol
@@ -314,14 +343,13 @@ telemetrygen:
cd ./cmd/telemetrygen && GO111MODULE=on CGO_ENABLED=0 $(GOCMD) build -trimpath -o ../../bin/telemetrygen_$(GOOS)_$(GOARCH)$(EXTENSION) \
-tags $(GO_BUILD_TAGS) .
-.PHONY: update-dep
-update-dep:
- $(MAKE) $(FOR_GROUP_TARGET) TARGET="updatedep"
- $(MAKE) otelcontribcol
-
.PHONY: update-otel
-update-otel:
- $(MAKE) update-dep MODULE=go.opentelemetry.io/collector VERSION=$(OTEL_VERSION) RC_VERSION=$(OTEL_RC_VERSION) STABLE_VERSION=$(OTEL_STABLE_VERSION)
+update-otel:$(MULTIMOD)
+ $(MULTIMOD) sync -s=true -o ../opentelemetry-collector -m stable --commit-hash $(OTEL_STABLE_VERSION)
+ git add . && git commit -s -m "[chore] multimod update stable modules"
+ $(MULTIMOD) sync -s=true -o ../opentelemetry-collector -m beta --commit-hash $(OTEL_VERSION)
+ git add . && git commit -s -m "[chore] multimod update beta modules"
+ $(MAKE) gotidy
.PHONY: otel-from-tree
otel-from-tree:
@@ -333,7 +361,7 @@ otel-from-tree:
# 2. Run `make otel-from-tree` (only need to run it once to remap go modules)
# 3. You can now build contrib and it will use your local otel core changes.
# 4. Before committing/pushing your contrib changes, undo by running `make otel-from-lib`.
- $(MAKE) for-all CMD="$(GOCMD) mod edit -replace go.opentelemetry.io/collector=$(SRC_ROOT)/../opentelemetry-collector"
+ $(MAKE) for-all CMD="$(GOCMD) mod edit -replace go.opentelemetry.io/collector=$(SRC_PARENT_DIR)/opentelemetry-collector"
.PHONY: otel-from-lib
otel-from-lib:
@@ -342,8 +370,9 @@ otel-from-lib:
.PHONY: build-examples
build-examples:
- docker-compose -f examples/demo/docker-compose.yaml build
- docker-compose -f exporter/splunkhecexporter/example/docker-compose.yml build
+ docker compose -f examples/demo/docker-compose.yaml build
+ cd examples/secure-tracing/certs && $(MAKE) clean && $(MAKE) all && docker compose -f ../docker-compose.yaml build
+ docker compose -f exporter/splunkhecexporter/example/docker-compose.yml build
.PHONY: deb-rpm-package
%-package: ARCH ?= amd64
@@ -426,10 +455,20 @@ genconfigdocs:
.PHONY: generate-gh-issue-templates
generate-gh-issue-templates:
- for FILE in bug_report feature_request other; do \
- YAML_FILE=".github/ISSUE_TEMPLATE/$${FILE}.yaml"; \
- TMP_FILE=".github/ISSUE_TEMPLATE/$${FILE}.yaml.tmp"; \
- cat "$${YAML_FILE}" > "$${TMP_FILE}"; \
- FILE="$${TMP_FILE}" ./.github/workflows/scripts/add-component-options.sh > "$${YAML_FILE}"; \
- rm "$${TMP_FILE}"; \
- done
+ cd cmd/githubgen && $(GOCMD) install .
+ githubgen issue-templates
+
+.PHONY: checks
+checks:
+ $(MAKE) checkdoc
+ $(MAKE) checkmetadata
+ $(MAKE) checkapi
+ $(MAKE) -j4 goporto
+ $(MAKE) crosslink
+ $(MAKE) -j4 gotidy
+ $(MAKE) genotelcontribcol
+ $(MAKE) genoteltestbedcol
+ $(MAKE) gendistributions
+ $(MAKE) -j4 generate
+ $(MAKE) multimod-verify
+ git diff --exit-code || (echo 'Some files need committing' && git status && exit 1)
diff --git a/Makefile.Common b/Makefile.Common
index 841e328c58cb..24acdf51aac5 100644
--- a/Makefile.Common
+++ b/Makefile.Common
@@ -20,16 +20,18 @@ endif
# SRC_ROOT is the top of the source tree.
SRC_ROOT := $(shell git rev-parse --show-toplevel)
+# SRC_PARENT_DIR is the absolute path of source tree's parent directory
+SRC_PARENT_DIR := $(shell dirname $(SRC_ROOT))
# build tags required by any component should be defined as an independent variables and later added to GO_BUILD_TAGS below
GO_BUILD_TAGS=""
-GOTEST_OPT?= -race -timeout 300s -parallel 4 --tags=$(GO_BUILD_TAGS)
+GOTEST_TIMEOUT?= 300s
+GOTEST_OPT?= -race -timeout $(GOTEST_TIMEOUT) -parallel 4 --tags=$(GO_BUILD_TAGS)
GOTEST_INTEGRATION_OPT?= -race -timeout 360s -parallel 4
GOTEST_OPT_WITH_COVERAGE = $(GOTEST_OPT) -coverprofile=coverage.txt -covermode=atomic
GOTEST_OPT_WITH_INTEGRATION=$(GOTEST_INTEGRATION_OPT) -tags=integration,$(GO_BUILD_TAGS) -run=Integration
GOTEST_OPT_WITH_INTEGRATION_COVERAGE=$(GOTEST_OPT_WITH_INTEGRATION) -coverprofile=integration-coverage.txt -covermode=atomic
GOCMD?= go
-GOTEST=$(GOCMD) test
GOOS=$(shell $(GOCMD) env GOOS)
GOARCH=$(shell $(GOCMD) env GOARCH)
@@ -68,6 +70,10 @@ CROSSLINK := $(TOOLS_BIN_DIR)/crosslink
GOJUNIT := $(TOOLS_BIN_DIR)/go-junit-report
BUILDER := $(TOOLS_BIN_DIR)/builder
GOVULNCHECK := $(TOOLS_BIN_DIR)/govulncheck
+GCI := $(TOOLS_BIN_DIR)/gci
+GOTESTSUM := $(TOOLS_BIN_DIR)/gotestsum
+
+GOTESTSUM_OPT?= --rerun-fails=1
# BUILD_TYPE should be one of (dev, release).
BUILD_TYPE?=release
@@ -79,14 +85,25 @@ ALL_SRC := $(shell find $(ALL_PKG_DIRS) -name '*.go' \
-not -path '*/local/*' \
-type f | sort)
+ALL_SRC_AND_SHELL := find . -type f \( -iname '*.go' -o -iname "*.sh" \) ! -path '**/third_party/*' | sort
+
# All source code and documents. Used in spell check.
-ALL_SRC_AND_DOC := $(shell find $(ALL_PKG_DIRS) -name "*.md" -o -name "*.go" -o -name "*.yaml" \
- -not -path '*/third_party/*' \
- -type f | sort)
+ALL_SRC_AND_DOC_CMD := find $(ALL_PKG_DIRS) -name "*.md" -o -name "*.go" -o -name "*.yaml" -not -path '*/third_party/*' -type f | sort
+ifeq ($(UNIX_SHELL_ON_WINDOWS),true)
+ # Windows has a low limit, 8192 chars, to create a process. Workaround it by breaking it in smaller commands.
+ MISSPELL_CMD := $(ALL_SRC_AND_DOC_CMD) | xargs -n 20 $(MISSPELL)
+ MISSPELL_CORRECTION_CMD := $(ALL_SRC_AND_DOC_CMD) | xargs -n 20 $(MISSPELL_CORRECTION)
+else
+ ALL_SRC_AND_DOC := $(shell $(ALL_SRC_AND_DOC_CMD))
+ MISSPELL_CMD := $(MISSPELL) $(ALL_SRC_AND_DOC)
+ MISSPELL_CORRECTION_CMD := $(MISSPELL_CORRECTION) $(ALL_SRC_AND_DOC)
+endif
# ALL_PKGS is used with 'go cover'
ALL_PKGS := $(shell $(GOCMD) list $(sort $(dir $(ALL_SRC))))
+ADDLICENSE_CMD := $(ADDLICENSE) -s=only -y "" -c "The OpenTelemetry Authors"
+
pwd:
@pwd
@@ -105,61 +122,66 @@ all-pkg-dirs:
common: lint test
.PHONY: test
-test:
- $(GOTEST) $(GOTEST_OPT) ./...
+test: $(GOTESTSUM)
+ $(GOTESTSUM) $(GOTESTSUM_OPT) --packages="./..." -- $(GOTEST_OPT)
.PHONY: test-with-cover
-test-with-cover:
+test-with-cover: $(GOTESTSUM)
mkdir -p $(PWD)/coverage/unit
- $(GOTEST) $(GOTEST_OPT) -cover ./... -covermode=atomic -args -test.gocoverdir="$(PWD)/coverage/unit"
+ $(GOTESTSUM) $(GOTESTSUM_OPT) --packages="./..." -- $(GOTEST_OPT) -cover -covermode=atomic -args -test.gocoverdir="$(PWD)/coverage/unit"
.PHONY: do-unit-tests-with-cover
-do-unit-tests-with-cover:
+do-unit-tests-with-cover: $(GOTESTSUM)
@echo "running $(GOCMD) unit test ./... + coverage in `pwd`"
- $(GOTEST) $(GOTEST_OPT_WITH_COVERAGE) ./...
+ $(GOTESTSUM) $(GOTESTSUM_OPT) --packages="./..." -- $(GOTEST_OPT_WITH_COVERAGE)
$(GOCMD) tool cover -html=coverage.txt -o coverage.html
.PHONY: mod-integration-test
-mod-integration-test:
+mod-integration-test: $(GOTESTSUM)
@echo "running $(GOCMD) integration test ./... in `pwd`"
- $(GOTEST) $(GOTEST_OPT_WITH_INTEGRATION) ./...
+ $(GOTESTSUM) $(GOTESTSUM_OPT) --packages="./..." -- $(GOTEST_OPT_WITH_INTEGRATION)
@if [ -e integration-coverage.txt ]; then \
$(GOCMD) tool cover -html=integration-coverage.txt -o integration-coverage.html; \
fi
.PHONY: do-integration-tests-with-cover
-do-integration-tests-with-cover:
+do-integration-tests-with-cover: $(GOTESTSUM)
@echo "running $(GOCMD) integration test ./... + coverage in `pwd`"
- $(GOTEST) $(GOTEST_OPT_WITH_INTEGRATION_COVERAGE) ./...
+ $(GOTESTSUM) $(GOTESTSUM_OPT) --packages="./..." -- $(GOTEST_OPT_WITH_INTEGRATION_COVERAGE)
@if [ -e integration-coverage.txt ]; then \
$(GOCMD) tool cover -html=integration-coverage.txt -o integration-coverage.html; \
fi
.PHONY: benchmark
-benchmark:
- $(GOTEST) -bench=. -run=notests --tags=$(GO_BUILD_TAGS) $(ALL_PKGS)
+benchmark: $(GOTESTSUM)
+ $(GOTESTSUM) $(GOTESTSUM_OPT) --packages="$(ALL_PKGS)" -- -bench=. -run=notests --tags=$(GO_BUILD_TAGS)
.PHONY: addlicense
addlicense: $(ADDLICENSE)
- @ADDLICENSEOUT=`$(ADDLICENSE) -s=only -y "" -c 'The OpenTelemetry Authors' $(ALL_SRC) 2>&1`; \
- if [ "$$ADDLICENSEOUT" ]; then \
- echo "$(ADDLICENSE) FAILED => add License errors:\n"; \
- echo "$$ADDLICENSEOUT\n"; \
- exit 1; \
- else \
- echo "Add License finished successfully"; \
- fi
+ @ADDLICENSEOUT=$$(for f in $$($(ALL_SRC_AND_SHELL)); do \
+ `$(ADDLICENSE_CMD) "$$f" 2>&1`; \
+ done); \
+ if [ "$$ADDLICENSEOUT" ]; then \
+ echo "$(ADDLICENSE) FAILED => add License errors:\n"; \
+ echo "$$ADDLICENSEOUT\n"; \
+ exit 1; \
+ else \
+ echo "Add License finished successfully"; \
+ fi
.PHONY: checklicense
checklicense: $(ADDLICENSE)
- @licRes=$$(for f in $$(find . -type f \( -iname '*.go' -o -iname '*.sh' \) ! -path '**/third_party/*') ; do \
- awk '/Copyright The OpenTelemetry Authors|generated|GENERATED/ && NR<=3 { found=1; next } END { if (!found) print FILENAME }' $$f; \
- awk '/SPDX-License-Identifier: Apache-2.0|generated|GENERATED/ && NR<=4 { found=1; next } END { if (!found) print FILENAME }' $$f; \
- done); \
- if [ -n "$${licRes}" ]; then \
- echo "license header checking failed:"; echo "$${licRes}"; \
- exit 1; \
- fi
+ @licRes=$$(for f in $$($(ALL_SRC_AND_SHELL)); do \
+ awk '/Copyright The OpenTelemetry Authors|generated|GENERATED/ && NR<=3 { found=1; next } END { if (!found) print FILENAME }' $$f; \
+ awk '/SPDX-License-Identifier: Apache-2.0|generated|GENERATED/ && NR<=4 { found=1; next } END { if (!found) print FILENAME }' $$f; \
+ $(ADDLICENSE_CMD) -check "$$f" 2>&1 || echo "$$f"; \
+ done); \
+ if [ -n "$${licRes}" ]; then \
+ echo "license header checking failed:"; echo "$${licRes}"; \
+ exit 1; \
+ else \
+ echo "Check License finished successfully"; \
+ fi
.PHONY: checklinks
checklinks:
@@ -183,22 +205,22 @@ govulncheck: $(GOVULNCHECK)
.PHONY: tidy
tidy:
rm -fr go.sum
- $(GOCMD) mod tidy -compat=1.20
+ $(GOCMD) mod tidy -compat=1.21
.PHONY: misspell
misspell: $(TOOLS_BIN_DIR)/misspell
@echo "running $(MISSPELL)"
- @$(MISSPELL) $(ALL_SRC_AND_DOC)
+ @$(MISSPELL_CMD)
.PHONY: misspell-correction
misspell-correction: $(TOOLS_BIN_DIR)/misspell
- $(MISSPELL_CORRECTION) $(ALL_SRC_AND_DOC)
+ $(MISSPELL_CORRECTION_CMD)
.PHONY: moddownload
moddownload:
$(GOCMD) mod download
-.PHONY: updatedep
-updatedep:
- $(PWD)/internal/buildscripts/update-dep
- @$(MAKE) tidy
+.PHONY: gci
+gci: $(TOOLS_BIN_DIR)/gci
+ @echo "running $(GCI)"
+ @$(GCI) write -s standard -s default -s "prefix(github.com/open-telemetry/opentelemetry-collector-contrib)" $(ALL_SRC_AND_DOC)
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 000000000000..72a751368a46
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,27 @@
+receiver/hostmetricsreceiver/internal/scraper/processscraper/process.go contains code originating from gopsutil under internal/common/common.go.
+
+Copyright (c) 2014, WAKAYAMA Shirou
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification,
+are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the gopsutil authors nor the names of its contributors
+ may be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/README.md b/README.md
index 188169b53b40..13def08509dc 100644
--- a/README.md
+++ b/README.md
@@ -30,15 +30,10 @@
Vision
•
- Design
- •
Monitoring
•
- Performance
- •
Security
•
- Roadmap
@@ -75,10 +70,6 @@ See [CONTRIBUTING.md](CONTRIBUTING.md).
Triagers ([@open-telemetry/collector-contrib-triagers](https://github.com/orgs/open-telemetry/teams/collector-contrib-triagers))
- [Benedikt Bongartz](https://github.com/frzifus), Red Hat
-- [Bryan Aguilar](https://github.com/bryan-aguilar), AWS
-- [Curtis Robert](https://github.com/crobert-1), Splunk
-- [Gabriel Aszalos](https://github.com/gbbr), DataDog
-- [Goutham Veeramachaneni](https://github.com/gouthamve), Grafana
- [Jared Tan](https://github.com/JaredTan95), DaoCloud
- [Matt Wear](https://github.com/mwear), Lightstep
- [Murphy Chen](https://github.com/Frapschen), DaoCloud
@@ -87,14 +78,17 @@ Triagers ([@open-telemetry/collector-contrib-triagers](https://github.com/orgs/o
Emeritus Triagers:
- [Alolita Sharma](https://github.com/alolita), AWS
+- [Gabriel Aszalos](https://github.com/gbbr), DataDog
+- [Goutham Veeramachaneni](https://github.com/gouthamve), Grafana
- [Punya Biswal](https://github.com/punya), Google
- [Steve Flanders](https://github.com/flands), Splunk
Approvers ([@open-telemetry/collector-contrib-approvers](https://github.com/orgs/open-telemetry/teams/collector-contrib-approvers)):
-- [Andrzej Stencel](https://github.com/astencel-sumo), Sumo Logic
- [Anthony Mirabella](https://github.com/Aneurysm9), AWS
- [Antoine Toulme](https://github.com/atoulme), Splunk
+- [Bryan Aguilar](https://github.com/bryan-aguilar), AWS
+- [Curtis Robert](https://github.com/crobert-1), Splunk
- [David Ashpole](https://github.com/dashpole), Google
- [Yang Song](https://github.com/songy23), DataDog
- [Ziqi Zhao](https://github.com/fatsheep9146), Alibaba
@@ -106,7 +100,8 @@ Emeritus Approvers:
Maintainers ([@open-telemetry/collector-contrib-maintainer](https://github.com/orgs/open-telemetry/teams/collector-contrib-maintainer)):
-- [Alex Boten](https://github.com/codeboten), ServiceNow
+- [Alex Boten](https://github.com/codeboten), Honeycomb
+- [Andrzej Stencel](https://github.com/astencel-sumo), Sumo Logic
- [Bogdan Drutu](https://github.com/bogdandrutu), Snowflake
- [Daniel Jaglowski](https://github.com/djaglowski), observIQ
- [Dmitrii Anoshin](https://github.com/dmitryax), Splunk
@@ -127,7 +122,7 @@ Learn more about roles in the [community repository](https://github.com/open-tel
When creating a PR please follow the process [described
here](https://github.com/open-telemetry/opentelemetry-collector/blob/main/CONTRIBUTING.md#how-to-structure-prs-to-get-expedient-reviews).
-News PRs will be automatically associated with the reviewers based on
+New PRs will be automatically associated with the reviewers based on
[CODEOWNERS](.github/CODEOWNERS). PRs will be also automatically assigned to one of the
maintainers or approvers for facilitation.
diff --git a/cmd/checkapi/main.go b/cmd/checkapi/main.go
index 609d1fd55991..5e99e6237c36 100644
--- a/cmd/checkapi/main.go
+++ b/cmd/checkapi/main.go
@@ -47,10 +47,11 @@ func run(folder string, allowlistFilePath string) error {
}
allowlist := strings.Split(string(allowlistData), "\n")
var errs []error
- err = filepath.Walk(folder, func(path string, info fs.FileInfo, err error) error {
+ err = filepath.Walk(folder, func(path string, info fs.FileInfo, _ error) error {
if info.Name() == "go.mod" {
base := filepath.Dir(path)
- relativeBase, err := filepath.Rel(folder, base)
+ var relativeBase string
+ relativeBase, err = filepath.Rel(folder, base)
if err != nil {
return err
}
@@ -67,7 +68,7 @@ func run(folder string, allowlistFilePath string) error {
return nil
}
}
- if err := walkFolder(base, componentType); err != nil {
+ if err = walkFolder(base, componentType); err != nil {
errs = append(errs, err)
}
}
@@ -172,12 +173,13 @@ func walkFolder(folder string, componentType string) error {
return nil
}
+ if len(result.Functions) == 0 {
+ return nil
+ }
if len(result.Functions) > 1 {
return fmt.Errorf("%s has more than one function: %q", folder, strings.Join(fnNames, ","))
}
- if len(result.Functions) == 0 {
- return fmt.Errorf("%s has no functions defined", folder)
- }
+
newFactoryFn := result.Functions[0]
if newFactoryFn.Name != "NewFactory" {
return fmt.Errorf("%s does not define a NewFactory function", folder)
diff --git a/cmd/configschema/README.md b/cmd/configschema/README.md
index 6031b2d628fd..16b99d0f2a93 100644
--- a/cmd/configschema/README.md
+++ b/cmd/configschema/README.md
@@ -1,3 +1,6 @@
+> Deprecated: [v0.92.0] This tool is deprecated and will be removed in a future release.
+> See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
+
# ConfigSchema API
This package contains an API that can be used to introspect the configuration
diff --git a/cmd/configschema/cfgmetadatagen/cfgmetadatagen/README.md b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/README.md
index 5886f1b84193..c3bc43745f84 100644
--- a/cmd/configschema/cfgmetadatagen/cfgmetadatagen/README.md
+++ b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/README.md
@@ -1,3 +1,6 @@
+> Deprecated: [v0.92.0] This tool is deprecated and will be removed in a future release.
+> See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
+
# Config Metadata YAML Generator (alpha)
This CLI application creates a configuration metadata YAML file for each
diff --git a/cmd/configschema/cfgmetadatagen/cfgmetadatagen/cli.go b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/cli.go
index 6fc9a20a09b1..bf4142954d83 100644
--- a/cmd/configschema/cfgmetadatagen/cfgmetadatagen/cli.go
+++ b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/cli.go
@@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
package cfgmetadatagen
import (
@@ -15,6 +17,8 @@ import (
// GenerateFiles is the entry point for cfgmetadatagen. Component factories are
// passed in so it can be used by other distros.
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
func GenerateFiles(factories otelcol.Factories, sourceDir string, outputDir string) error {
dr := configschema.NewDirResolver(sourceDir, configschema.DefaultModule)
writer := newMetadataFileWriter(outputDir)
@@ -31,7 +35,7 @@ func GenerateFiles(factories otelcol.Factories, sourceDir string, outputDir stri
func writeComponentYAML(yw metadataWriter, cfg configschema.CfgInfo, dr configschema.DirResolver) error {
fields, err := configschema.ReadFields(reflect.ValueOf(cfg.CfgInstance), dr)
if err != nil {
- return fmt.Errorf("error reading fields for component: %w", err)
+ return fmt.Errorf("error reading fields for component %v/%v: %w", cfg.Group, cfg.Type, err)
}
yamlBytes, err := yaml.Marshal(fields)
if err != nil {
diff --git a/cmd/configschema/cfgmetadatagen/cfgmetadatagen/metadata_writer_test.go b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/metadata_writer_test.go
index 9350d1646459..cac82e295124 100644
--- a/cmd/configschema/cfgmetadatagen/cfgmetadatagen/metadata_writer_test.go
+++ b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/metadata_writer_test.go
@@ -14,6 +14,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/configschema"
)
@@ -21,7 +22,7 @@ import (
func TestMetadataFileWriter(t *testing.T) {
tempDir := t.TempDir()
w := newMetadataFileWriter(tempDir)
- err := w.write(configschema.CfgInfo{Group: "mygroup", Type: "mytype"}, []byte("hello"))
+ err := w.write(configschema.CfgInfo{Group: "mygroup", Type: component.MustNewType("mytype")}, []byte("hello"))
require.NoError(t, err)
file, err := os.Open(filepath.Join(tempDir, "mygroup", "mytype.yaml"))
require.NoError(t, err)
diff --git a/cmd/configschema/cfgmetadatagen/cfgmetadatagen/package_test.go b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/package_test.go
new file mode 100644
index 000000000000..98e6dc536115
--- /dev/null
+++ b/cmd/configschema/cfgmetadatagen/cfgmetadatagen/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package cfgmetadatagen
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/cmd/configschema/cfgmetadatagen/main.go b/cmd/configschema/cfgmetadatagen/main.go
index 3efc76ed03d5..e461b4fe7b05 100644
--- a/cmd/configschema/cfgmetadatagen/main.go
+++ b/cmd/configschema/cfgmetadatagen/main.go
@@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
package main
import (
@@ -14,6 +16,7 @@ import (
)
func main() {
+
sourceDir, outputDir := getFlags()
c, err := components.Components()
if err != nil {
diff --git a/cmd/configschema/comments.go b/cmd/configschema/comments.go
index c42da8a3338b..90362a688f6d 100644
--- a/cmd/configschema/comments.go
+++ b/cmd/configschema/comments.go
@@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
package configschema // import "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/configschema"
import (
@@ -28,7 +30,7 @@ func commentsForStruct(v reflect.Value, dr DirResolver) (map[string]string, erro
func searchDirsForComments(packageDir, typeName string) (map[string]string, error) {
out := map[string]string{}
- err := filepath.WalkDir(packageDir, func(path string, d fs.DirEntry, err error) error {
+ err := filepath.WalkDir(packageDir, func(path string, d fs.DirEntry, _ error) error {
if d.IsDir() {
commentsForStructName(out, path, typeName)
}
diff --git a/cmd/configschema/comments_test.go b/cmd/configschema/comments_test.go
index 798ad94d935e..2d906a3d3968 100644
--- a/cmd/configschema/comments_test.go
+++ b/cmd/configschema/comments_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package configschema
import (
@@ -39,7 +35,7 @@ func TestExternalType(t *testing.T) {
}
func TestSubPackage(t *testing.T) {
- s := configtls.TLSClientSetting{}
+ s := configtls.ClientConfig{}
v := reflect.ValueOf(s)
_, err := commentsForStruct(v, testDR())
require.NoError(t, err)
diff --git a/cmd/configschema/common_test.go b/cmd/configschema/common_test.go
index d8a9c2c081ed..3287e534ea3c 100644
--- a/cmd/configschema/common_test.go
+++ b/cmd/configschema/common_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package configschema
import (
@@ -26,13 +22,13 @@ type testStruct struct {
Four bool `mapstructure:"four"`
// embedded, package qualified comment
time.Duration `mapstructure:"duration"`
- Squashed testPerson `mapstructure:",squash"`
- PersonPtr *testPerson `mapstructure:"person_ptr"`
- PersonStruct testPerson `mapstructure:"person_struct"`
- Persons []testPerson `mapstructure:"persons"`
- PersonPtrs []*testPerson `mapstructure:"person_ptrs"`
- Ignored string `mapstructure:"-"`
- TLS configtls.TLSClientSetting `mapstructure:"tls"`
+ Squashed testPerson `mapstructure:",squash"`
+ PersonPtr *testPerson `mapstructure:"person_ptr"`
+ PersonStruct testPerson `mapstructure:"person_struct"`
+ Persons []testPerson `mapstructure:"persons"`
+ PersonPtrs []*testPerson `mapstructure:"person_ptrs"`
+ Ignored string `mapstructure:"-"`
+ TLS configtls.ClientConfig `mapstructure:"tls"`
}
func testDR() DirResolver {
diff --git a/cmd/configschema/configs.go b/cmd/configschema/configs.go
index 62bd9f00a87a..cb5caad802e4 100644
--- a/cmd/configschema/configs.go
+++ b/cmd/configschema/configs.go
@@ -81,7 +81,10 @@ func GetAllCfgInfos(components otelcol.Factories) []CfgInfo {
// config for the component specified by the passed-in componentType and
// componentName.
func GetCfgInfo(components otelcol.Factories, componentType, componentName string) (CfgInfo, error) {
- t := component.Type(componentName)
+ t, err := component.NewType(componentName)
+ if err != nil {
+ return CfgInfo{}, fmt.Errorf("failed to build component.Type: %w", err)
+ }
switch componentType {
case receiver:
f := components.Receivers[t]
@@ -113,6 +116,16 @@ func GetCfgInfo(components otelcol.Factories, componentType, componentName strin
Group: componentType,
CfgInstance: f.CreateDefaultConfig(),
}, nil
+ case connector:
+ f := components.Connectors[t]
+ if f == nil {
+ return CfgInfo{}, fmt.Errorf("unknown %s name %q", componentType, componentName)
+ }
+ return CfgInfo{
+ Type: f.Type(),
+ Group: componentType,
+ CfgInstance: f.CreateDefaultConfig(),
+ }, nil
case extension:
f := components.Extensions[t]
if f == nil {
diff --git a/cmd/configschema/configs_test.go b/cmd/configschema/configs_test.go
index 8c9c585b72ee..483cbde192c3 100644
--- a/cmd/configschema/configs_test.go
+++ b/cmd/configschema/configs_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package configschema
import (
diff --git a/cmd/configschema/docsgen/README.md b/cmd/configschema/docsgen/README.md
index 61365fb696e4..7b342699d92c 100644
--- a/cmd/configschema/docsgen/README.md
+++ b/cmd/configschema/docsgen/README.md
@@ -1,3 +1,6 @@
+> Deprecated: [v0.92.0] This tool is deprecated and will be removed in a future release.
+> See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
+
# Docsgen CLI Tool
This package contains a CLI tool that generates markdown files for collector
diff --git a/cmd/configschema/docsgen/docsgen/cli.go b/cmd/configschema/docsgen/docsgen/cli.go
index f50af0fe9d05..10b7a536e02f 100644
--- a/cmd/configschema/docsgen/docsgen/cli.go
+++ b/cmd/configschema/docsgen/docsgen/cli.go
@@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
package docsgen // import "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/configschema/docsgen/docsgen"
import (
@@ -23,6 +25,8 @@ const mdFileName = "config.md"
// CLI is the entrypoint for this package's functionality. It handles command-
// line arguments for the docsgen executable and produces config documentation
// for the specified components.
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
func CLI(factories otelcol.Factories, dr configschema.DirResolver) {
tableTmpl, err := tableTemplate()
if err != nil {
@@ -101,7 +105,7 @@ func writeConfigDoc(
panic(err)
}
- mdBytes := renderHeader(string(ci.Type), ci.Group, f.Doc)
+ mdBytes := renderHeader(ci.Type.String(), ci.Group, f.Doc)
f.Name = typeToName(f.Type)
diff --git a/cmd/configschema/docsgen/docsgen/cli_test.go b/cmd/configschema/docsgen/docsgen/cli_test.go
index 72774087a9b3..b47c5e65fa08 100644
--- a/cmd/configschema/docsgen/docsgen/cli_test.go
+++ b/cmd/configschema/docsgen/docsgen/cli_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package docsgen
import (
@@ -16,6 +12,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/otelcol"
"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/configschema"
@@ -33,10 +30,10 @@ func TestWriteConfigDoc(t *testing.T) {
dr,
configschema.CfgInfo{
Group: "receiver",
- Type: "redis",
+ Type: component.MustNewType("redis"),
CfgInstance: cfg,
},
- func(dir string, bytes []byte, perm os.FileMode) error {
+ func(dir string, _ []byte, _ os.FileMode) error {
outputFilename = dir
return nil
},
@@ -51,7 +48,7 @@ func TestHandleCLI_NoArgs(t *testing.T) {
defaultComponents(t),
configschema.NewDefaultDirResolver(),
testTemplate(t),
- func(filename string, data []byte, perm os.FileMode) error { return nil },
+ func(_ string, _ []byte, _ os.FileMode) error { return nil },
wr,
)
assert.Equal(t, 3, len(wr.lines))
diff --git a/cmd/configschema/docsgen/docsgen/package_test.go b/cmd/configschema/docsgen/docsgen/package_test.go
new file mode 100644
index 000000000000..b0e28474f911
--- /dev/null
+++ b/cmd/configschema/docsgen/docsgen/package_test.go
@@ -0,0 +1,31 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package docsgen
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The Ignore function calls prevent catching leaks generated by indirect dependencies.
+// All of these are leaks that we can't fix from within the collector code base.
+// Regarding the OpenCensus ignore: see https://github.com/census-instrumentation/opencensus-go/issues/1191
+// Regarding the DataDog ignore: see https://github.com/DataDog/datadog-agent/issues/22030
+// Regarding the database/sql ignore: see https://github.com/SAP/go-hdb/issues/130
+// Regarding the SAP/go-hdb ignore: see https://github.com/SAP/go-hdb/issues/131
+// Regarding the cihub/seelog ignore: see https://github.com/cihub/seelog/issues/182
+// Regarding the godbus/dbus ignore: see https://github.com/99designs/keyring/issues/135
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m,
+ goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"),
+ goleak.IgnoreTopFunction("github.com/DataDog/datadog-agent/pkg/trace/metrics/timing.(*Set).Autoreport.func1"),
+ // Unfortunately this ignore can't be anymore specific, even though it's caused by the SAP/go-hdb/driver
+ // package. There's no reference to this package in the goleak output. This has the potential of
+ // hiding future leaks, so we should remove as soon as the referenced issue is resolved.
+ goleak.IgnoreTopFunction("database/sql.(*DB).connectionOpener"),
+ goleak.IgnoreTopFunction("github.com/SAP/go-hdb/driver.(*metrics).collect"),
+ goleak.IgnoreAnyFunction("github.com/cihub/seelog.(*asyncLoopLogger).processQueue"),
+ goleak.IgnoreAnyFunction("github.com/godbus/dbus.(*Conn).inWorker"))
+}
diff --git a/cmd/configschema/docsgen/docsgen/template.go b/cmd/configschema/docsgen/docsgen/template.go
index 1c5d7a2a6359..4475c859161b 100644
--- a/cmd/configschema/docsgen/docsgen/template.go
+++ b/cmd/configschema/docsgen/docsgen/template.go
@@ -28,14 +28,14 @@ func join(s string) string {
return strings.ReplaceAll(s, "\n", " ")
}
-// mkAnchor takes a name and a type (e.g. "configtls.TLSClientSetting") and
+// mkAnchor takes a name and a type (e.g. "configtls.ClientConfig") and
// returns a string suitable for use as a markdown anchor.
func mkAnchor(name, typ string) string {
if isDuration(typ) {
return "time-Duration"
}
idx := strings.IndexRune(typ, '.')
- // strip "configtls." from e.g. "configtls.TLSClientSetting"
+ // strip "configtls." from e.g. "configtls.ClientConfig"
typeStripped := typ[idx+1:]
concat := fmt.Sprintf("%s-%s", name, typeStripped)
asterisksRemoved := strings.ReplaceAll(concat, "*", "")
diff --git a/cmd/configschema/docsgen/docsgen/template_test.go b/cmd/configschema/docsgen/docsgen/template_test.go
index 36ec2d75f74e..0f25a355eb21 100644
--- a/cmd/configschema/docsgen/docsgen/template_test.go
+++ b/cmd/configschema/docsgen/docsgen/template_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package docsgen
import (
diff --git a/cmd/configschema/docsgen/docsgen/testdata/otlp-receiver.json b/cmd/configschema/docsgen/docsgen/testdata/otlp-receiver.json
index 42e67df1fb06..b7d9f54fe147 100644
--- a/cmd/configschema/docsgen/docsgen/testdata/otlp-receiver.json
+++ b/cmd/configschema/docsgen/docsgen/testdata/otlp-receiver.json
@@ -14,7 +14,7 @@
"Fields": [
{
"Name": "grpc",
- "Type": "*configgrpc.GRPCServerSettings",
+ "Type": "*configgrpc.ServerConfig",
"Kind": "ptr",
"Default": null,
"Doc": "",
@@ -37,7 +37,7 @@
},
{
"Name": "tls_settings",
- "Type": "*configtls.TLSServerSetting",
+ "Type": "*configtls.ServerConfig",
"Kind": "ptr",
"Default": null,
"Doc": "Configures the protocol to use TLS.\nThe default value is nil, which will cause the protocol to not use TLS.\n",
@@ -261,7 +261,7 @@
},
{
"Name": "http",
- "Type": "*confighttp.HTTPServerSettings",
+ "Type": "*confighttp.ServerConfig",
"Kind": "ptr",
"Default": null,
"Doc": "",
@@ -276,7 +276,7 @@
},
{
"Name": "tls_settings",
- "Type": "*configtls.TLSServerSetting",
+ "Type": "*configtls.ServerConfig",
"Kind": "ptr",
"Default": null,
"Doc": "TLSSetting struct exposes TLS client configuration.\n",
diff --git a/cmd/configschema/docsgen/main.go b/cmd/configschema/docsgen/main.go
index 03eb1705523c..2d1495cccc84 100644
--- a/cmd/configschema/docsgen/main.go
+++ b/cmd/configschema/docsgen/main.go
@@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
package main
import (
diff --git a/cmd/configschema/fields_test.go b/cmd/configschema/fields_test.go
index 0964edb759d2..22d1a661a59e 100644
--- a/cmd/configschema/fields_test.go
+++ b/cmd/configschema/fields_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package configschema
import (
diff --git a/cmd/configschema/go.mod b/cmd/configschema/go.mod
index 022b733d53af..b54a1bee54b9 100644
--- a/cmd/configschema/go.mod
+++ b/cmd/configschema/go.mod
@@ -1,210 +1,213 @@
+// Deprecated: [v0.92.0] This package is deprecated and will be removed in a future release.
+// See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/30187
module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/configschema
-go 1.20
+go 1.22.0
+
+toolchain go1.22.2
require (
github.com/fatih/structtag v1.2.0
- github.com/google/uuid v1.4.0
- github.com/open-telemetry/opentelemetry-collector-contrib v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/otelcol v0.89.0
- go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0
- golang.org/x/mod v0.14.0
+ github.com/google/uuid v1.6.0
+ github.com/open-telemetry/opentelemetry-collector-contrib v0.0.0-00010101000000-000000000000
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ go.uber.org/goleak v1.3.0
+ golang.org/x/mod v0.17.0
golang.org/x/text v0.14.0
gopkg.in/yaml.v2 v2.4.0
)
require (
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.8.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 // indirect
- github.com/gocql/gocql v1.3.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 // indirect
+ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 // indirect
+ github.com/gocql/gocql v1.6.0 // indirect
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/containerinsight v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/k8s v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl 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/resourcetotelemetry v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/loki v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/skywalking v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/saphanareceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.89.0 // indirect
- github.com/samber/lo v1.37.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/containerinsight v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/k8s v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/sqlquery v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/loki v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/skywalking v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/saphanareceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.98.0 // indirect
+ github.com/samber/lo v1.38.1 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
- go.opentelemetry.io/collector/exporter v0.89.0 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
+ go.opentelemetry.io/collector/exporter v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
)
require (
- bitbucket.org/atlassian/go-asap/v2 v2.6.0 // indirect
- cloud.google.com/go v0.110.10 // indirect
- cloud.google.com/go/compute v1.23.2 // indirect
+ bitbucket.org/atlassian/go-asap/v2 v2.8.0 // indirect
+ cloud.google.com/go v0.112.1 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- cloud.google.com/go/iam v1.1.4 // indirect
- cloud.google.com/go/logging v1.8.1 // indirect
- cloud.google.com/go/longrunning v0.5.3 // indirect
- cloud.google.com/go/monitoring v1.16.2 // indirect
- cloud.google.com/go/pubsub v1.33.0 // indirect
- cloud.google.com/go/spanner v1.51.0 // indirect
- cloud.google.com/go/trace v1.10.3 // indirect
+ cloud.google.com/go/iam v1.1.6 // indirect
+ cloud.google.com/go/logging v1.9.0 // indirect
+ cloud.google.com/go/longrunning v0.5.5 // indirect
+ cloud.google.com/go/monitoring v1.18.0 // indirect
+ cloud.google.com/go/pubsub v1.37.0 // indirect
+ cloud.google.com/go/spanner v1.60.0 // indirect
+ cloud.google.com/go/trace v1.10.5 // indirect
code.cloudfoundry.org/clock v1.0.0 // indirect
code.cloudfoundry.org/go-diodes v0.0.0-20211115184647-b584dd5df32c // indirect
code.cloudfoundry.org/go-loggregator v7.4.0+incompatible // indirect
code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78 // indirect
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
+ filippo.io/edwards25519 v1.1.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.2 // indirect
github.com/AthenZ/athenz v1.10.39 // indirect
github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect
- github.com/Azure/azure-event-hubs-go/v3 v3.6.1 // indirect
- github.com/Azure/azure-kusto-go v0.13.1 // indirect
+ github.com/Azure/azure-event-hubs-go/v3 v3.6.2 // indirect
+ github.com/Azure/azure-kusto-go v0.15.2 // indirect
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 // indirect
- github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect
- github.com/Azure/go-amqp v1.0.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 // indirect
+ github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe // indirect
+ github.com/Azure/go-amqp v1.0.5 // indirect
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
github.com/Azure/go-autorest/autorest v0.11.29 // indirect
github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect
@@ -213,183 +216,183 @@ require (
github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect
github.com/Azure/go-autorest/logger v0.2.1 // indirect
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
- github.com/ClickHouse/ch-go v0.58.2 // indirect
- github.com/ClickHouse/clickhouse-go/v2 v2.15.0 // indirect
- github.com/DataDog/agent-payload/v5 v5.0.89 // indirect
- github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-api-client-go/v2 v2.18.0 // indirect
- github.com/DataDog/datadog-go/v5 v5.1.1 // indirect
- github.com/DataDog/go-sqllexer v0.0.8 // indirect
+ github.com/ClickHouse/ch-go v0.61.5 // indirect
+ github.com/ClickHouse/clickhouse-go/v2 v2.23.0 // indirect
+ github.com/Code-Hex/go-generics-cache v1.3.1 // indirect
+ github.com/DataDog/agent-payload/v5 v5.0.111 // indirect
+ github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-api-client-go/v2 v2.24.0 // indirect
+ github.com/DataDog/datadog-go/v5 v5.5.0 // indirect
+ github.com/DataDog/go-sqllexer v0.0.9 // indirect
github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect
- github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 // indirect
- github.com/DataDog/sketches-go v1.4.3 // indirect
+ github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 // indirect
+ github.com/DataDog/sketches-go v1.4.4 // indirect
github.com/DataDog/zstd v1.5.2 // indirect
github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0 // indirect
- github.com/IBM/sarama v1.42.1 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 // indirect
+ github.com/IBM/sarama v1.43.1 // indirect
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/Microsoft/hcsshim v0.11.4 // indirect
+ github.com/Microsoft/hcsshim v0.12.0-rc.3 // indirect
github.com/ReneKroon/ttlcache/v2 v2.11.0 // indirect
- github.com/SAP/go-hdb v1.6.2 // indirect
- github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2 // indirect
+ github.com/SAP/go-hdb v1.8.12 // indirect
+ github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc // indirect
github.com/Showmax/go-fqdn v1.0.0 // indirect
github.com/aerospike/aerospike-client-go/v6 v6.13.0 // indirect
- github.com/alecthomas/participle/v2 v2.1.0 // indirect
- github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
- github.com/aliyun/aliyun-log-go-sdk v0.1.63 // indirect
- github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-00010101000000-000000000000 // indirect
- github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-00010101000000-000000000000 // indirect
- github.com/andybalholm/brotli v1.0.6 // indirect
- github.com/antonmedv/expr v1.15.3 // indirect
- github.com/apache/arrow/go/v12 v12.0.1 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect
+ github.com/aliyun/aliyun-log-go-sdk v0.1.72 // indirect
+ github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-20240419190856-2f880467f335 // indirect
+ github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-20240415183253-230331014d2c // indirect
+ github.com/andybalholm/brotli v1.1.0 // indirect
+ github.com/apache/arrow/go/v15 v15.0.0 // indirect
github.com/apache/pulsar-client-go v0.8.1 // indirect
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e // indirect
- github.com/apache/thrift v0.19.0 // indirect
+ github.com/apache/thrift v0.20.0 // indirect
github.com/ardielle/ardielle-go v1.5.2 // indirect
github.com/armon/go-metrics v0.4.1 // indirect
- github.com/aws/aws-sdk-go v1.47.10 // indirect
- github.com/aws/aws-sdk-go-v2 v1.22.2 // indirect
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 // indirect
- github.com/aws/aws-sdk-go-v2/config v1.24.0 // indirect
- github.com/aws/aws-sdk-go-v2/credentials v1.15.2 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 // indirect
+ github.com/aws/aws-sdk-go v1.51.17 // indirect
+ github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect
+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
+ github.com/aws/aws-sdk-go-v2/config v1.27.11 // indirect
+ github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.59 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 // indirect
- github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1 // indirect
+ github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4 // indirect
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 // indirect
- github.com/aws/smithy-go v1.16.0 // indirect
+ github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect
+ github.com/aws/smithy-go v1.20.2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
- github.com/caio/go-tdigest/v4 v4.0.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/checkpoint-restore/go-criu/v5 v5.3.0 // indirect
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
- github.com/cilium/ebpf v0.9.1 // indirect
+ github.com/cilium/ebpf v0.11.0 // indirect
github.com/cloudfoundry-incubator/uaago v0.0.0-20190307164349-8136b7bbe76e // indirect
- github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe // indirect
- github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 // indirect
- github.com/containerd/cgroups v1.1.0 // indirect
- github.com/containerd/cgroups/v3 v3.0.2 // indirect
+ github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa // indirect
+ github.com/containerd/cgroups/v3 v3.0.3 // indirect
github.com/containerd/console v1.0.3 // indirect
- github.com/containerd/containerd v1.7.7 // indirect
+ github.com/containerd/errdefs v0.1.0 // indirect
github.com/containerd/ttrpc v1.2.2 // indirect
- github.com/coreos/go-oidc v2.2.1+incompatible // indirect
+ github.com/coreos/go-oidc/v3 v3.10.0 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cskr/pubsub v1.0.2 // indirect
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
- github.com/denisenkom/go-mssqldb v0.12.2 // indirect
github.com/dennwc/varint v1.0.0 // indirect
github.com/devigned/tab v0.1.1 // indirect
- github.com/digitalocean/godo v1.104.1 // indirect
- github.com/docker/distribution v2.8.2+incompatible // indirect
- github.com/docker/docker v24.0.7+incompatible // indirect
- github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11 // indirect
+ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+ github.com/digitalocean/godo v1.109.0 // indirect
+ github.com/distribution/reference v0.5.0 // indirect
+ github.com/docker/docker v25.0.5+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
- github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
+ github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0 // indirect
- github.com/eapache/go-resiliency v1.4.0 // indirect
+ github.com/eapache/go-resiliency v1.6.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/go-elasticsearch/v7 v7.17.10 // indirect
github.com/elastic/go-structform v0.0.10 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
- github.com/envoyproxy/go-control-plane v0.11.1 // indirect
- github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect
+ github.com/envoyproxy/go-control-plane v0.12.0 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect
github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect
- github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 // indirect
+ github.com/expr-lang/expr v1.16.3 // indirect
+ github.com/facebook/time v0.0.0-20240109160331-d1456d1a6bac // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
- github.com/getsentry/sentry-go v0.25.0 // indirect
+ github.com/getsentry/sentry-go v0.27.0 // indirect
github.com/go-faster/city v1.0.1 // indirect
- github.com/go-faster/errors v0.6.1 // indirect
- github.com/go-kit/kit v0.12.0 // indirect
+ github.com/go-faster/errors v0.7.1 // indirect
+ github.com/go-jose/go-jose/v4 v4.0.1 // indirect
+ github.com/go-kit/kit v0.13.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-openapi/jsonpointer v0.20.0 // indirect
- github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.4 // indirect
- github.com/go-redis/redis/v7 v7.4.1 // indirect
- github.com/go-resty/resty/v2 v2.7.0 // indirect
- github.com/go-sql-driver/mysql v1.7.1 // indirect
+ github.com/go-openapi/jsonpointer v0.20.2 // indirect
+ github.com/go-openapi/jsonreference v0.20.4 // indirect
+ github.com/go-openapi/swag v0.22.9 // indirect
+ github.com/go-resty/resty/v2 v2.11.0 // indirect
+ github.com/go-sql-driver/mysql v1.8.1 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/go-zookeeper/zk v1.0.3 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
- github.com/gofrs/uuid v4.3.1+incompatible // indirect
+ github.com/gofrs/uuid v4.4.0+incompatible // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
- github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
- github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect
+ github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
+ github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
- github.com/google/cadvisor v0.48.1 // indirect
- github.com/google/flatbuffers v23.1.21+incompatible // indirect
+ github.com/google/cadvisor v0.49.0 // indirect
+ github.com/google/flatbuffers v23.5.26+incompatible // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
- github.com/googleapis/gax-go/v2 v2.12.0 // indirect
- github.com/gophercloud/gophercloud v1.7.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.3 // indirect
+ github.com/gophercloud/gophercloud v1.8.0 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
- github.com/gosnmp/gosnmp v1.35.0 // indirect
- github.com/grafana/loki/pkg/push v0.0.0-20230321110627-5c3d204ebf5d // indirect
+ github.com/gosnmp/gosnmp v1.37.0 // indirect
+ github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37 // indirect
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect
- github.com/grobie/gomemcache v0.0.0-20180201122607-1f779c573665 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
+ github.com/grobie/gomemcache v0.0.0-20230213081705-239240bbc445 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
- github.com/hashicorp/consul/api v1.25.1 // indirect
+ github.com/hashicorp/consul/api v1.28.2 // indirect
github.com/hashicorp/cronexpr v1.1.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
- github.com/hashicorp/go-hclog v1.5.0 // indirect
+ github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.4 // indirect
@@ -397,201 +400,209 @@ require (
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/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
- github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c // indirect
+ github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 // indirect
github.com/hashicorp/serf v0.10.1 // indirect
- github.com/hetznercloud/hcloud-go/v2 v2.4.0 // indirect
+ github.com/hetznercloud/hcloud-go/v2 v2.6.0 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 // indirect
+ github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 // indirect
github.com/influxdata/influxdb-observability/common v0.5.8 // indirect
github.com/influxdata/influxdb-observability/influx2otel v0.5.8 // indirect
github.com/influxdata/influxdb-observability/otel2influx v0.5.8 // indirect
github.com/influxdata/line-protocol/v2 v2.2.1 // indirect
- github.com/ionos-cloud/sdk-go/v6 v6.1.9 // indirect
+ github.com/ionos-cloud/sdk-go/v6 v6.1.11 // indirect
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
- github.com/jackc/pgconn v1.14.0 // indirect
+ github.com/jackc/pgconn v1.14.3 // indirect
github.com/jackc/pgio v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
- github.com/jackc/pgproto3/v2 v2.3.2 // indirect
+ github.com/jackc/pgproto3/v2 v2.3.3 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/pgtype v1.14.0 // indirect
- github.com/jackc/pgx/v4 v4.18.1 // indirect
- github.com/jaegertracing/jaeger v1.48.0 // indirect
+ github.com/jackc/pgx/v4 v4.18.3 // indirect
+ github.com/jaegertracing/jaeger v1.55.0 // indirect
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
github.com/jcmturner/gofork v1.7.6 // indirect
+ github.com/jcmturner/goidentity/v6 v6.0.1 // indirect
github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
- github.com/jellydator/ttlcache/v3 v3.1.0 // indirect
+ github.com/jellydator/ttlcache/v3 v3.2.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/karrick/godirwalk v1.17.0 // indirect
- github.com/klauspost/asmfmt v1.3.2 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
- github.com/klauspost/cpuid/v2 v2.2.3 // indirect
+ github.com/klauspost/compress v1.17.8 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.5 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect
github.com/kr/fs v0.1.0 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leodido/ragel-machinery v0.0.0-20190525184631-5f46317e436b // indirect
github.com/leoluk/perflib_exporter v0.2.1 // indirect
+ github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/lightstep/go-expohisto v1.0.0 // indirect
github.com/linkedin/goavro/v2 v2.9.8 // indirect
- github.com/linode/linodego v1.23.0 // indirect
- github.com/logicmonitor/lm-data-sdk-go v1.0.0 // indirect
+ github.com/linode/linodego v1.30.0 // indirect
+ github.com/logicmonitor/lm-data-sdk-go v1.3.0 // indirect
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
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-ieproxy v0.0.9 // indirect
+ github.com/mattn/go-ieproxy v0.0.11 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/mattn/go-sqlite3 v1.14.18 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
+ github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/microsoft/ApplicationInsights-Go v0.4.4 // indirect
- github.com/miekg/dns v1.1.56 // indirect
- github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect
- github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
+ github.com/microsoft/go-mssqldb v1.7.0 // indirect
+ github.com/miekg/dns v1.1.58 // indirect
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/hashstructure v1.1.0 // indirect
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
+ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/moby/sys/mountinfo v0.6.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/mongodb-forks/digest v1.0.5 // indirect
+ github.com/mongodb-forks/digest v1.1.0 // indirect
github.com/montanaflynn/stats v0.7.0 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/mrunalp/fileutils v0.5.1 // indirect
github.com/mtibben/percent v0.2.1 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
- github.com/nginxinc/nginx-prometheus-exporter v0.8.1-0.20201110005315-f5a5f8086c19 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/metrics v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/winperfcounters v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.89.0 // indirect
+ github.com/nginxinc/nginx-prometheus-exporter v0.11.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/metrics v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/winperfcounters v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.98.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/opencontainers/runc v1.1.12 // indirect
- github.com/opencontainers/runtime-spec v1.1.0-rc.3 // indirect
+ github.com/opencontainers/runtime-spec v1.1.0 // indirect
github.com/opencontainers/selinux v1.11.0 // indirect
+ github.com/opensearch-project/opensearch-go/v2 v2.3.0 // indirect
github.com/openshift/api v3.9.0+incompatible // indirect
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/openzipkin/zipkin-go v0.4.2 // indirect
github.com/outcaste-io/ristretto v0.2.1 // indirect
github.com/ovh/go-ovh v1.4.3 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
- github.com/paulmach/orb v0.10.0 // indirect
- github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+ github.com/paulmach/orb v0.11.1 // indirect
+ github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/philhofer/fwd v1.1.2 // indirect
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
- github.com/pierrec/lz4/v4 v4.1.18 // indirect
- github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
+ github.com/pierrec/lz4/v4 v4.1.21 // indirect
+ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
- github.com/pkg/sftp v1.13.5 // indirect
+ github.com/pkg/sftp v1.13.6 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
github.com/pquerna/cachecontrol v0.1.0 // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.52.2 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
- github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/prometheus v0.48.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
+ github.com/prometheus/procfs v0.13.0 // indirect
+ github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
- github.com/relvacode/iso8601 v1.3.0 // indirect
+ github.com/redis/go-redis/v9 v9.5.1 // indirect
+ github.com/relvacode/iso8601 v1.4.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21 // indirect
- github.com/scalyr/dataset-go v0.14.0 // indirect
+ github.com/sagikazarmark/locafero v0.4.0 // indirect
+ github.com/sagikazarmark/slog-shim v0.1.0 // indirect
+ github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 // indirect
+ github.com/scalyr/dataset-go v0.18.0 // indirect
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
github.com/segmentio/asm v1.2.0 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3 // indirect
- github.com/signalfx/sapm-proto v0.13.0 // indirect
- github.com/sijms/go-ora/v2 v2.7.20 // indirect
+ github.com/signalfx/sapm-proto v0.14.0 // indirect
+ github.com/sijms/go-ora/v2 v2.8.11 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/snowflakedb/gosnowflake v1.6.25 // indirect
+ github.com/snowflakedb/gosnowflake v1.9.0 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
+ github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
- github.com/spf13/afero v1.9.5 // indirect
- github.com/spf13/cast v1.5.1 // indirect
+ github.com/spf13/afero v1.11.0 // indirect
+ github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/cobra v1.8.0 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/spf13/viper v1.16.0 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
- github.com/subosito/gotenv v1.4.2 // indirect
+ github.com/spf13/viper v1.18.2 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
+ github.com/subosito/gotenv v1.6.0 // indirect
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
- github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.792 // indirect
- github.com/tg123/go-htpasswd v1.2.1 // indirect
+ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.896 // indirect
+ github.com/tg123/go-htpasswd v1.2.2 // indirect
github.com/tidwall/gjson v1.14.3 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
@@ -601,112 +612,117 @@ require (
github.com/tinylib/msgp v1.1.9 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
+ github.com/valyala/fastjson v1.6.4 // indirect
github.com/vincent-petithory/dataurl v1.0.0 // indirect
github.com/vishvananda/netlink v1.2.1-beta.2 // indirect
- github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect
- github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f // indirect
- github.com/vmware/govmomi v0.33.1 // indirect
+ github.com/vishvananda/netns v0.0.4 // indirect
+ github.com/vmware/go-vmware-nsxt v0.0.0-20230223012718-d31b8a1ca05e // indirect
+ github.com/vmware/govmomi v0.36.3 // indirect
github.com/vultr/govultr/v2 v2.17.2 // indirect
- github.com/wavefronthq/wavefront-sdk-go v0.15.0 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.1.2 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
github.com/zeebo/xxh3 v1.0.2 // indirect
- go.etcd.io/bbolt v1.3.8 // indirect
- go.mongodb.org/atlas v0.35.0 // indirect
- go.mongodb.org/mongo-driver v1.13.0 // indirect
+ go.etcd.io/bbolt v1.3.9 // indirect
+ go.mongodb.org/atlas v0.36.0 // indirect
+ go.mongodb.org/mongo-driver v1.14.0 // indirect
go.opencensus.io v0.24.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/configgrpc v0.89.0 // indirect
- go.opentelemetry.io/collector/config/confighttp 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/configtelemetry 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/connector v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/exporter/debugexporter v0.89.0 // indirect
- go.opentelemetry.io/collector/exporter/loggingexporter v0.89.0 // indirect
- go.opentelemetry.io/collector/exporter/otlpexporter v0.89.0 // indirect
- go.opentelemetry.io/collector/exporter/otlphttpexporter v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/extension/auth v0.89.0 // indirect
- go.opentelemetry.io/collector/extension/ballastextension v0.89.0 // indirect
- go.opentelemetry.io/collector/extension/zpagesextension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/processor v0.89.0 // indirect
- go.opentelemetry.io/collector/processor/batchprocessor v0.89.0 // indirect
- go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.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 v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confighttp v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/connector v0.98.0 // indirect
+ go.opentelemetry.io/collector/connector/forwardconnector v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/exporter/debugexporter v0.98.0 // indirect
+ go.opentelemetry.io/collector/exporter/loggingexporter v0.98.0 // indirect
+ go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0 // indirect
+ go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/ballastextension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata v1.5.0 // indirect
+ go.opentelemetry.io/collector/processor v0.98.0 // indirect
+ go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 // indirect
+ go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/contrib/zpages v0.50.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/trace v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/crypto v0.16.0 // indirect
- golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect
- golang.org/x/net v0.19.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sync v0.5.0 // indirect
- golang.org/x/sys v0.15.0 // indirect
- golang.org/x/term v0.15.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- golang.org/x/tools v0.16.0 // indirect
- golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/api v0.150.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/crypto v0.22.0 // indirect
+ golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/term v0.19.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.19.0 // indirect
+ golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/api v0.172.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.2 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
- gopkg.in/square/go-jose.v2 v2.5.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 // indirect
- k8s.io/api v0.28.4 // indirect
- k8s.io/apimachinery v0.28.4 // indirect
- k8s.io/client-go v0.28.4 // indirect
- k8s.io/klog v1.0.0 // indirect
- k8s.io/klog/v2 v2.100.1 // indirect
- k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
- k8s.io/kubelet v0.28.4 // indirect
- k8s.io/utils v0.0.0-20230711102312-30195339c3c7 // indirect
- sigs.k8s.io/controller-runtime v0.16.3 // indirect
+ k8s.io/api v0.30.0 // indirect
+ k8s.io/apimachinery v0.30.0 // indirect
+ k8s.io/client-go v0.30.0 // indirect
+ k8s.io/klog/v2 v2.120.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
+ k8s.io/kubelet v0.30.0 // indirect
+ k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect
+ sigs.k8s.io/controller-runtime v0.17.3 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
- sigs.k8s.io/yaml v1.3.0 // indirect
- skywalking.apache.org/repo/goapi v0.0.0-20231026090926-09378dd56587 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
+ sigs.k8s.io/yaml v1.4.0 // indirect
+ skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4 // indirect
)
// Replace references to modules that are in this repository with their relateive paths
@@ -776,8 +792,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynat
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter => ../../exporter/elasticsearchexporter
-replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter => ../../exporter/f5cloudexporter
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter => ../../exporter/fileexporter
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter => ../../exporter/googlecloudexporter
@@ -804,6 +818,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmo
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter => ../../exporter/opencensusexporter
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter => ../../exporter/opensearchexporter
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter => ../../exporter/prometheusexporter
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter => ../../exporter/prometheusremotewriteexporter
@@ -822,8 +838,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splun
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter => ../../exporter/sumologicexporter
-replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter => ../../exporter/tanzuobservabilityexporter
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter => ../../exporter/tencentcloudlogserviceexporter
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter => ../../exporter/zipkinexporter
@@ -840,8 +854,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/head
replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension => ../../extension/healthcheckextension
-replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder => ../../extension/httpforwarder
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension => ../../extension/oauth2clientauthextension
replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer => ../../extension/observer
@@ -858,8 +870,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/ppro
replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension => ../../extension/sigv4authextension
-replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr => ../../pkg/batchperresourceattr
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/winperfcounters => ../../pkg/winperfcounters
@@ -900,8 +910,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/attr
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor => ../../processor/cumulativetodeltaprocessor/
-replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogprocessor => ../../processor/datadogprocessor/
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor => ../../processor/deltatorateprocessor/
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor => ../../processor/filterprocessor
@@ -924,10 +932,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/reso
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor => ../../processor/routingprocessor/
-replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor => ../../processor/servicegraphprocessor/
-
-replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor => ../../processor/spanmetricsprocessor/
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor => ../../processor/spanprocessor/
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor => ../../processor/tailsamplingprocessor
@@ -1139,6 +1143,29 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden =>
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd => ../../internal/collectd
+replace (
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector => ../../connector/countconnector
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector => ../../connector/datadogconnector
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector => ../../connector/exceptionsconnector
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector => ../../connector/routingconnector
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector => ../../connector/servicegraphconnector
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector => ../../connector/spanmetricsconnector
+)
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/sqlquery => ../../internal/sqlquery
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage => ../../extension/storage/filestorage
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage => ../../extension/storage/dbstorage
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension => ../../extension/encoding/otlpencodingextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding => ../../extension/encoding
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector => ../../connector/grafanacloudconnector
+
replace github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware => ../../extension/awsmiddleware
replace github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws => ../../override/aws
diff --git a/cmd/configschema/go.sum b/cmd/configschema/go.sum
index adaa38f0c89a..b3b72924df0c 100644
--- a/cmd/configschema/go.sum
+++ b/cmd/configschema/go.sum
@@ -1,11 +1,10 @@
-bitbucket.org/atlassian/go-asap/v2 v2.6.0 h1:KiLw3IgbzFLqNxCrVZoKUDJKMxUGoOd+NEOYXGEBhJ0=
-bitbucket.org/atlassian/go-asap/v2 v2.6.0/go.mod h1:cuRgWb7eeGtsocKmqY2kPlMMlwpkeNh+QOIkjAMlUBc=
+bitbucket.org/atlassian/go-asap/v2 v2.8.0 h1:JL4jktrZT3H8GHkkeJ1RCdhJ5YcOyVccA/2TJ4ae3I0=
+bitbucket.org/atlassian/go-asap/v2 v2.8.0/go.mod h1:cuRgWb7eeGtsocKmqY2kPlMMlwpkeNh+QOIkjAMlUBc=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
@@ -18,49 +17,47 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
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.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
-cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
-cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
+cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM=
+cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute v1.23.2 h1:nWEMDhgbBkBJjfpVySqU4jgWdc22PLR0o4vEexZHers=
-cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
-cloud.google.com/go/iam v1.1.4 h1:K6n/GZHFTtEoKT5aUG3l9diPi0VduZNQ1PfdnpkkIFk=
-cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8=
-cloud.google.com/go/logging v1.8.1 h1:26skQWPeYhvIasWKm48+Eq7oUqdcdbwsCVwz5Ys0FvU=
-cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI=
-cloud.google.com/go/longrunning v0.5.3 h1:maKa7O9YTzmVzwdlRKr981U1Ys2auup6rpeMt8y3+RU=
-cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y=
-cloud.google.com/go/monitoring v1.16.2 h1:gx7BDZcoRqX5DfuJzw9LdhVjEkqCLmDXScdnrmIy9ik=
-cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc=
+cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=
+cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=
+cloud.google.com/go/logging v1.9.0 h1:iEIOXFO9EmSiTjDmfpbRjOxECO7R8C7b8IXUGOj7xZw=
+cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE=
+cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg=
+cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s=
+cloud.google.com/go/monitoring v1.18.0 h1:NfkDLQDG2UR3WYZVQE8kwSbUIEyIqJUPl+aOQdFH1T4=
+cloud.google.com/go/monitoring v1.18.0/go.mod h1:c92vVBCeq/OB4Ioyo+NbN2U7tlg5ZH41PZcdvfc+Lcg=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/pubsub v1.33.0 h1:6SPCPvWav64tj0sVX/+npCBKhUi/UjJehy9op/V3p2g=
-cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc=
-cloud.google.com/go/spanner v1.51.0 h1:l3exhhsVMKsx1E7Xd1QajYSvHmI1KZoWPW5tRxIIdvQ=
-cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0=
+cloud.google.com/go/pubsub v1.37.0 h1:0uEEfaB1VIJzabPpwpZf44zWAKAme3zwKKxHk7vJQxQ=
+cloud.google.com/go/pubsub v1.37.0/go.mod h1:YQOQr1uiUM092EXwKs56OPT650nwnawc+8/IjoUeGzQ=
+cloud.google.com/go/spanner v1.60.0 h1:O9kf49dfaDRzPpKJNChHUJ+Bao02WPedZb8ZPyi02lI=
+cloud.google.com/go/spanner v1.60.0/go.mod h1:D2bOAeT/dC6zsZhXRIxbdYa5nQEYU3wYM/1KN3eg7Fs=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
-cloud.google.com/go/trace v1.10.3 h1:yiQ2EdegdiZDPwNPoUqGYAMd0wNValT/NRsC1XGyBJ0=
-cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY=
+cloud.google.com/go/trace v1.10.5 h1:0pr4lIKJ5XZFYD9GtxXEWr0KkVeigc3wlGpZco0X1oA=
+cloud.google.com/go/trace v1.10.5/go.mod h1:9hjCV1nGBCtXbAE4YK7OqJ8pmPYSxPA0I67JwRd5s3M=
code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c/go.mod h1:QD9Lzhd/ux6eNQVUDVRJX/RKTigpewimNYBi7ivZKY8=
code.cloudfoundry.org/clock v1.0.0 h1:kFXWQM4bxYvdBw2X8BbBeXwQNgfoWv1vqAk2ZZyBN2o=
code.cloudfoundry.org/clock v1.0.0/go.mod h1:QD9Lzhd/ux6eNQVUDVRJX/RKTigpewimNYBi7ivZKY8=
@@ -70,10 +67,11 @@ code.cloudfoundry.org/go-loggregator v7.4.0+incompatible h1:KqZYloMQWM5Zg/BQKunO
code.cloudfoundry.org/go-loggregator v7.4.0+incompatible/go.mod h1:KPBTRqj+y738Nhf1+g4JHFaBU8j7dedirR5ETNHvMXU=
code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78 h1:mrZQaZmuDIPhSp6b96b+CRKC2uH44ifa5cjDV2epKis=
code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78/go.mod h1:tkZo8GtzBjySJ7USvxm4E36lNQw1D3xM6oKHGqdaAJ4=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU=
@@ -83,42 +81,47 @@ github.com/AthenZ/athenz v1.10.39 h1:mtwHTF/v62ewY2Z5KWhuZgVXftBej1/Tn80zx4DcawY
github.com/AthenZ/athenz v1.10.39/go.mod h1:3Tg8HLsiQZp81BJY58JBeU2BR6B/H4/0MQGfCwhHNEA=
github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I=
github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q=
-github.com/Azure/azure-event-hubs-go/v3 v3.6.1 h1:vSiMmn3tOwgiLyfnmhT5K6Of/3QWRLaaNZPI0hFvZyU=
-github.com/Azure/azure-event-hubs-go/v3 v3.6.1/go.mod h1:i2NByb9Pr2na7y8wi/XefEVKkuA2CDUjCNoWQJtTsGo=
-github.com/Azure/azure-kusto-go v0.13.1 h1:0w4CmUTROT8qbLbKq921PhCb7mIfRFWeDu4iJxrNEOM=
-github.com/Azure/azure-kusto-go v0.13.1/go.mod h1:AyWTO0r50y7rAkxkTveLtn80njNyXpJP5WADvoSZ/P4=
+github.com/Azure/azure-event-hubs-go/v3 v3.6.2 h1:7rNj1/iqS/i3mUKokA2n2eMYO72TB7lO7OmpbKoakKY=
+github.com/Azure/azure-event-hubs-go/v3 v3.6.2/go.mod h1:n+ocYr9j2JCLYqUqz9eI+lx/TEAtL/g6rZzyTFSuIpc=
+github.com/Azure/azure-kusto-go v0.15.2 h1:OlABJilic9TythSgWW6i8Fd0SgNTg0t9jBu6WVsaixM=
+github.com/Azure/azure-kusto-go v0.15.2/go.mod h1:9F2zvXH8B6eWzgI1S4k1ZXAIufnBZ1bv1cW1kB1n3D0=
github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0 h1:9kDVnTz3vbfweTqAUmk/a/pH5pWFCHtvRpHYC0G/dcA=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0/go.mod h1:3Ug6Qzto9anB6mGlEdgYMDF5zHQ+wwhEaYR4s17PHMw=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs=
-github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 h1:UPeCRD+XY7QlaGQte2EVI2iOcWvUYA2XY8w5T/8v0NQ=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1/go.mod h1:oGV6NlB0cvi1ZbYRR2UN44QHxWFyGk+iylgD0qaMXjA=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.8.0 h1:dKxKBzh+XIEoYNmx/c8HeiwghuRExXf61WmVotWESeA=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.8.0/go.mod h1:kzRLpzzlw6eBUXE7eBw3oqfmKR/kxaHOk4+h9sAe6Yo=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 h1:QM6sE5k2ZT/vI5BEe0r7mqjsUSnhVBFbOsVkEuaEfiA=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 h1:bWh0Z2rOEDfB/ywv/l0iHN1JgyazE6kW/aIA89+CEK0=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1/go.mod h1:Bzf34hhAE9NSxailk8xVeLEZbUjOXcC+GnU1mMKdhLw=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 h1:ECsQtyERDVz3NP3kvDOTLvbQhqWp/x9EsGKtb4ogUr8=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0/go.mod h1:s1tW/At+xHqjNFvWU4G0c0Qv33KOhvbGNj0RCTQDV8s=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8=
-github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY=
-github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4=
-github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo=
-github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8=
-github.com/Azure/go-amqp v1.0.2 h1:zHCHId+kKC7fO8IkwyZJnWMvtRXhYC0VJtD0GYkHc6M=
-github.com/Azure/go-amqp v1.0.2/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2 h1:FDif4R1+UUR+00q6wquyX90K7A8dN+R5E8GEadoP7sU=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2/go.mod h1:aiYBYui4BJ/BJCAIKs92XiPyQfTaBWqvHujDwKb6CBU=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0/go.mod h1:mLfWfj8v3jfWKsL9G4eoBoXVcsqcIUTapmdKy7uGOp0=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0 h1:Ds0KRF8ggpEGg4Vo42oX1cIt/IfOhHWJBikksZbVxeg=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0/go.mod h1:jj6P8ybImR+5topJ+eH6fgcemSFBmU6/6bFF8KkwuDI=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0 h1:AifHbc4mg0x9zW52WOpKbsHaDKuRhlI7TVl47thgQ70=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0/go.mod h1:T5RfihdXtBDxt1Ch2wobif3TvzTdumDy29kahv6AV9A=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI=
+github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 h1:YUUxeiOWgdAQE3pXt2H7QXzZs0q8UBjgRbl56qo8GYM=
+github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2/go.mod h1:dmXQgZuiSubAecswZE+Sm8jkvEa7kQgTPVRvwL/nd0E=
+github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe h1:HGuouUM1533rBXmMtR7qh5pYNSSjUZG90b/MgJAnb/A=
+github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8=
+github.com/Azure/go-amqp v1.0.5 h1:po5+ljlcNSU8xtapHTe8gIc8yHxCzC03E8afH2g1ftU=
+github.com/Azure/go-amqp v1.0.5/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
+github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
@@ -129,7 +132,9 @@ github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI
github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8=
github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c=
github.com/Azure/go-autorest/autorest/azure/auth v0.5.12 h1:wkAZRgT/pn8HhFyzfe9UnqOjJYqlembgCTi72Bm/xKk=
+github.com/Azure/go-autorest/autorest/azure/auth v0.5.12/go.mod h1:84w/uV8E37feW2NCJ08uT9VBfjfUHpgLVnG2InYD6cg=
github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U=
+github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw=
github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
@@ -144,89 +149,94 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/ClickHouse/ch-go v0.58.2 h1:jSm2szHbT9MCAB1rJ3WuCJqmGLi5UTjlNu+f530UTS0=
-github.com/ClickHouse/ch-go v0.58.2/go.mod h1:Ap/0bEmiLa14gYjCiRkYGbXvbe8vwdrfTYWhsuQ99aw=
-github.com/ClickHouse/clickhouse-go/v2 v2.15.0 h1:G0hTKyO8fXXR1bGnZ0DY3vTG01xYfOGW76zgjg5tmC4=
-github.com/ClickHouse/clickhouse-go/v2 v2.15.0/go.mod h1:kXt1SRq0PIRa6aKZD7TnFnY9PQKmc2b13sHtOYcK6cQ=
-github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
-github.com/DataDog/agent-payload/v5 v5.0.89 h1:uuLWf/exyNYBnheG9OH2dOWZpCJvaEHX3W9CAd8KarU=
-github.com/DataDog/agent-payload/v5 v5.0.89/go.mod h1:oQZi1VZp1e3QvlSUX4iphZCpJaFepUxWq0hNXxihKBM=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 h1:W6IVI3zWwoJGcFagJ/kwltFL1IIErBZzcBy994PQsQE=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1/go.mod h1:A4nLJvxlg6BO/8/zg81til9yT0uRPuXDFMAzDMpmgn4=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1 h1:zDhs0MnT72cZOxxbPjkGI00NMYgsydOanBX3GZHuS1I=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1/go.mod h1:HvK26YCxg6MfYvPJgpHC7nSjw6DTpNhd75Wlb0GAvis=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 h1:EywptZStgHbDWLScnHfaCj6QNb698DY68pCnPEQrsts=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1 h1:A1uj4IMFs4rWp5LRalsqqnoC1f7QuYuN/b6/L7k4KCc=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1/go.mod h1:Q84EzSKpY/HtasusZM4ZPuYqbPQEbmIcAGzd7tXUX1I=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 h1:iJSVz+YsndcMA/yYNih/qmuvwD1AR7IYX0cXXePpeys=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1/go.mod h1:JUOECuM5XcoxjEPs30C568vGBWtqScjnsC2KXY1OQ7Y=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 h1:NK2kcRdv/r0WycAlGD2JFSmOcNvazzilPvZzk3l105g=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1/go.mod h1:RMBDVajNx78CpFHnbat0aIGcwVQZp8s+smRlcJkvZGg=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 h1:SgaCKuX9e3O5eLRIr+zqW1dlIw/TP3RDKQZUa2FfF8c=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1/go.mod h1:eTXti9mx7qhkoi+Qg3mMmvVY5McghUUgsf4Hrk9zY8k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 h1:aCDYC/AkDS/EOm4GV1bFmiev6pTt+Qjj1yGBJv8U7+k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1/go.mod h1:EOGgNrSPskIxY3+KgCl+yEggMjrGqrA2oL5va+/p2jM=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0 h1:QkX1vY1JtvDeF6N6EarPrJMHlerVGdTvGQOUWqfeVDs=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0/go.mod h1:lHlfhsNQ2qZclvpVQTfrGowUDIdIzAao38A05f9EQpc=
+github.com/ClickHouse/ch-go v0.61.5 h1:zwR8QbYI0tsMiEcze/uIMK+Tz1D3XZXLdNrlaOpeEI4=
+github.com/ClickHouse/ch-go v0.61.5/go.mod h1:s1LJW/F/LcFs5HJnuogFMta50kKDO0lf9zzfrbl0RQg=
+github.com/ClickHouse/clickhouse-go/v2 v2.23.0 h1:srmRrkS0BR8gEut87u8jpcZ7geOob6nGj9ifrb+aKmg=
+github.com/ClickHouse/clickhouse-go/v2 v2.23.0/go.mod h1:tBhdF3f3RdP7sS59+oBAtTyhWpy0024ZxDMhgxra0QE=
+github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g=
+github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
+github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
+github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
+github.com/DataDog/agent-payload/v5 v5.0.111 h1:mM+4OBkXF9tjKV0VjwnNO5As9aKcNAEsagvKDSBaTyc=
+github.com/DataDog/agent-payload/v5 v5.0.111/go.mod h1:COngtbYYCncpIPiE5D93QlXDH/3VAKk10jDNwGHcMRE=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae h1:aVo1Uh2WQ8TvgbjqlbDvfP5AcUtnqXUUrc9pVP8MvKc=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:AVPQWekk3h9AOC7+plBlNB68Sy6UIGFoMMVUDeSoNoI=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae h1:b6lU79trCyadhkxhb51jXiqmZaHs1Z0fwWlWKFVCqJ4=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:s6zD4ZvPBta68SBCsCnnbn3VJzoQk5wNd0VJOpB84Ug=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae h1:/vfuF60+5qeGM62IDG1F6Asfa1VGAohiQVivRo9TWoo=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:JhAilx32dkIgoDkFXquCTfaWDsAOfe+vfBaxbiZoPI0=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae h1:B1E9jVLpw+Hrcv9ggzCridX3YMeUmZBE3zHghdwfTSc=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:1FTu8gSg8Pd8DVgRfxlcPN4F+d8K7A3lbMCT84FX44Y=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae h1:GL9JPEUyKDH2brURt09llrqWBmExCuqbHeWucezZ6sY=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:OnkC+HYj+NU9dmowWVtFpmnA4wVVibejbzID7TNm7jA=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae h1:sUEteYos3JjJJB1+A9inYJ3uzM18t9cygjSs0cik8x4=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:z4lpju3fhDa8JcbXxU0Bc6A6ci8xoQMuxDXbBdf4gHw=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae h1:qveAzof7ZZXvm93FL7h5mRM8B4q9w14g2fx6wcZt88k=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:HgJEYNmnFTKIuBhWxYe1coqmzoJXMxQTfK+4wIG5G1Q=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae h1:YZz6I8ym9P4MLytAdAJlafF3tgItgAGZrDqe4otbVUk=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:EVETfdJCkqy0YEvSpQd9LZdcYQ7vrUomCm+bQ6h3lc4=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0 h1:7G+eyezFM8gHq5dOHcrQcGVxrXnwPqX2yYHxsLiq3iM=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0/go.mod h1:QKOu6vscsh87fMY1lHfLEmNSunyXImj8BUaUWJXOehc=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
-github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5TltWcLMU=
-github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E=
-github.com/DataDog/go-sqllexer v0.0.8 h1:vfC8R9PhmJfeOKcFYAX9UOd890A3wu3KrjU9Kr7nM0E=
-github.com/DataDog/go-sqllexer v0.0.8/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
+github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU=
+github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
+github.com/DataDog/go-sqllexer v0.0.9 h1:Cx2Cu1S0hfj4coCCA8hzjM9+UNFRkcu1avIV//RU5Qw=
+github.com/DataDog/go-sqllexer v0.0.9/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I=
github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc h1:gtlKB6B50/UEuFm1LeMn0R5a+tubx69OecPqxfXJDmU=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc/go.mod h1:oyPC4jWHHjVVNjslDAKp8EqfQBaSmODjHt4HCX+C+9Q=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1 h1:16YkGLmeJH830m3dG0owtdSMXDkmTZdRd1EWZ1XIO6M=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1/go.mod h1:re1FCVuKWovntr4bODIUe+iYT2Al0gbS0WK726XLz7w=
-github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.8.1 h1:0GyngySyxePf1RozAdm8p51uxT/kDsxqhzWPZGNrqVg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 h1:ly/egks++IqejMVPcp0OWV1fcL+Nsq4EHF48AAQPKu4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1/go.mod h1:8jOAAH5PrNN6zICpu65M7mNPAeOQsW5Wk/sq80txutA=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1 h1:UizDxaGWPDNzR2orQTE9poYyP09B2OhlaeiY5vdr+EU=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1/go.mod h1:2043mFAA2cD68ilZ93/5zZfL9BxWwj8z9sleaw3rtiY=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 h1:TbZDzUrW8iahevDY5Xw+j1EfrX8XZdeg/M6UYBl9mxg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1/go.mod h1:nVIKiAwP/Zd8IFxeHhEAiirJRH1kOOoZ315HQeSEkng=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 h1:4cyzwoXrnjElTIlsFbpyXQkAJs3+6ly9HExOu9lrup4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1/go.mod h1:3AEt8/uCtbpzjPOPPxIBDcR1qcUq2hBbrkrdE/qNfb0=
-github.com/DataDog/sketches-go v1.4.3 h1:ZB9nijteJRFUQixkQfatCqASartGNfiolIlMiEv3u/w=
-github.com/DataDog/sketches-go v1.4.3/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee h1:tXibLZk3G6HncIFJKaNItsdzcrk4YqILNDZlXPTNt4k=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee/go.mod h1:nTot/Iy0kW16bXgXr6blEc8gFeAS7vTqYlhAxh+dbc0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 h1:PTIZJAsfnr2XLB3V3duL+mSbZvYV8G3XQ9e57KyOuOA=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4/go.mod h1:5yS6i90MEZS3NG+o7PrQQ8i7OaEMzwQvn4bCZ9h9Rao=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4 h1:B2R7Wh791uphpltmorbvvdKk0rJOhoExwM4NnE7hXTg=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4/go.mod h1:Tk2wwdBgWeSvDPtrGGyym8CdVWSuphiToGc/tRvFoNQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 h1:10TPqpTlIkmDPFWVIEZ4ZX3rWrCrx3rEoeoAooZr6LM=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 h1:dU9oPMbAr/wYMNdzhu0pxIhAJOn1Btj1T3ZSyY6RvY0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4/go.mod h1:ud/Xr5TWUopcaGHdkh9RN8lhnCAFa95X16Rb5mrkE18=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 h1:ZuYc5Ql/GSyAEMgpKkbQiHOtIHkEpYujITW1wIVFgLE=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4/go.mod h1:YSntkplFoUM1mepnPeJFsoblqD0Wdi+Avg1/d1upgZQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 h1:t/Zh8ztLDBOMRMiuVNFthWMMG5F4POgc5M6+Y3DTX9g=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4/go.mod h1:JfdBBDreQfbIN5FYrAtZV3VmQMXnf9o4tMbaMxWqe40=
+github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8=
+github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 h1:KeNholpO2xKjgaaSyd+DyQRrsQjhbSeS7qe4nEw8aQw=
github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962/go.mod h1:kC29dT1vFpj7py2OvG1khBdQpo3kInWP+6QipLbdngo=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0 h1:tk85AYGwOf6VNtoOQi8w/kVDi2vmPxp3/OU2FsUpdcA=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0/go.mod h1:Xx0VKh7GJ4si3rmElbh19Mejxz68ibWg/J30ZOMrqzU=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0 h1:jYuZ3VSmHtR/OE4ZNlhgaWefopMKh8kxHMITQ7hXB0s=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0/go.mod h1:b8EPYWl+yGWfPDP2P1slOiJkimNOQMD34szyZt1G0+s=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0 h1:Kim3EFONcbm78LF3B/EPFegmsKtFYBNcoJ89ubBPblw=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0/go.mod h1:wyhLy43DJk49NlzxNhoqF0ueRjS3oBMJc1bjTmyYxiQ=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0 h1:OEgjQy1rH4Fbn5IpuI9d0uhLl+j6DkDvh9Q2Ucd6GK8=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0/go.mod h1:EUfJ8lb3pjD8VasPPwqIvG2XVCE6DOT8tY5tcwbWA+A=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.45.0 h1:/BF7rO6PYcmFoyJrq6HA3LqQpFSQei9aNuO1fvV3OqU=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0 h1:o/Nf55GfyLwGDaHkVAkRGgBXeExce73L6N9w2PZTB3k=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0/go.mod h1:qkFPtMouQjW5ugdHIOthiTbweVHUTqbS0Qsu55KqXks=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 h1:PWcDbDjrcT/ZHLn4Bc/FuglaZZVPP8bWO/YRmJBbe38=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0/go.mod h1:XEK/YHYsi+Wk2Bk1+zi/he+gjRfDWtoIZEZwuwcYjhk=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0 h1:7jymiL7lvmjgG8hMfvZ6qqA39VuiGEmCmFLd0N0tMKY=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0/go.mod h1:w3gKj9vyvd9n8jh2jpOMVLGy87QqB/AxDek2CoRwpt0=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0 h1:kitScZTE4xINfkp7W3duwPe18Jp8OPjm14Ybxgjrp3E=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0/go.mod h1:r+z/vuDdIelQGGJHiVMvNPCW3NiRNpFaeA9OT4L/K/c=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 h1:xl4IRfBXPZxwu7dIza8n6wdX5zEJpi0boF5dX22MbYE=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0/go.mod h1:P69hhmQh4zwnU5iEdGVowFWg1DiP9x2KsCYBOIaP4us=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0 h1:vaXjFX09ygxNxAiHwByzPBVKltYFVZR8HN4U3TR4vn8=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0/go.mod h1:V28hx+cUCZC9e3qcqszMb+Sbt8cQZtHTiXOmyDzoDOg=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 h1:xlfPHZ5QFvHad9KmrVDoaPpJUT/XluwNDMNHn+k7z/s=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0/go.mod h1:mzI44HpPp75Z8/a1sJP1asdHdu7Wui7t10SZ9EEPPnM=
github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
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.42.1 h1:wugyWa15TDEHh2kvq2gAy1IHLjEjuYOYgXz/ruC/OSQ=
-github.com/IBM/sarama v1.42.1/go.mod h1:Xxho9HkHd4K/MDUo/T/sOqwtX/17D33++E9Wib6hUdQ=
+github.com/IBM/sarama v1.43.1 h1:Z5uz65Px7f4DhI/jQqEm/tV9t8aU+JUdTyW/K/fCXpA=
+github.com/IBM/sarama v1.43.1/go.mod h1:GG5q1RURtDNPz8xxJs3mgX6Ytak8Z9eLhAkJPObe2xE=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g=
-github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
+github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ=
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
-github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
+github.com/Microsoft/hcsshim v0.12.0-rc.3 h1:5GNGrobGs/sN/0nFO21W9k4lFn+iXXZAE8fCZbmdRak=
+github.com/Microsoft/hcsshim v0.12.0-rc.3/go.mod h1:WuNfcaYNaw+KpCEsZCIM6HCEmu0c5HfXpi+dDSmveP0=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/Netflix/go-env v0.0.0-20220526054621-78278af1949d h1:wvStE9wLpws31NiWUx+38wny1msZ/tm+eL5xmm4Y7So=
github.com/Netflix/go-env v0.0.0-20220526054621-78278af1949d/go.mod h1:9XMFaCeRyW7fC9XJOWQ+NdAv8VLG7ys7l3x4ozEGLUQ=
@@ -235,10 +245,11 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ReneKroon/ttlcache/v2 v2.11.0 h1:OvlcYFYi941SBN3v9dsDcC2N8vRxyHcCmJb3Vl4QMoM=
github.com/ReneKroon/ttlcache/v2 v2.11.0/go.mod h1:mBxvsNY+BT8qLLd6CuAJubbKo6r0jh3nb5et22bbfGY=
-github.com/SAP/go-hdb v1.6.2 h1:sC0OjTEfPnycIktkCDvS7GelaGOiRrhWE0GWUt05QP8=
-github.com/SAP/go-hdb v1.6.2/go.mod h1:xXsEywFErhpCuRVQ3HfjI7H7fPLYPMnMTWa9D5Enx0Q=
-github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2 h1:koK7z0nSsRiRiBWwa+E714Puh+DO+ZRdIyAXiXzL+lg=
+github.com/SAP/go-hdb v1.8.12 h1:F/bpSlPZG0CvVWlTxxiEHGnynA8uILCPoIRoG+iMmkE=
+github.com/SAP/go-hdb v1.8.12/go.mod h1:SNF6129HdtfK0ve8LQIeHEYwNu5CCJr7vXmhA4UbkNw=
github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA=
+github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc h1:MhBvG7RLaLqlyjxMR6of35vt6MVQ+eXMcgn9X/sy0FE=
+github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/Showmax/go-fqdn v1.0.0 h1:0rG5IbmVliNT5O19Mfuvna9LL7zlHyRfsSvBPZmF9tM=
@@ -250,16 +261,18 @@ github.com/aerospike/aerospike-client-go/v6 v6.13.0/go.mod h1:2Syy0n4FKdgJxn0ZCf
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
-github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4=
-github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo=
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ=
@@ -287,24 +300,23 @@ github.com/alibabacloud-go/tea-utils/v2 v2.0.1 h1:K6kwgo+UiYx+/kr6CO0PN5ACZDzE3n
github.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M=
github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
-github.com/aliyun/aliyun-log-go-sdk v0.1.63 h1:XeKeHgQS0Aoo6BtzF7vB/PlhzqK1/xuPdLr7mLMOp9Y=
-github.com/aliyun/aliyun-log-go-sdk v0.1.63/go.mod h1:FSKcIjukUy+LeUKhRk13PCO+9gPMTfGsYhFBHQbDqmM=
+github.com/aliyun/aliyun-log-go-sdk v0.1.72 h1:8Gvg3ydMG4bbF7DkTb4m3odd5BRFXo0LmhNBv/xg7Mo=
+github.com/aliyun/aliyun-log-go-sdk v0.1.72/go.mod h1:FSKcIjukUy+LeUKhRk13PCO+9gPMTfGsYhFBHQbDqmM=
github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY=
github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
-github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI=
-github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
+github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/antonmedv/expr v1.15.3 h1:q3hOJZNvLvhqE8OHBs1cFRdbXFNKuA+bHmRaI+AmRmI=
-github.com/antonmedv/expr v1.15.3/go.mod h1:0E/6TxnOlRNp81GMzX9QfDPAmHo2Phg00y4JUv1ihsE=
-github.com/apache/arrow/go/v12 v12.0.1 h1:JsR2+hzYYjgSUkBSaahpqCetqZMr76djX80fF/DiJbg=
-github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw=
+github.com/apache/arrow/go/v15 v15.0.0 h1:1zZACWf85oEZY5/kd9dsQS7i+2G5zVQcbKTHgslqHNA=
+github.com/apache/arrow/go/v15 v15.0.0/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA=
github.com/apache/pulsar-client-go v0.8.1 h1:UZINLbH3I5YtNzqkju7g9vrl4CKrEgYSx2rbpvGufrE=
github.com/apache/pulsar-client-go v0.8.1/go.mod h1:yJNcvn/IurarFDxwmoZvb2Ieylg630ifxeO/iXpk27I=
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e h1:EqiJ0Xil8NmcXyupNqXV9oYDBeWntEIegxLahrTr8DY=
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e/go.mod h1:Xee4tgYLFpYcPMcTfBYWE1uKRzeciodGTSEDMzsR6i8=
-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/apache/thrift v0.20.0 h1:631+KvYbsBZxmuJjYwhezVsrfc/TbqtZV4QcxOX1fOI=
+github.com/apache/thrift v0.20.0/go.mod h1:hOk1BQqcp2OLzGsyVXdfMk7YFlMxK3aoEVhjD06QhB8=
github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ=
+github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
github.com/ardielle/ardielle-go v1.5.2 h1:TilHTpHIQJ27R1Tl/iITBzMwiUGSlVfiVhwDNGM3Zj4=
github.com/ardielle/ardielle-go v1.5.2/go.mod h1:I4hy1n795cUhaVt/ojz83SNVCYIGsAFAONtv2Dr7HUI=
github.com/ardielle/ardielle-tools v1.5.4/go.mod h1:oZN+JRMnqGiIhrzkRN9l26Cej9dEx4jeNG6A+AdkShk=
@@ -319,76 +331,94 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l
github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
-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/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
+github.com/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
github.com/aws/aws-sdk-go-v2 v1.17.7/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
+github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
-github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
-github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
+github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=
+github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10/go.mod h1:VeTZetY5KRJLuD/7fkQXMU6Mw7H5m/KP2J5Iy9osMno=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 h1:hHgLiIrTRtddC0AKcJr5s7i/hLgcpTt+q/FKxf1Zayk=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0/go.mod h1:w4I/v3NOWgD+qvs1NPEwhd++1h3XPHFaVxasfY6HlYQ=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
github.com/aws/aws-sdk-go-v2/config v1.18.19/go.mod h1:XvTmGMY8d52ougvakOv1RpiTLPz9dlG/OQHsKU/cMmY=
-github.com/aws/aws-sdk-go-v2/config v1.24.0 h1:4LEk29JO3w+y9dEo/5Tq5QTP7uIEw+KQrKiHOs4xlu4=
-github.com/aws/aws-sdk-go-v2/config v1.24.0/go.mod h1:11nNDAuK86kOUHeuEQo8f3CkcV5xuUxvPwFjTZE/PnQ=
+github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4=
+github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=
+github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
github.com/aws/aws-sdk-go-v2/credentials v1.13.18/go.mod h1:vnwlwjIe+3XJPBYKu1et30ZPABG3VaXJYr8ryohpIyM=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2 h1:rKH7khRMxPdD0u3dHecd0Q7NOVw3EUe7AqdkUOkiOGI=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2/go.mod h1:tXM8wmaeAhfC7nZoCxb0FzM/aRaB1m1WQ7x0qlBLq80=
+github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1/go.mod h1:lfUx8puBRdM5lVVMQlwt2v+ofiG/X6Ms+dy0UkG/kXw=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 h1:G5KawTAkyHH6WyKQCdHiW4h3PmAXNJpOgwKg3H7sDRE=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3/go.mod h1:hugKmSFnZB+HgNI1sYGT14BUPZkO6alC/e0AWu+0IAQ=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.59 h1:E3Y+OfzOK1+rmRo/K2G0ml8Vs+Xqk0kOnf4nS0kUtBc=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.59/go.mod h1:1M4PLSBUVfBI0aP+C9XI7SM6kZPCGYyI6izWz0TGprE=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31/go.mod h1:QT0BqUvX1Bh2ABdTGnjqEjvjzrCfIniM9Sc8zn9Yndo=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 h1:AaQsr5vvGR7rmeSWBtTCcw16tT9r51mWijuCQhzLnq8=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2/go.mod h1:o1IiRn7CWocIFTXJjGKJDOwxv1ibL53NpcvcqGWyRBA=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25/go.mod h1:zBHOPwhBc3FlQjQJE/D3IfPWiWaQmT06Vq9aNukDo0k=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 h1:UZx8SXZ0YtzRiALzYAWcjb9Y9hZUR7MBKaBQ5ouOjPs=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2/go.mod h1:ipuRpcSaklmxR6C39G187TpBAO132gUfleTGccUPs8c=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32/go.mod h1:XGhIBZDEgfqmFIugclZ6FU7v75nHhBDtzuB4xB/tEi4=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 h1:usgqiJtamuGIBj+OvYmMq89+Z1hIKkMJToz1WpoeNUY=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.23/go.mod h1:uIiFgURZbACBEQJfqTZPb/jxO7R+9LeoHUFudtIdeQI=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 h1:6lJvvkQ9HmbHZ4h/IEwclwv2mrTW8Uq1SOB/kXy0mfw=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo=
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11/go.mod h1:iV4q2hsqtNECrfmlXyord9u4zyuFEJX9eLgLpSPzWA8=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 h1:m0QTSI6pZYJTk5WSKx3fm5cNW/DCicVzULBgU/6IyD0=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.26/go.mod h1:2UqAAwMUXKeRkAHIlDJqvMVgOWkUi/AUXPk/YIe+Dg4=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 h1:eev2yZX7esGRjqRbnVk1UxMLw4CyVZDpZXRCcy75oQk=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25/go.mod h1:/95IA+0lMnzW6XzqYJRpjjsAbKEORVeO0anQqjd2CNU=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 h1:h7j73yuAVVjic8pqswh+L/7r2IHP43QwRyOu6zcCDDE=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2/go.mod h1:H07AHdK5LSy8F7EJUQhoxyiCNkePoHj2D8P2yGTWafo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.14.0/go.mod h1:bh2E0CXKZsQN+faiKVqC40vfNMAWheoULBCnEgO9K+8=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 h1:v0jkRigbSD6uOdwcaUQmgEwG1BkPfAPDqaeNt/29ghg=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1 h1:wLRIuz/llNgtN1OvZDmSotR+hjIXSxbxX/3Nw9ViaRg=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1/go.mod h1:tMRFyoPjrh0oGqCKQHOf1EkxVzLynY/uQk2pejYVrzk=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4 h1:Oe8awBiS/iitcsRJB5+DHa3iCxoA0KwJJf0JNrYMINY=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4/go.mod h1:RCZCSFbieSgNG1RKegO26opXV4EXyef/vNBVJsUyHuw=
github.com/aws/aws-sdk-go-v2/service/s3 v1.31.0/go.mod h1:ncltU6n4Nof5uJttDtcNQ537uNuwYqsZZQcpkd2/GUQ=
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 h1:wl5dxN1NONhTDQD9uaEvNsDRX29cBmGED/nl0jkWlt4=
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM=
+github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5 h1:a3nFS1TFNTH9TVizItnHz3BgPCk5/7ygrZQZAoUV3GA=
+github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5/go.mod h1:3pzLFJnbjkymz6RdZ963DuvMR9rzrKMXrlbteSk4Sxc=
github.com/aws/aws-sdk-go-v2/service/sso v1.12.6/go.mod h1:Y1VOmit/Fn6Tz1uFAeCO6Q7M2fmfXSCLeL5INVYsLuY=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 h1:km+ZNjtLtpXYf42RdaDZnNHm9s7SYAuDGTafy6nd89A=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1/go.mod h1:aHBr3pvBSD5MbzOvQtYutyPLLRPbl/y9x86XyJJnUXQ=
+github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6/go.mod h1:Lh/bc9XUf8CfOY6Jp5aIkQtN+j1mc+nExc+KXj9jx2s=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 h1:iRFNqZH4a67IqPvK8xxtyQYnyrlsvwmpHOe9r55ggBA=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1/go.mod h1:pTy5WM+6sNv2tB24JNKFtn6EvciQ5k40ZJ0pq/Iaxj0=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
github.com/aws/aws-sdk-go-v2/service/sts v1.18.7/go.mod h1:JuTnSoeePXmMVe9G8NcjjwgOKEfZ4cOjMuT2IBT/2eI=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 h1:txgVXIXWPXyqdiVn92BV6a/rgtpX31HYdsOYj0sVQQQ=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1/go.mod h1:VAiJiNaoP1L89STFlEMgmHX1bKixY+FaP+TpRFrmyZ4=
+github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
-github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
-github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
+github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
+github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
github.com/basgys/goxml2json v1.1.0 h1:4ln5i4rseYfXNd86lGEB+Vi652IsIXIvggKM/BhUKVw=
+github.com/basgys/goxml2json v1.1.0/go.mod h1:wH7a5Np/Q4QoECFIU8zTQlZwZkrilY0itPfecMw41Dw=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0=
github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA=
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=
@@ -406,24 +436,26 @@ github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTS
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q=
+github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
+github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
+github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
+github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
-github.com/caio/go-tdigest/v4 v4.0.1 h1:sx4ZxjmIEcLROUPs2j1BGe2WhOtHD6VSe6NNbBdKYh4=
-github.com/caio/go-tdigest/v4 v4.0.1/go.mod h1:Wsa+f0EZnV2gShdj1adgl0tQSoXRxtM0QioTgukFw8U=
github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8=
github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@@ -432,8 +464,8 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn
github.com/cihub/seelog v0.0.0-20151216151435-d2c6e5aa9fbf/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
-github.com/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4=
-github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY=
+github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y=
+github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs=
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I=
@@ -448,28 +480,27 @@ github.com/cloudfoundry-incubator/uaago v0.0.0-20190307164349-8136b7bbe76e/go.mo
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk=
-github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
-github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
-github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
-github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0=
-github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE=
+github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
+github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
-github.com/containerd/containerd v1.7.7 h1:QOC2K4A42RQpcrZyptP6z9EJZnlHfHJUfZrAAHe15q4=
-github.com/containerd/containerd v1.7.7/go.mod h1:3c4XZv6VeT9qgf9GMTxNTMFxGJrGpI2vz1yk4ye+YY8=
+github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
+github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
+github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM=
+github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/containerd/ttrpc v1.2.2 h1:9vqZr0pxwOF5koz6N0N3kJ0zDHokrcPxIR/ZR2YFtOs=
github.com/containerd/ttrpc v1.2.2/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak=
github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
-github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk=
-github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
+github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
+github.com/coreos/go-oidc/v3 v3.10.0 h1:tDnXHnLyiTVyT/2zLDGj09pFPkhND8Gl8lnTRhoEaJU=
+github.com/coreos/go-oidc/v3 v3.10.0/go.mod h1:5j11xcw0D3+SGxn6Z/WFADsgcWVMyNAlSQupk0KK3ac=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
@@ -477,6 +508,7 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=
+github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
@@ -492,28 +524,29 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
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/deepmap/oapi-codegen v1.12.4 h1:pPmn6qI9MuOtCz82WY2Xaw46EQjgvxednXXrP7g5Q2s=
-github.com/denisenkom/go-mssqldb v0.12.2 h1:1OcPn5GBIobjWNd+8yjfHNIaFX14B1pWI3F9HZy5KXw=
-github.com/denisenkom/go-mssqldb v0.12.2/go.mod h1:lnIw1mZukFRZDJYQ0Pb833QS2IaC3l5HkEfra2LJ+sk=
github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA=
github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
-github.com/digitalocean/godo v1.104.1 h1:SZNxjAsskM/su0YW9P8Wx3gU0W1Z13b6tZlYNpl5BnA=
-github.com/digitalocean/godo v1.104.1/go.mod h1:VAI/L5YDzMuPRU01lEEUSQ/sp5Z//1HnnFv/RBTEdbg=
+github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU=
+github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
+github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
github.com/dimfeld/httptreemux v5.0.1+incompatible h1:Qj3gVcDNoOthBAqftuD596rm4wg/adLLz5xh5CmpiCA=
github.com/dimfeld/httptreemux v5.0.1+incompatible/go.mod h1:rbUlSV+CCpv/SuqUTP/8Bk2O3LyUV436/yaRGkhP6Z0=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11 h1:IPrmumsT9t5BS7XcPhgsCTlkWbYg80SEXUzDpReaU6Y=
-github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11/go.mod h1:a6bNUGTbQBsY6VRHTr4h/rkOXjl244DyRD0tx3fgq4Q=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
@@ -521,13 +554,13 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM=
-github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM=
-github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
+github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY=
+github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0 h1:wHGPJSXvwKQVf/XfhjUPyrhpcPKWNy8F3ikH+eiwoBg=
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0/go.mod h1:PseHFo8Leko7J4A/TfZ6kkHdkzKBLUta6hRZR/OEbbc=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
-github.com/eapache/go-resiliency v1.4.0 h1:3OK9bWpPk5q6pbFAaYSEwD9CLUSHG8bnZuqX2yMt3B0=
-github.com/eapache/go-resiliency v1.4.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
+github.com/eapache/go-resiliency v1.6.0 h1:CqGDTLtpwuWKn6Nj3uNUdflaq+/kIPsg0gfNzHton30=
+github.com/eapache/go-resiliency v1.6.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
@@ -550,18 +583,22 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y
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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
-github.com/envoyproxy/go-control-plane v0.11.1 h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM=
-github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g=
+github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
+github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
-github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
github.com/euank/go-kmsg-parser v2.0.0+incompatible h1:cHD53+PLQuuQyLZeriD1V/esuG4MuU0Pjs5y6iknohY=
github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
-github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww=
-github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 h1:3fALCgsB+zI8Bxlv4ph4lCgt1CEQHIdU5sWxbkaMkuc=
-github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50/go.mod h1:IQmM+Ezbn5X7gpDO0IjKU5RmW9xT1a19dLp+NbivoXE=
+github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/evanphx/json-patch/v5 v5.8.0 h1:lRj6N9Nci7MvzrXuX6HFzU8XjmhPiXPlsKEy1u0KQro=
+github.com/evanphx/json-patch/v5 v5.8.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
+github.com/expr-lang/expr v1.16.3 h1:NLldf786GffptcXNxxJx5dQ+FzeWDKChBDqOOwyK8to=
+github.com/expr-lang/expr v1.16.3/go.mod h1:uCkhfG+x7fcZ5A5sXHKuQ07jGZRl6J0FCAaf2k4PtVQ=
+github.com/facebook/time v0.0.0-20240109160331-d1456d1a6bac h1:Xn5xG7RTh7HqtXKCCnxDG4+ee96umlRTBQM3kNSXDoU=
+github.com/facebook/time v0.0.0-20240109160331-d1456d1a6bac/go.mod h1:1u7ple9CA8fMqfqqNsKIsxFL9i2yLfo8Hsv4ejTD1FM=
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.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
@@ -577,30 +614,35 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8=
github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
+github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
github.com/frankban/quicktest v1.11.0/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
github.com/frankban/quicktest v1.11.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU=
-github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
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.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
-github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
-github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
+github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
+github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw=
github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw=
-github.com/go-faster/errors v0.6.1 h1:nNIPOBkprlKzkThvS/0YaX8Zs9KewLCOSFQS5BU06FI=
-github.com/go-faster/errors v0.6.1/go.mod h1:5MGV2/2T9yvlrbhe9pD9LO5Z/2zCSq2T8j+Jpi2LAyY=
+github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
+github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U=
+github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY=
github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4=
github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
@@ -616,42 +658,42 @@ github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KE
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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.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/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-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/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
+github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-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/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
+github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-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-redis/redis/v7 v7.4.1 h1:PASvf36gyUpr2zdOUS/9Zqc80GbM+9BDyiJSJDDOrTI=
-github.com/go-redis/redis/v7 v7.4.1/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg=
-github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
-github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
+github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
+github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
+github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
+github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
-github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
+github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
+github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
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-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
+github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
@@ -659,8 +701,8 @@ github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-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/gocql/gocql v1.6.0 h1:IdFdOTbnpbd0pDhl4REKQDM+Q0SzKXQ1Yh+YZZ8T/qU=
+github.com/gocql/gocql v1.6.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -668,8 +710,8 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/gofrs/uuid v4.3.1+incompatible h1:0/KbAdpx3UXAx1kEOWHJeOkpbgRFGHVgv+CFIY7dBJI=
-github.com/gofrs/uuid v4.3.1+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
+github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
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=
@@ -681,10 +723,10 @@ github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
-github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
-github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
-github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
+github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
@@ -721,8 +763,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -731,10 +773,11 @@ github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU=
-github.com/google/cadvisor v0.48.1 h1:eyYTxKBd+KxI1kh6rst4JSTLUhfHQM34qGpp+0AMlSg=
-github.com/google/cadvisor v0.48.1/go.mod h1:ZkYbiiVdyoqBmI2ahZI8GlmirT78OAOER0z4EQugkxQ=
-github.com/google/flatbuffers v23.1.21+incompatible h1:bUqzx/MXCDxuS0hRJL2EfjyZL3uQrPbMocUa8zGqsTA=
-github.com/google/flatbuffers v23.1.21+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
+github.com/google/cadvisor v0.49.0 h1:1PYeiORXmcFYi609M4Qvq5IzcvcVaWgYxDt78uH8jYA=
+github.com/google/cadvisor v0.49.0/go.mod h1:s6Fqwb2KiWG6leCegVhw4KW40tf9f7m+SF1aXiE8Wsk=
+github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg=
+github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -749,7 +792,6 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.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/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
@@ -772,66 +814,70 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
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.0/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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
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/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
-github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
+github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
+github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
-github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
-github.com/gophercloud/gophercloud v1.7.0 h1:fyJGKh0LBvIZKLvBWvQdIgkaV5yTM3Jh9EYUh+UNCAs=
-github.com/gophercloud/gophercloud v1.7.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
+github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk=
+github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
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.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.4/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 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
+github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gosnmp/gosnmp v1.35.0 h1:EuWWNPxTCdAUx2/NbQcSa3WdNxjzpy4Phv57b4MWpJM=
-github.com/gosnmp/gosnmp v1.35.0/go.mod h1:2AvKZ3n9aEl5TJEo/fFmf/FGO4Nj4cVeEc5yuk88CYc=
-github.com/grafana/loki/pkg/push v0.0.0-20230321110627-5c3d204ebf5d h1:InEQBUAKYIHRlOVvxWxvpW5pziK53RdlhsuRJzBWUmE=
-github.com/grafana/loki/pkg/push v0.0.0-20230321110627-5c3d204ebf5d/go.mod h1:BjNgF1EfQglDCrCbF0qiQLqAoBKva0/es63lSKT2TXw=
+github.com/gosnmp/gosnmp v1.37.0 h1:/Tf8D3b9wrnNuf/SfbvO+44mPrjVphBhRtcGg22V07Y=
+github.com/gosnmp/gosnmp v1.37.0/go.mod h1:GDH9vNqpsD7f2HvZhKs5dlqSEcAS6s6Qp099oZRCR+M=
+github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37 h1:w59bmBeLOk4enGtyX4kTBNY3FCw/nwDTYUqcjC4vKhg=
+github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37/go.mod h1:f3JSoxBTPXX5ec4FxxeC19nTBSxoTz+cBgS3cYLMcr0=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grobie/gomemcache v0.0.0-20180201122607-1f779c573665 h1:LONJvPBBd9wBmzSUmNHI7XpLE2qQ5tzUimeBadiVDuA=
-github.com/grobie/gomemcache v0.0.0-20180201122607-1f779c573665/go.mod h1:L69/dBlPQlWkcnU76WgcppK5e4rrxzQdi6LhLnK/ytA=
+github.com/grobie/gomemcache v0.0.0-20230213081705-239240bbc445 h1:FlKQKUYPZ5yDCN248M3R7x8yu2E3yEZ0H7aLomE4EoE=
+github.com/grobie/gomemcache v0.0.0-20230213081705-239240bbc445/go.mod h1:L69/dBlPQlWkcnU76WgcppK5e4rrxzQdi6LhLnK/ytA=
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/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
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.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
-github.com/hashicorp/consul/sdk v0.14.1 h1:ZiwE2bKb+zro68sWzZ1SgHF3kRMBZ94TwOCFRF4ylPs=
+github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8=
+github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A=
github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A=
github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -844,13 +890,14 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-hclog v0.16.2/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-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
+github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
+github.com/hashicorp/go-msgpack v0.5.5/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=
@@ -863,6 +910,7 @@ github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5O
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 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
+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=
@@ -877,6 +925,8 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
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/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
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=
@@ -887,15 +937,16 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0=
-github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c h1:Nc3Mt2BAnq0/VoLEntF/nipX+K1S7pG+RgwiitSv6v0=
-github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c/go.mod h1:O23qLAZuCx4htdY9zBaO4cJPXgleSFEdq6D/sezGgYE=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
-github.com/hetznercloud/hcloud-go/v2 v2.4.0 h1:MqlAE+w125PLvJRCpAJmEwrIxoVdUdOyuFUhE/Ukbok=
-github.com/hetznercloud/hcloud-go/v2 v2.4.0/go.mod h1:l7fA5xsncFBzQTyw29/dw5Yr88yEGKKdc6BHf24ONS0=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
@@ -908,9 +959,10 @@ github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+h
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 h1:s9ZL6ZhFF8y6ebnm1FLvobkzoIu5xwDQUcRPk/IEhpM=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6/go.mod h1:aXdIdfn2OcGnMhOTojXmwZqXKgC3MU5riiNvzwwG9OY=
-github.com/influxdata/influxdb-client-go/v2 v2.12.4 h1:9qJLqetEmhIlqaF/N9KUtdmRKSbNy6IohggyS3bxWlE=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 h1:2r2WiFeAwiJ/uyx1qIKnV1L4C9w/2V8ehlbJY4gjFaM=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4/go.mod h1:1yEQhaLb/cETXCqQmdh7lDjupNAReO7c83AHyK2dJ48=
+github.com/influxdata/influxdb-client-go/v2 v2.13.0 h1:ioBbLmR5NMbAjP4UVA5r9b5xGjpABD7j65pI8kFphDM=
+github.com/influxdata/influxdb-client-go/v2 v2.13.0/go.mod h1:k+spCbt9hcvqvUiz0sr5D8LolXHqAAOfPw9v/RIRHl4=
github.com/influxdata/influxdb-observability/common v0.5.8 h1:nyk4dqnKbPGIyr1vAs6oEsFQEHWi5jkSQ7PtP4v//lc=
github.com/influxdata/influxdb-observability/common v0.5.8/go.mod h1:aG8A2gbtXbl/P2FePd6QNsCUSOkcvz1n+NL5dJLUO1s=
github.com/influxdata/influxdb-observability/influx2otel v0.5.8 h1:pHkeImZksXNNQbbH/w1qPuC/u6e7cK3kTG12otQHDuE=
@@ -919,7 +971,9 @@ github.com/influxdata/influxdb-observability/otel2influx v0.5.8 h1:vZQ/WwiqIYPcZ
github.com/influxdata/influxdb-observability/otel2influx v0.5.8/go.mod h1:tcg//mjCGBsN0hAPQhUBNWuGF2miPPEMJEBl0ZIAfCk=
github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSHzRbhzK8RdXOsAdfDgO49TtqC1oZ+acxPrkfTxcCs=
+github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU=
+github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
github.com/influxdata/line-protocol-corpus v0.0.0-20210519164801-ca6fa5da0184/go.mod h1:03nmhxzZ7Xk2pdG+lmMd7mHDfeVOYFyhOgwO61qWU98=
github.com/influxdata/line-protocol-corpus v0.0.0-20210922080147-aa28ccfb8937 h1:MHJNQ+p99hFATQm6ORoLmpUCF7ovjwEFshs/NHzAbig=
github.com/influxdata/line-protocol-corpus v0.0.0-20210922080147-aa28ccfb8937/go.mod h1:BKR9c0uHSmRgM/se9JhFHtTT7JTO67X23MtKMHtZcpo=
@@ -927,8 +981,8 @@ github.com/influxdata/line-protocol/v2 v2.0.0-20210312151457-c52fdecb625a/go.mod
github.com/influxdata/line-protocol/v2 v2.1.0/go.mod h1:QKw43hdUBg3GTk2iC3iyCxksNj7PX9aUSeYOYE/ceHY=
github.com/influxdata/line-protocol/v2 v2.2.1 h1:EAPkqJ9Km4uAxtMRgUubJyqAr6zgWM0dznKMLRauQRE=
github.com/influxdata/line-protocol/v2 v2.2.1/go.mod h1:DmB3Cnh+3oxmG6LOBIxce4oaL4CPj3OmMPgvauXh+tM=
-github.com/ionos-cloud/sdk-go/v6 v6.1.9 h1:Iq3VIXzeEbc8EbButuACgfLMiY5TPVWUPNrF+Vsddo4=
-github.com/ionos-cloud/sdk-go/v6 v6.1.9/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
@@ -939,8 +993,8 @@ github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsU
github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o=
github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY=
github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI=
-github.com/jackc/pgconn v1.14.0 h1:vrbA9Ud87g6JdFWkHTJXppVce58qPIdP7N8y0Ml/A7Q=
-github.com/jackc/pgconn v1.14.0/go.mod h1:9mBNlny0UvkgJdCDvdVHYSjI+8tD2rnKK69Wz8ti++E=
+github.com/jackc/pgconn v1.14.3 h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w=
+github.com/jackc/pgconn v1.14.3/go.mod h1:RZbme4uasqzybK2RK5c65VsHxoyaml09lx3tXOcO/VM=
github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
@@ -956,8 +1010,8 @@ github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvW
github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
-github.com/jackc/pgproto3/v2 v2.3.2 h1:7eY55bdBeCz1F2fTzSz69QC+pG46jYq9/jtSPiJ5nn0=
-github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
+github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag=
+github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
@@ -971,15 +1025,15 @@ github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08
github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs=
-github.com/jackc/pgx/v4 v4.18.1 h1:YP7G1KABtKpB5IHrO9vYwSrCOhs7p3uqhvhhQBptya0=
-github.com/jackc/pgx/v4 v4.18.1/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE=
+github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA=
+github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw=
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jaegertracing/jaeger v1.48.0 h1:YuKooQ7qJsjgxws9xuf8C/BLNTPx8qTAJz4wv7IHhSc=
-github.com/jaegertracing/jaeger v1.48.0/go.mod h1:BoAPkdCAIEuLsVz/EDhjXd+GSVpHtJhiGqWoFEvBCKg=
-github.com/jarcoal/httpmock v1.3.0 h1:2RJ8GP0IIaWwcC9Fp2BmVi8Kog3v2Hn7VXM3fTd+nuc=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
+github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww=
+github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg=
github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk=
github.com/jawher/mow.cli v1.2.0/go.mod h1:y+pcA3jBAdo/GIZx/0rFjw/K2bVEODP9rfZOfaiq8Ko=
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
@@ -994,14 +1048,17 @@ github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh6
github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
-github.com/jellydator/ttlcache/v3 v3.1.0 h1:0gPFG0IHHP6xyUyXq+JaD8fwkDCqgqwohXNJBcYE71g=
-github.com/jellydator/ttlcache/v3 v3.1.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
+github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++uW8a3LE=
+github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
+github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
+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=
@@ -1024,21 +1081,19 @@ github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1q
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc=
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/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4=
-github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE=
github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-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/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU=
-github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
+github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -1051,6 +1106,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
@@ -1059,12 +1115,15 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353 h1:X/79QL0b4YJVO5+OsPH9rF2u428CIrGL/jLmPsoOQQ4=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg=
github.com/leodido/ragel-machinery v0.0.0-20190525184631-5f46317e436b h1:11UHH39z1RhZ5dc4y4r/4koJo6IYFgTRMe/LlwRTEw0=
github.com/leodido/ragel-machinery v0.0.0-20190525184631-5f46317e436b/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg=
github.com/leoluk/perflib_exporter v0.2.1 h1:/3/ut1k/jFt5p4ypjLZKDHDqlXAK6ERZPVWtwdI389I=
github.com/leoluk/perflib_exporter v0.2.1/go.mod h1:MinSWm88jguXFFrGsP56PtleUb4Qtm4tNRH/wXNXRTI=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
+github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
+github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
@@ -1075,10 +1134,10 @@ github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8Lb
github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs=
github.com/linkedin/goavro/v2 v2.9.8 h1:jN50elxBsGBDGVDEKqUlDuU1cFwJ11K/yrJCBMe/7Wg=
github.com/linkedin/goavro/v2 v2.9.8/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
-github.com/linode/linodego v1.23.0 h1:s0ReCZtuN9Z1IoUN9w1RLeYO1dMZUGPwOQ/IBFsBHtU=
-github.com/linode/linodego v1.23.0/go.mod h1:0U7wj/UQOqBNbKv1FYTXiBUXueR8DY4HvIotwE0ENgg=
-github.com/logicmonitor/lm-data-sdk-go v1.0.0 h1:2eiz7kq3G0rLc/hqVpsk1c2B0PMjp6nLhHzc5SmTn80=
-github.com/logicmonitor/lm-data-sdk-go v1.0.0/go.mod h1:XvYS9xp/0WrPpc6ge2O3ZPn2dgbKO46PnfCfbKaeUu8=
+github.com/linode/linodego v1.30.0 h1:6HJli+LX7NGu+Sne2G+ux790EkVOWOV/SR4mK3jcs6k=
+github.com/linode/linodego v1.30.0/go.mod h1:/46h/XpmWi//oSA92GX2p3FIxb8HbX7grslPPQalR2o=
+github.com/logicmonitor/lm-data-sdk-go v1.3.0 h1:Obrexk35IKupFQezngkesR/kMfHQdAEUR1zYbJrOrzg=
+github.com/logicmonitor/lm-data-sdk-go v1.3.0/go.mod h1:nIHr4uOPfg6AM7mG1rewg3L4O3rfge34o7UYB7joBM4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
@@ -1112,24 +1171,21 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-sqlite3 v1.14.18 h1:JL0eqdCOq6DJVNPSvArO/bIV9/P7fbGrV00LZHc+5aI=
-github.com/mattn/go-sqlite3 v1.14.18/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
+github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
+github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
+github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM=
github.com/microsoft/ApplicationInsights-Go v0.4.4 h1:G4+H9WNs6ygSCe6sUyxRc2U81TI5Es90b2t/MwX5KqY=
github.com/microsoft/ApplicationInsights-Go v0.4.4/go.mod h1:fKRUseBqkw6bDiXTs3ESTiU/4YTIHsQS4W3fP2ieF4U=
+github.com/microsoft/go-mssqldb v1.7.0 h1:sgMPW0HA6Ihd37Yx0MzHyKD726C2kY/8KJsQtXHNaAs=
+github.com/microsoft/go-mssqldb v1.7.0/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
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/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
-github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
-github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
-github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs=
-github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
-github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI=
-github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk=
@@ -1143,6 +1199,7 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0=
github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA=
@@ -1153,16 +1210,21 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.4.2/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/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
+github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
+github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -1170,13 +1232,13 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
-github.com/mongodb-forks/digest v1.0.5 h1:EJu3wtLZcA0HCvsZpX5yuD193/sW9tHiNvrEM5apXMk=
-github.com/mongodb-forks/digest v1.0.5/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg=
+github.com/mongodb-forks/digest v1.1.0 h1:7eUdsR1BtqLv0mdNm4OXs6ddWvR4X2/OsLwdKksrOoc=
+github.com/mongodb-forks/digest v1.1.0/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU=
github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
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/mrunalp/fileutils v0.5.1 h1:F+S7ZlNKnrwHfSwdlgNSkKo67ReVf8o9fel6C3dkm/Q=
@@ -1197,27 +1259,29 @@ github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/
github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s=
github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
-github.com/nginxinc/nginx-plus-go-client v0.6.0/go.mod h1:DBAmdDP71tOhgFPdCMVusegzdKmLVpVL0nVcMX17pbY=
-github.com/nginxinc/nginx-prometheus-exporter v0.8.1-0.20201110005315-f5a5f8086c19 h1:jR4KbeVA+KYmPq+amRe6AdB4mIfEaSOZGY2zCpqt/p8=
-github.com/nginxinc/nginx-prometheus-exporter v0.8.1-0.20201110005315-f5a5f8086c19/go.mod h1:L58Se1nwn3cEyHWlcfdlXgiGbHe/efvDbkbi+psz3lA=
+github.com/nginxinc/nginx-prometheus-exporter v0.11.0 h1:21xjnqNgxtni2jDgAQ90bl15uDnrTreO9sIlu1YsX/U=
+github.com/nginxinc/nginx-prometheus-exporter v0.11.0/go.mod h1:GdyHnWAb8q8OW1Pssrrqbcqra0SH0Vn6UXICMmyWkw8=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
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/observiq/nanojack v0.0.0-20201106172433-343928847ebc h1:49ewVBwLcy+eYqI4R0ICilCI4dPjddpFXWv3liXzUxM=
+github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo=
+github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A=
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
+github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
+github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
@@ -1225,25 +1289,27 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
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.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
+github.com/onsi/gomega v1.31.0 h1:54UJxxj6cPInHS3a35wm6BK/F9nHYueZ1NVujHDrnXE=
+github.com/onsi/gomega v1.31.0/go.mod h1:DW9aCi7U6Yi40wNVAvT6kzFnEVEI5n3DloYBiKiT6zk=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss=
github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8=
-github.com/opencontainers/runtime-spec v1.1.0-rc.3 h1:l04uafi6kxByhbxev7OWiuUv0LZxEsYUfDWZ6bztAuU=
-github.com/opencontainers/runtime-spec v1.1.0-rc.3/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg=
+github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU=
github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
+github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsrZjibvB3APXf2a1VwCmMQ=
+github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5ESjc2+iaZuldqE+23Iq0r1XeNue8=
github.com/openshift/api v0.0.0-20180801171038-322a19404e37 h1:05irGU4HK4IauGGDbsk+ZHrm1wOzMLYjMlfaiqMrBYc=
github.com/openshift/api v0.0.0-20180801171038-322a19404e37/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY=
github.com/openshift/api v0.0.0-20210521075222-e273a339932a/go.mod h1:izBmoXbUu3z5kUa4FjZhvekTsyzIWiOoaIgJiZBBMQs=
github.com/openshift/build-machinery-go v0.0.0-20210423112049-9415d7ebd33e/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 h1:ZHRIMCFIJN1p9LsJt4HQ+akDrys4PrYnXzOWI5LK03I=
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142/go.mod h1:fjS8r9mqDVsPb5td3NehsNOAWa4uiFkYEfVZioQ2gH0=
-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.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE=
github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA=
@@ -1257,12 +1323,12 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
-github.com/paulmach/orb v0.10.0 h1:guVYVqzxHE/CQ1KpfGO077TR0ATHSNjp4s6XGLn3W9s=
-github.com/paulmach/orb v0.10.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
+github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU=
+github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-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/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/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
@@ -1272,21 +1338,20 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi
github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
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=
-github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
+github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
-github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
-github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
-github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go=
-github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg=
+github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo=
+github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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=
@@ -1300,21 +1365,17 @@ github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQ
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
-github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4=
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=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
@@ -1322,35 +1383,31 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9
github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.31.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
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.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
-github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
-github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
-github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/prometheus v0.48.0 h1:yrBloImGQ7je4h8M10ujGh4R6oxYQJQKlMuETwNskGk=
-github.com/prometheus/prometheus v0.48.0/go.mod h1:SRw624aMAxTfryAcP8rOjg4S/sHHaetx2lyJJ2nM83g=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
+github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o=
+github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
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/relvacode/iso8601 v1.3.0 h1:HguUjsGpIMh/zsTczGN3DVJFxTU/GX+MMmzcKoMO7ko=
-github.com/relvacode/iso8601 v1.3.0/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I=
+github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8=
+github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
+github.com/relvacode/iso8601 v1.4.0 h1:GsInVSEJfkYuirYFxa80nMLbH2aydgZpIf52gYZXUJs=
+github.com/relvacode/iso8601 v1.4.0/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
+github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
@@ -1359,13 +1416,17 @@ github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThC
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
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/samber/lo v1.37.0 h1:XjVcB8g6tgUp8rsPsJ2CvhClfImrpL04YpQHXeHPhRw=
-github.com/samber/lo v1.37.0/go.mod h1:9vaz2O4o8oOnK23pd2TrXufcbdbJIa3b6cstBWKpopA=
+github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
+github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
+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/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=
+github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21 h1:yWfiTPwYxB0l5fGMhl/G+liULugVIHD9AU77iNLrURQ=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
-github.com/scalyr/dataset-go v0.14.0 h1:uRkoUt6LcMcH3VUTjOakQ4aq+1ooJB2t47oqYRUkV/k=
-github.com/scalyr/dataset-go v0.14.0/go.mod h1:+a4BvVyS7mKquK7ySuWh4vygyDBREQrdikdcnABYKFw=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
+github.com/scalyr/dataset-go v0.18.0 h1:CTv7kk/FGdiicTWo3h1brFusHD1yjhVGINFamP8uukw=
+github.com/scalyr/dataset-go v0.18.0/go.mod h1:4x0JK5X0UdhZ2TEO3kHu9pTELDRc3WsrBBwQfkOPZKc=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds=
@@ -1374,13 +1435,14 @@ github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAj
github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI=
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
-github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
-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/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
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/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/shoenig/test v0.6.6 h1:Oe8TPH9wAbv++YPNDKJWUnI8Q4PPWCx3UbOfH+FxiMU=
+github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY=
+github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
@@ -1388,10 +1450,10 @@ github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFR
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3 h1:32k2QLgsKhcEs55q4REPKyIadvid5FPy2+VMgvbmKJ0=
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3/go.mod h1:gJrXWi7wSGXfiC7+VheQaz+ypdCt5SmZNL+BRxUe7y4=
-github.com/signalfx/sapm-proto v0.13.0 h1:yEkp1+MAU4vZvnJMp56uhVlRjlvCK7KQjBg0g2Apw8k=
-github.com/signalfx/sapm-proto v0.13.0/go.mod h1:C72HjeCW5v0Llk6pIVJ/ZH8A5GbiZpCCSkE1dSlpWxY=
-github.com/sijms/go-ora/v2 v2.7.20 h1:Q+/zNx3DMgytXMAvIbt/pUJcYj2jMRv/2Zg1DDlWhTY=
-github.com/sijms/go-ora/v2 v2.7.20/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk=
+github.com/signalfx/sapm-proto v0.14.0 h1:KWh3I5E4EkelB19aP1/54Ik8khSioC/RVRW/riOfRGg=
+github.com/signalfx/sapm-proto v0.14.0/go.mod h1:Km6PskZh966cqNoUn3AmRyGRix5VfwnxVBvn2vjRC9U=
+github.com/sijms/go-ora/v2 v2.8.11 h1:oQtSX145kCYSjnrmWdtqp2LON9wOQW09wPJ5pIEn5Tg=
+github.com/sijms/go-ora/v2 v2.8.11/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk=
github.com/sirupsen/logrus v1.2.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=
@@ -1403,32 +1465,33 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/snowflakedb/gosnowflake v1.6.25 h1:o5zUmxTOo0Eo9AdkEj8blCeiMuILrQJ+rjUMAeZhcRE=
-github.com/snowflakedb/gosnowflake v1.6.25/go.mod h1:KfO4F7bk+aXPUIvBqYxvPhxLlu2/w4TtSC8Rw/yr5Mg=
+github.com/snowflakedb/gosnowflake v1.9.0 h1:s2ZdwFxFfpqwa5CqlhnzRESnLmwU3fED6zyNOJHFBQA=
+github.com/snowflakedb/gosnowflake v1.9.0/go.mod h1:4ZgHxVf2OKwecx07WjfyAMr0gn8Qj4yvwAo68Og8wsU=
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+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.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
-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.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
+github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.3.1/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/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
+github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
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.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/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.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
-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.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
+github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
@@ -1436,8 +1499,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -1449,21 +1513,21 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
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.2/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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-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/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/tedsuo/ifrit v0.0.0-20180802180643-bea94bb476cc/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.792 h1:MwUEEkppjl0GIiz/rovNF54PG+RBwdfk1/+Rys8NUko=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.792/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
-github.com/testcontainers/testcontainers-go v0.26.0 h1:uqcYdoOHBy1ca7gKODfBd9uTHVK3a7UL848z09MVZ0c=
-github.com/tg123/go-htpasswd v1.2.1 h1:i4wfsX1KvvkyoMiHZzjS0VzbAPWfxzI8INcZAKtutoU=
-github.com/tg123/go-htpasswd v1.2.1/go.mod h1:erHp1B86KXdwQf1X5ZrLb7erXZnWueEQezb2dql4q58=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.896 h1:24LJSJctlcXa6KzV5quttY8R8NmmF4hTbeWgqKm6clw=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.896/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
+github.com/testcontainers/testcontainers-go v0.29.1 h1:z8kxdFlovA2y97RWx98v/TQ+tR+SXZm6p35M+xB92zk=
+github.com/testcontainers/testcontainers-go v0.29.1/go.mod h1:SnKnKQav8UcgtKqjp/AD8bE1MqZm+3TDb/B8crE3XnI=
+github.com/tg123/go-htpasswd v1.2.2 h1:tmNccDsQ+wYsoRfiONzIhDm5OkVHQzN3w4FOBAlN6BY=
+github.com/tg123/go-htpasswd v1.2.2/go.mod h1:FcIrK0J+6zptgVwK1JDlqyajW/1B4PtuJ/FLWl7nx8A=
github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/gjson v1.14.3 h1:9jvXn7olKEHU1S9vwoMGliaT8jq1vJ7IH/n9zD9Dnlw=
github.com/tidwall/gjson v1.14.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
@@ -1480,36 +1544,35 @@ github.com/tilinna/clock v1.1.0/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRU
github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk=
+github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk=
github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
-github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
+github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
-github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
+github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
+github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/vincent-petithory/dataurl v1.0.0 h1:cXw+kPto8NLuJtlMsI152irrVw9fRDX8AbShPRpg2CI=
github.com/vincent-petithory/dataurl v1.0.0/go.mod h1:FHafX5vmDzyP+1CQATJn7WFKc9CvnvxyvZy6I1MrG/U=
github.com/vishvananda/netlink v1.2.1-beta.2 h1:Llsql0lnQEbHj0I1OuKyp8otXp0r3q0mPkuhwHfStVs=
github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
-github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA=
-github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
-github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U=
+github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=
+github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
+github.com/vmihailenco/msgpack/v4 v4.3.13 h1:A2wsiTbvp63ilDaWmsk2wjx6xZdxQOvpiNlKBGKKXKI=
+github.com/vmihailenco/msgpack/v4 v4.3.13/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc=
-github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f h1:NbC9yOr5At92seXK+kOr2TzU3mIWzcJOVzZasGSuwoU=
-github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f/go.mod h1:VEqcmf4Sp7gPB7z05QGyKVmn6xWppr7Nz8cVNvyC80o=
-github.com/vmware/govmomi v0.33.1 h1:qS2VpEBd/WLbzLO5McI6h5o5zaKsrezUxRY5r9jkW8A=
-github.com/vmware/govmomi v0.33.1/go.mod h1:QuzWGiEMA/FYlu5JXKjytiORQoxv2hTHdS2lWnIqKMM=
+github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
+github.com/vmware/go-vmware-nsxt v0.0.0-20230223012718-d31b8a1ca05e h1:Vu41Q0Pv3yMdd+tcDW6QeEUIK2L+9ZrPrq8NAMrKSLc=
+github.com/vmware/go-vmware-nsxt v0.0.0-20230223012718-d31b8a1ca05e/go.mod h1:aRq5pxwgdJpAuP97SCjX1+Db32z/b0dggQ07FDF+fqE=
+github.com/vmware/govmomi v0.36.3 h1:1Ng3CBNQVbFjCQbKtfsewy5o3dFa+EoTjqeThVISUBc=
+github.com/vmware/govmomi v0.36.3/go.mod h1:mtGWtM+YhTADHlCgJBiskSRPOZRsN9MSjPzaZLte/oQ=
github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
-github.com/wavefronthq/wavefront-sdk-go v0.15.0 h1:po9E3vh/0y7kOx8D9EtFp7kbSLLLKbmu/w/s1xGJAQU=
-github.com/wavefronthq/wavefront-sdk-go v0.15.0/go.mod h1:V72c8e+bXuLK8HpA6ioW0ll5mK9IPD+4IHNNDY75ksA=
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.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
@@ -1528,21 +1591,25 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRFc9q3yYbBkB6tsm4aCwwQV/j1JQAQ=
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
+github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes=
-go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
-go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
+github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss=
+go.einride.tech/aip v0.66.0 h1:XfV+NQX6L7EOYK11yoHHFtndeaWh3KbD9/cN/6iWEt8=
+go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M=
+go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
+go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
-go.mongodb.org/atlas v0.35.0 h1:fLSPEyv+QcrG5djPWMekaM+BEVfEVBKQO4yEUQl4CQ4=
-go.mongodb.org/atlas v0.35.0/go.mod h1:nfPldE9dSama6G2IbIzmEza02Ly7yFZjMMVscaM0uEc=
+go.mongodb.org/atlas v0.36.0 h1:m05S3AO7zkl+bcG1qaNsEKBnAqnKx2FDwLooHpIG3j4=
+go.mongodb.org/atlas v0.36.0/go.mod h1:nfPldE9dSama6G2IbIzmEza02Ly7yFZjMMVscaM0uEc=
go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE=
go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
@@ -1554,111 +1621,131 @@ 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.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/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/debugexporter v0.89.0 h1:MQUEX4OWszJQqQMqtYERiiw02Ta9QMWPe/hHWoD4YBU=
-go.opentelemetry.io/collector/exporter/debugexporter v0.89.0/go.mod h1:eLoVrKOjgPvAmg0XJuellJ03zEpEol26l8i48Rhv53Q=
-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.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-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.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/connector/forwardconnector v0.98.0 h1:zIn0GaqUKq+3GcvfdVEIB/GSv7Zdtda8q0XChXG6Qj0=
+go.opentelemetry.io/collector/connector/forwardconnector v0.98.0/go.mod h1:eC6PfRbK0Mx7QpqfnEI0uPAjq27MR//sRb5Vxzuf6eE=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0 h1:zAFCXYzpxDh64BIVujqntlN5RE4jDahbPfJBy/Wq7D0=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0/go.mod h1:S15ELDQFoP5da3NHzXJR2I8FGUnM2C1Hp6e/OhaCtw0=
+go.opentelemetry.io/collector/exporter/loggingexporter v0.98.0 h1:2DNfziYl0w8Sq9bPdYlPpn5MLLQGB73LB7O1BIYQxA4=
+go.opentelemetry.io/collector/exporter/loggingexporter v0.98.0/go.mod h1:SBuTQ0sA3fEd/jAJFAxjTX8Ndwkc4Mtkc6gsz115S+8=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0 h1:uhiR/luaJCwMnvvkIS/gIxBbSAp+/vbqeC3AXmuc/kg=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0/go.mod h1:1ySnK/6Cl+67FTP6ty04PX9nrXPYFPuBqZ+Xn9Jzz6Y=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0 h1:+6mRqTgoJxXxuPwI8s5fMKm0mLfwVwJgD2EB7gUNNlE=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0/go.mod h1:uGocxqpbUrZDwZz6JBKsvNCyDLrS/pnVpn4BUuPauFw=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/extension/ballastextension v0.98.0 h1:EPzsYpiSY4vAfzJMqhVK6bIh+qZRmXVskaNlRFKjA0w=
+go.opentelemetry.io/collector/extension/ballastextension v0.98.0/go.mod h1:IY/JNP0g+tUUe/w5YHgBYwv5XlH4eqo5d4th+RGROFU=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 h1:iM4fMLGig3GKmz5XNtOPKDsnCnvbi0+UHYaWsx/aSRc=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0/go.mod h1:ROnuUkZJgpKEIDf3AIVjgRGNI7KPqCKPXsw8whL6Hzs=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0 h1:1jjiC3POfIluGLVM+6y8nolKEI95/vlHAvDmIOatags=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0/go.mod h1:VQDDrhQbIoelGF+fKzy6vCQM3hWDCH2YFaZKqgTDmGk=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0 h1:j7lfLwc5o1dtXIPXU8LjmxadejmJVRHN57ZYGH33Wq4=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0/go.mod h1:uWDBDxaWuzF1U5S2UIhstO0+Q8aUiwiUu8uO1IYN2XQ=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-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.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
@@ -1670,6 +1757,7 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
@@ -1683,8 +1771,8 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -1701,22 +1789,21 @@ golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
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.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
-golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
-golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
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=
@@ -1730,8 +1817,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-20231127185646-65229373498e h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No=
-golang.org/x/exp v0.0.0-20231127185646-65229373498e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
+golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 h1:/RIbNt/Zr7rVhIkQhooTxCxFcdWLGIKnZA4IXNFSrvo=
+golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
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=
@@ -1760,8 +1847,9 @@ 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/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
+golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1803,7 +1891,6 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
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-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
@@ -1812,19 +1899,18 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211029224645-99673261e6eb/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.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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=
@@ -1838,9 +1924,8 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/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.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
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=
@@ -1852,10 +1937,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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=
@@ -1884,7 +1969,6 @@ golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7w
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-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1902,7 +1986,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1931,43 +2014,41 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
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-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-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.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.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
-golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/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/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
-golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
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=
@@ -1978,7 +2059,10 @@ 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.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+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=
@@ -1987,8 +2071,9 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -2051,7 +2136,6 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
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.0.0-20210112230658-8b4aab62c064/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
@@ -2059,20 +2143,21 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.3/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/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM=
-golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
@@ -2097,16 +2182,17 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
+google.golang.org/api v0.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk=
+google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -2142,9 +2228,7 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
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-20210222152913-aa3ee6e6a81c/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-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
@@ -2152,12 +2236,12 @@ google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaE
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
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=
@@ -2179,8 +2263,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
-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/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -2195,9 +2279,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -2221,8 +2305,6 @@ gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w=
-gopkg.in/square/go-jose.v2 v2.5.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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
@@ -2242,7 +2324,10 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 h1:umQdVO0Ytx+kYadhuJNjFtDgIsIEBnKrOTvNuu8ClKI=
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0/go.mod h1:kx0CSMRpzEZfx/nFH62GLU4stZjparh/BRpM89t4XCQ=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
+gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -2251,46 +2336,44 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
-k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY=
-k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=
+k8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA=
+k8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE=
k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
-k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8=
-k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
+k8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA=
+k8s.io/apimachinery v0.30.0/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=
k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
-k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY=
-k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=
+k8s.io/client-go v0.30.0 h1:sB1AGGlhY/o7KCyCEQ0bPWzYDL0pwOZO4vAtTSh/gJQ=
+k8s.io/client-go v0.30.0/go.mod h1:g7li5O5256qe6TYdAMyX/otJqMhIiGgTapdLchhmOaY=
k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
-k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
-k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
-k8s.io/kubelet v0.28.4 h1:Ypxy1jaFlSXFXbg/yVtFOU2ZxErBVRJfLu8+t4s7Dtw=
-k8s.io/kubelet v0.28.4/go.mod h1:w1wPI12liY/aeC70nqKYcNNkr6/nbyvdMB7P7wmww2o=
+k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
+k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
+k8s.io/kubelet v0.30.0 h1:/pqHVR2Rn8ExCpn211wL3pMtqRFpcBcJPl4+1INbIMk=
+k8s.io/kubelet v0.30.0/go.mod h1:WukdKqbQxnj+csn3K8XOKeX7Sh60J/da25IILjvvB5s=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7 h1:ZgnF1KZsYxWIifwSNZFZgNtWE89WI5yiP5WwlfDoIyc=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
+k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
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/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4=
-sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
+sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
+sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
-sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
-skywalking.apache.org/repo/goapi v0.0.0-20231026090926-09378dd56587 h1:TY79I5Y7xRB8q5LQ+MJn7NYsYi0VL5nj1QDrUHwK7cQ=
-skywalking.apache.org/repo/goapi v0.0.0-20231026090926-09378dd56587/go.mod h1:onFubXaIoY/2FTRVrLMqCTlaNq4SilAEwF/2G0IcaBw=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
+skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4 h1:3YIFmsshgsU6FzHgnkG9Z24CkXkgoexBN5O0aSzK79g=
+skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4/go.mod h1:oD2dxcDAHVIt95Ee7kJHgZ5f64QNhrqTjQYARwfafc4=
diff --git a/cmd/configschema/metadata.yaml b/cmd/configschema/metadata.yaml
index 6f3149878357..4b61cd6491c5 100644
--- a/cmd/configschema/metadata.yaml
+++ b/cmd/configschema/metadata.yaml
@@ -3,4 +3,5 @@ type: configschema
status:
class: cmd
codeowners:
- active: [mx-psi, dmitryax, pmcollins]
\ No newline at end of file
+ active: [mx-psi, dmitryax]
+ emeritus: [pmcollins]
\ No newline at end of file
diff --git a/cmd/configschema/package_test.go b/cmd/configschema/package_test.go
new file mode 100644
index 000000000000..d326dc6613ab
--- /dev/null
+++ b/cmd/configschema/package_test.go
@@ -0,0 +1,31 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package configschema
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The Ignore function calls prevent catching leaks generated by indirect dependencies.
+// All of these are leaks that we can't fix from within the collector code base.
+// Regarding the OpenCensus ignore: see https://github.com/census-instrumentation/opencensus-go/issues/1191
+// Regarding the DataDog ignore: see https://github.com/DataDog/datadog-agent/issues/22030
+// Regarding the database/sql ignore: see https://github.com/SAP/go-hdb/issues/130
+// Regarding the SAP/go-hdb ignore: see https://github.com/SAP/go-hdb/issues/131
+// Regarding the cihub/seelog ignore: see https://github.com/cihub/seelog/issues/182
+// Regarding the godbus/dbus ignore: see https://github.com/99designs/keyring/issues/135
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m,
+ goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"),
+ goleak.IgnoreTopFunction("github.com/DataDog/datadog-agent/pkg/trace/metrics/timing.(*Set).Autoreport.func1"),
+ // Unfortunately this ignore can't be anymore specific, even though it's caused by the SAP/go-hdb/driver
+ // package. There's no reference to this package in the goleak output. This has the potential of
+ // hiding future leaks, so we should remove as soon as the referenced issue is resolved.
+ goleak.IgnoreTopFunction("database/sql.(*DB).connectionOpener"),
+ goleak.IgnoreTopFunction("github.com/SAP/go-hdb/driver.(*metrics).collect"),
+ goleak.IgnoreAnyFunction("github.com/cihub/seelog.(*asyncLoopLogger).processQueue"),
+ goleak.IgnoreAnyFunction("github.com/godbus/dbus.(*Conn).inWorker"))
+}
diff --git a/cmd/configschema/resolver_test.go b/cmd/configschema/resolver_test.go
index f74fe4759741..f19f76d1cc9b 100644
--- a/cmd/configschema/resolver_test.go
+++ b/cmd/configschema/resolver_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package configschema
import (
@@ -48,7 +44,7 @@ func TestTypeToPackagePath_Local(t *testing.T) {
func TestTypeToPackagePath_External(t *testing.T) {
packageDir := testTypeToPackagePath(t, otlpreceiver.Config{})
- assert.Contains(t, packageDir, "pkg/mod/go.opentelemetry.io/collector/receiver@")
+ assert.Contains(t, packageDir, filepath.Join("pkg", "mod", "go.opentelemetry.io", "collector", "receiver@"))
}
func TestTypeToPackagePath_Error(t *testing.T) {
@@ -59,7 +55,7 @@ func TestTypeToPackagePath_Error(t *testing.T) {
func TestTypeToProjectPath(t *testing.T) {
dir := testDR().ReflectValueToProjectPath(reflect.ValueOf(&redisreceiver.Config{}))
- assert.Equal(t, "../../receiver/redisreceiver", dir)
+ assert.Equal(t, filepath.Join("..", "..", "receiver", "redisreceiver"), dir)
}
func TestTypetoProjectPath_External(t *testing.T) {
diff --git a/cmd/githubgen/allowlist.txt b/cmd/githubgen/allowlist.txt
index 1459e9308ad1..15b721e0324d 100644
--- a/cmd/githubgen/allowlist.txt
+++ b/cmd/githubgen/allowlist.txt
@@ -1,24 +1,18 @@
Caleb-Hurshman
-Doron-Bargo
MaxKsyunz
MitchellGale
YANG-DB
-agoallikmaa
-architjugran
asaharn
-billmeyer
-eedorenko
emreyalvac
-keep94
-kiranmayib
-kkujawa-sumo
-leonsp-ai
-liqiangz
-oded-dd
shaochengwang
-svrakitin
-thepeterstone
yiyang5055
am-kinetica
-mcube8
-sokoide
+cheempz
+jerrytfleung
+driverpt
+adcharre
+jcreixell
+rlankfo
+swar8080
+zpzhuSplunk
+thmshmm
diff --git a/cmd/githubgen/codeowners.go b/cmd/githubgen/codeowners.go
new file mode 100644
index 000000000000..48cd9430a261
--- /dev/null
+++ b/cmd/githubgen/codeowners.go
@@ -0,0 +1,226 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+package main
+
+import (
+ "context"
+ "fmt"
+ "os"
+ "path/filepath"
+ "sort"
+ "strings"
+
+ "github.com/google/go-github/v61/github"
+)
+
+const allowlistHeader = `# Code generated by githubgen. DO NOT EDIT.
+#####################################################
+#
+# List of components in OpenTelemetry Collector Contrib
+# waiting on owners to be assigned
+#
+#####################################################
+#
+# Learn about membership in OpenTelemetry community:
+# https://github.com/open-telemetry/community/blob/main/community-membership.md
+#
+#
+# Learn about CODEOWNERS file format:
+# https://help.github.com/en/articles/about-code-owners
+#
+
+##
+# NOTE: New components MUST have one or more codeowners. Add codeowners to the component metadata.yaml and run make gengithub
+##
+
+## COMMON & SHARED components
+internal/common
+
+`
+
+const unmaintainedHeader = `
+
+## UNMAINTAINED components
+
+`
+
+const codeownersHeader = `# Code generated by githubgen. DO NOT EDIT.
+#####################################################
+#
+# List of codeowners for OpenTelemetry Collector Contrib
+#
+#####################################################
+#
+# Learn about membership in OpenTelemetry community:
+# https://github.com/open-telemetry/community/blob/main/community-membership.md
+#
+#
+# Learn about CODEOWNERS file format:
+# https://help.github.com/en/articles/about-code-owners
+#
+
+* @open-telemetry/collector-contrib-approvers
+`
+
+const distributionCodeownersHeader = `
+#####################################################
+#
+# List of distribution maintainers for OpenTelemetry Collector Contrib
+#
+#####################################################
+`
+
+type codeownersGenerator struct {
+}
+
+func (cg codeownersGenerator) generate(data *githubData) error {
+ allowlistData, err := os.ReadFile(data.allowlistFilePath)
+ if err != nil {
+ return err
+ }
+ allowlistLines := strings.Split(string(allowlistData), "\n")
+
+ allowlist := make(map[string]struct{}, len(allowlistLines))
+ unusedAllowlist := make(map[string]struct{}, len(allowlistLines))
+ for _, line := range allowlistLines {
+ if line == "" {
+ continue
+ }
+ allowlist[line] = struct{}{}
+ unusedAllowlist[line] = struct{}{}
+ }
+ var missingCodeowners []string
+ var duplicateCodeowners []string
+ members, err := getGithubMembers()
+ if err != nil {
+ return err
+ }
+ for _, codeowner := range data.codeowners {
+ _, present := members[codeowner]
+
+ if !present {
+ _, allowed := allowlist[codeowner]
+ delete(unusedAllowlist, codeowner)
+ allowed = allowed || strings.HasPrefix(codeowner, "open-telemetry/")
+ if !allowed {
+ missingCodeowners = append(missingCodeowners, codeowner)
+ }
+ } else if _, ok := allowlist[codeowner]; ok {
+ duplicateCodeowners = append(duplicateCodeowners, codeowner)
+ }
+ }
+ if len(missingCodeowners) > 0 {
+ sort.Strings(missingCodeowners)
+ return fmt.Errorf("codeowners are not members: %s", strings.Join(missingCodeowners, ", "))
+ }
+ if len(duplicateCodeowners) > 0 {
+ sort.Strings(duplicateCodeowners)
+ return fmt.Errorf("codeowners members duplicate in allowlist: %s", strings.Join(duplicateCodeowners, ", "))
+ }
+ if len(unusedAllowlist) > 0 {
+ var unused []string
+ for k := range unusedAllowlist {
+ unused = append(unused, k)
+ }
+ sort.Strings(unused)
+ return fmt.Errorf("unused members in allowlist: %s", strings.Join(unused, ", "))
+ }
+
+ codeowners := codeownersHeader
+ deprecatedList := "## DEPRECATED components\n"
+ unmaintainedList := "\n## UNMAINTAINED components\n"
+
+ unmaintainedCodeowners := unmaintainedHeader
+ currentFirstSegment := ""
+LOOP:
+ for _, key := range data.folders {
+ m := data.components[key]
+ for stability := range m.Status.Stability {
+ if stability == unmaintainedStatus {
+ unmaintainedList += key + "/\n"
+ unmaintainedCodeowners += fmt.Sprintf("%s/%s @open-telemetry/collector-contrib-approvers \n", key, strings.Repeat(" ", data.maxLength-len(key)))
+ continue LOOP
+ }
+ if stability == "deprecated" && (m.Status.Codeowners == nil || len(m.Status.Codeowners.Active) == 0) {
+ deprecatedList += key + "/\n"
+ }
+ }
+
+ if m.Status.Codeowners != nil {
+ parts := strings.Split(key, string(os.PathSeparator))
+ firstSegment := parts[0]
+ if firstSegment != currentFirstSegment {
+ currentFirstSegment = firstSegment
+ codeowners += "\n"
+ }
+ owners := ""
+ for _, owner := range m.Status.Codeowners.Active {
+ owners += " "
+ owners += "@" + owner
+ }
+ codeowners += fmt.Sprintf("%s/%s @open-telemetry/collector-contrib-approvers%s\n", key, strings.Repeat(" ", data.maxLength-len(key)), owners)
+ }
+ }
+
+ codeowners += distributionCodeownersHeader
+ longestName := 0
+ for _, dist := range data.distributions {
+ if longestName < len(dist.Name) {
+ longestName = len(dist.Name)
+ }
+ }
+
+ for _, dist := range data.distributions {
+ var maintainers []string
+ for _, m := range dist.Maintainers {
+ maintainers = append(maintainers, fmt.Sprintf("@%s", m))
+ }
+ codeowners += fmt.Sprintf("reports/distributions/%s.yaml%s @open-telemetry/collector-contrib-approvers %s\n", dist.Name, strings.Repeat(" ", longestName-len(dist.Name)), strings.Join(maintainers, " "))
+ }
+
+ err = os.WriteFile(filepath.Join(".github", "CODEOWNERS"), []byte(codeowners+unmaintainedCodeowners), 0600)
+ if err != nil {
+ return err
+ }
+ err = os.WriteFile(filepath.Join(".github", "ALLOWLIST"), []byte(allowlistHeader+deprecatedList+unmaintainedList), 0600)
+ if err != nil {
+ return err
+ }
+ return nil
+}
+
+func getGithubMembers() (map[string]struct{}, error) {
+ githubToken := os.Getenv("GITHUB_TOKEN")
+ if githubToken == "" {
+ return nil, fmt.Errorf("Set the environment variable `GITHUB_TOKEN` to a PAT token to authenticate")
+ }
+ client := github.NewTokenClient(context.Background(), githubToken)
+ var allUsers []*github.User
+ pageIndex := 0
+ for {
+ users, resp, err := client.Organizations.ListMembers(context.Background(), "open-telemetry",
+ &github.ListMembersOptions{
+ PublicOnly: false,
+ ListOptions: github.ListOptions{
+ PerPage: 50,
+ Page: pageIndex,
+ },
+ },
+ )
+ if err != nil {
+ return nil, err
+ }
+ defer resp.Body.Close()
+ if len(users) == 0 {
+ break
+ }
+ allUsers = append(allUsers, users...)
+ pageIndex++
+ }
+
+ usernames := make(map[string]struct{}, len(allUsers))
+ for _, u := range allUsers {
+ usernames[*u.Login] = struct{}{}
+ }
+ return usernames, nil
+}
diff --git a/cmd/githubgen/distributions.go b/cmd/githubgen/distributions.go
new file mode 100644
index 000000000000..c5629430b731
--- /dev/null
+++ b/cmd/githubgen/distributions.go
@@ -0,0 +1,63 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package main
+
+import (
+ "fmt"
+ "os"
+ "path/filepath"
+ "sort"
+
+ "gopkg.in/yaml.v3"
+)
+
+type distributionsGenerator struct {
+}
+
+type distOutput struct {
+ Name string `yaml:"name"`
+ URL string `yaml:"url"`
+ Maintainers []string `yaml:"maintainers"`
+ Components map[string][]string `yaml:"components"`
+}
+
+func (cg distributionsGenerator) generate(data *githubData) error {
+ for _, dist := range data.distributions {
+ components := map[string][]string{}
+ for _, c := range data.components {
+ inDistro := false
+ for _, componentDistro := range c.Status.Distributions {
+ if dist.Name == componentDistro {
+ inDistro = true
+ break
+ }
+ }
+ if inDistro {
+ array, ok := components[c.Status.Class]
+ if !ok {
+ array = []string{}
+ }
+ components[c.Status.Class] = append(array, c.Type)
+ }
+ }
+ for _, comps := range components {
+ sort.Strings(comps)
+ }
+ output := distOutput{
+ Name: dist.Name,
+ URL: dist.URL,
+ Maintainers: dist.Maintainers,
+ Components: components,
+ }
+ b, err := yaml.Marshal(output)
+ if err != nil {
+ return nil
+ }
+ err = os.WriteFile(filepath.Join("reports", "distributions", fmt.Sprintf("%s.yaml", dist.Name)), b, 0600)
+ if err != nil {
+ return nil
+ }
+ }
+ return nil
+}
diff --git a/cmd/githubgen/go.mod b/cmd/githubgen/go.mod
index 2705784918fa..4d90a143f967 100644
--- a/cmd/githubgen/go.mod
+++ b/cmd/githubgen/go.mod
@@ -1,31 +1,22 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/githubgen
-go 1.20
+go 1.21
require (
- github.com/google/go-github/v53 v53.2.0
- go.opentelemetry.io/collector/confmap v0.89.0
+ github.com/google/go-github/v61 v61.0.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0
gopkg.in/yaml.v3 v3.0.1
)
require (
- github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect
- github.com/cloudflare/circl v1.3.3 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/google/go-querystring v1.1.0 // indirect
- github.com/hashicorp/go-version v1.6.0 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
)
diff --git a/cmd/githubgen/go.sum b/cmd/githubgen/go.sum
index 16293dd248fb..d4c032860890 100644
--- a/cmd/githubgen/go.sum
+++ b/cmd/githubgen/go.sum
@@ -1,75 +1,40 @@
-github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA=
-github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g=
-github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
-github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I=
-github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs=
-github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
-github.com/google/go-github/v53 v53.2.0 h1:wvz3FyF53v4BK+AsnvCmeNhf8AkTaeh2SoYu/XUvTtI=
-github.com/google/go-github/v53 v53.2.0/go.mod h1:XhFRObz+m/l+UCm9b7KSIC3lT3NWSXGt7mOsAWEloao=
+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/go-github/v61 v61.0.0 h1:VwQCBwhyE9JclCI+22/7mLB1PuU9eowCXKY5pNlu1go=
+github.com/google/go-github/v61 v61.0.0/go.mod h1:0WR+KmsWX75G2EbpyGsGmradjo3IiciuI4BmdVCobQY=
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
-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/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/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-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/featuregate v1.0.0-rcv0018 h1:iK4muX3KIMqKk0xwKcRzu4ravgCtUdzsvuxxdz6A27g=
-go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018/go.mod h1:xGbRuw+GbutRtVVSEy3YR2yuOlEyiUMhN2M9DJljgqY=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-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/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-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.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/cmd/githubgen/issuetemplates.go b/cmd/githubgen/issuetemplates.go
new file mode 100644
index 000000000000..05fa22c38477
--- /dev/null
+++ b/cmd/githubgen/issuetemplates.go
@@ -0,0 +1,70 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+package main
+
+import (
+ "bytes"
+ "os"
+ "path/filepath"
+ "regexp"
+ "sort"
+ "strings"
+)
+
+const (
+ startComponentList = `# Start Collector components list`
+ endComponentList = `# End Collector components list`
+)
+
+func folderToShortName(folder string) string {
+ if folder == "internal/coreinternal" {
+ return "internal/core"
+ }
+ path := strings.Split(folder, "/")
+ switch path[0] {
+ case "receiver", "exporter", "extension", "processor", "connector":
+ path[1] = strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(path[1], "internal"), "extension"), "exporter"), "connector"), "processor"), "receiver")
+ path[len(path)-1] = strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(strings.TrimSuffix(path[len(path)-1], "internal"), "extension"), "exporter"), "connector"), "processor"), "receiver")
+ default:
+ }
+
+ return strings.Join(path, "/")
+}
+
+type issueTemplatesGenerator struct {
+}
+
+func (itg issueTemplatesGenerator) generate(data *githubData) error {
+ keys := map[string]struct{}{}
+ for _, f := range data.folders {
+ keys[folderToShortName(f)] = struct{}{}
+ }
+ shortNames := make([]string, 0, len(keys))
+ for k := range keys {
+ shortNames = append(shortNames, k)
+ }
+ sort.Strings(shortNames)
+ replacement := []byte(startComponentList + "\n - " + strings.Join(shortNames, "\n - ") + "\n " + endComponentList)
+ issuesFolder := filepath.Join(".github", "ISSUE_TEMPLATE")
+ entries, err := os.ReadDir(issuesFolder)
+ if err != nil {
+ return err
+ }
+ for _, e := range entries {
+ templateContents, err := os.ReadFile(filepath.Join(issuesFolder, e.Name()))
+ if err != nil {
+ return err
+ }
+ matchOldContent := regexp.MustCompile("(?s)" + startComponentList + ".*" + endComponentList)
+ oldContent := matchOldContent.FindSubmatch(templateContents)
+ if len(oldContent) > 0 {
+ templateContents = bytes.ReplaceAll(templateContents, oldContent[0], replacement)
+ err = os.WriteFile(filepath.Join(issuesFolder, e.Name()), templateContents, 0600)
+ if err != nil {
+ return err
+ }
+ }
+
+ }
+ return nil
+}
diff --git a/cmd/githubgen/main.go b/cmd/githubgen/main.go
index 7de47722cd4a..f71d3719a988 100644
--- a/cmd/githubgen/main.go
+++ b/cmd/githubgen/main.go
@@ -4,7 +4,6 @@
package main
import (
- "bytes"
"context"
"flag"
"fmt"
@@ -13,163 +12,61 @@ import (
"os"
"path/filepath"
"sort"
- "strings"
- "gopkg.in/yaml.v3"
-
- "github.com/google/go-github/v53/github"
+ "go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/provider/fileprovider"
+ "gopkg.in/yaml.v3"
)
-const maxDependabotUpdates = 220
-
-const codeownersHeader = `# Code generated by githubgen. DO NOT EDIT.
-#####################################################
-#
-# List of approvers for OpenTelemetry Collector Contrib
-#
-#####################################################
-#
-# Learn about membership in OpenTelemetry community:
-# https://github.com/open-telemetry/community/blob/main/community-membership.md
-#
-#
-# Learn about CODEOWNERS file format:
-# https://help.github.com/en/articles/about-code-owners
-#
-# NOTE: Lines should be entered in the following format:
-# /..
-# extension/oauth2clientauthextension/ @open-telemetry/collector-contrib-approvers @pavankrish123 @jpkrohling
-# Path separator and minimum of 1 space between component path and owners is
-# important for validation steps
-#
-
-* @open-telemetry/collector-contrib-approvers
-`
-
-const unmaintainedHeader = `
-
-## UNMAINTAINED components
-## The Github issue template generation code needs this to generate the corresponding labels.
-
-`
-
-const allowlistHeader = `# Code generated by githubgen. DO NOT EDIT.
-#####################################################
-#
-# List of components in OpenTelemetry Collector Contrib
-# waiting on owners to be assigned
-#
-#####################################################
-#
-# Learn about membership in OpenTelemetry community:
-# https://github.com/open-telemetry/community/blob/main/community-membership.md
-#
-#
-# Learn about CODEOWNERS file format:
-# https://help.github.com/en/articles/about-code-owners
-#
-
-##
-# NOTE: New components MUST have a codeowner. Add new components to the CODEOWNERS file instead of here.
-##
-
-## COMMON & SHARED components
-internal/common
-
-`
-
-const dependabotHeader = `# File generated by "make gendependabot"; DO NOT EDIT.
-
-`
-
const unmaintainedStatus = "unmaintained"
-// Generates files specific to Github or Dependabot according to status metadata:
+type generator interface {
+ generate(data *githubData) error
+}
+
+// Generates files specific to Github according to status metadata:
// .github/CODEOWNERS
// .github/ALLOWLIST
-// .github/dependabot.yml
+// .github/ISSUE_TEMPLATES/*.yaml (list of components)
+// reports/distributions/*
func main() {
folder := flag.String("folder", ".", "folder investigated for codeowners")
allowlistFilePath := flag.String("allowlist", "cmd/githubgen/allowlist.txt", "path to a file containing an allowlist of members outside the OpenTelemetry organization")
- dependabotOnly := flag.Bool("dependabot", false, "only generate dependabot entries")
flag.Parse()
- if err := run(*folder, *allowlistFilePath, *dependabotOnly); err != nil {
- log.Fatal(err)
- }
-}
-
-type DependabotSchedule struct {
- Interval yaml.Node `yaml:"interval"`
- Day yaml.Node `yaml:"day"`
-}
-
-type DependabotUpdate struct {
- PackageEcosystem yaml.Node `yaml:"package-ecosystem"`
- Directory yaml.Node `yaml:"directory"`
- Schedule DependabotSchedule `yaml:"schedule"`
- Priority int `yaml:"-"`
-}
-
-type DependabotData struct {
- Version int `yaml:"version"`
- Updates []DependabotUpdate `yaml:"updates"`
-}
-
-func makePriority(status *Status) int {
- // not an internal component such as pkg/**, and no distributions:
- if (status.Class == "receiver" || status.Class == "processor" || status.Class == "exporter" || status.Class == "connector" || status.Class == "extension" || status.Class == "cmd") &&
- len(status.Distributions) == 0 && status.Class != "" {
- return 1
- }
- // start with a score of 2
- maxScore := 2
- for stability := range status.Stability {
- switch stability {
- case "deprecated": // stay with 2
- case "unmaintained":
- return 1
- case "alpha":
- if maxScore < 3 {
- maxScore = 3
- }
- case "beta":
- if maxScore < 4 {
- maxScore = 4
- }
- case "stable":
- if maxScore < 5 {
- maxScore = 5
- }
+ var generators []generator
+ for _, arg := range flag.Args() {
+ switch arg {
+ case "issue-templates":
+ generators = append(generators, issueTemplatesGenerator{})
+ case "codeowners":
+ generators = append(generators, codeownersGenerator{})
+ case "distributions":
+ generators = append(generators, distributionsGenerator{})
+ default:
+ panic(fmt.Sprintf("Unknown generator: %s", arg))
}
}
- return maxScore
-}
-
-func newDependabotUpdate(directory string, priority int) DependabotUpdate {
- return DependabotUpdate{
- PackageEcosystem: yaml.Node{Value: "gomod", Style: yaml.DoubleQuotedStyle, Kind: yaml.ScalarNode},
- Directory: yaml.Node{Value: "/" + directory, Style: yaml.DoubleQuotedStyle, Kind: yaml.ScalarNode},
- Schedule: DependabotSchedule{
- Interval: yaml.Node{Value: "weekly", Style: yaml.DoubleQuotedStyle, Kind: yaml.ScalarNode},
- Day: yaml.Node{Value: "wednesday", Style: yaml.DoubleQuotedStyle, Kind: yaml.ScalarNode},
- },
- Priority: priority,
+ if len(generators) == 0 {
+ generators = []generator{issueTemplatesGenerator{}, codeownersGenerator{}}
+ }
+ if err := run(*folder, *allowlistFilePath, generators); err != nil {
+ log.Fatal(err)
}
}
-type Codeowners struct {
+type codeowners struct {
// Active codeowners
Active []string `mapstructure:"active"`
// Emeritus codeowners
Emeritus []string `mapstructure:"emeritus"`
}
+
type Status struct {
Stability map[string][]string `mapstructure:"stability"`
Distributions []string `mapstructure:"distributions"`
Class string `mapstructure:"class"`
Warnings []string `mapstructure:"warnings"`
- Codeowners *Codeowners `mapstructure:"codeowners"`
+ Codeowners *codeowners `mapstructure:"codeowners"`
}
type metadata struct {
// Type of the component.
@@ -180,8 +77,23 @@ type metadata struct {
Status *Status `mapstructure:"status"`
}
+type distributionData struct {
+ Name string `yaml:"name"`
+ URL string `yaml:"url"`
+ Maintainers []string `yaml:"maintainers,omitempty"`
+}
+
+type githubData struct {
+ folders []string
+ codeowners []string
+ allowlistFilePath string
+ maxLength int
+ components map[string]metadata
+ distributions []distributionData
+}
+
func loadMetadata(filePath string) (metadata, error) {
- cp, err := fileprovider.New().Retrieve(context.Background(), "file:"+filePath, nil)
+ cp, err := fileprovider.NewWithSettings(confmap.ProviderSettings{}).Retrieve(context.Background(), "file:"+filePath, nil)
if err != nil {
return metadata{}, err
}
@@ -192,26 +104,20 @@ func loadMetadata(filePath string) (metadata, error) {
}
md := metadata{}
- if err := conf.Unmarshal(&md); err != nil {
+ if err := conf.Unmarshal(&md, confmap.WithIgnoreUnused()); err != nil {
return md, err
}
return md, nil
}
-func run(folder string, allowlistFilePath string, dependabotOnly bool) error {
+func run(folder string, allowlistFilePath string, generators []generator) error {
components := map[string]metadata{}
var foldersList []string
- dependabotData := &DependabotData{
- Version: 2,
- Updates: []DependabotUpdate{
- newDependabotUpdate("", 5),
- },
- }
maxLength := 0
allCodeowners := map[string]struct{}{}
- err := filepath.Walk(folder, func(path string, info fs.FileInfo, err error) error {
+ err := filepath.Walk(folder, func(path string, info fs.FileInfo, _ error) error {
if info.Name() == "metadata.yaml" {
m, err := loadMetadata(path)
if err != nil {
@@ -221,13 +127,10 @@ func run(folder string, allowlistFilePath string, dependabotOnly bool) error {
return nil
}
currentFolder := filepath.Dir(path)
- key := currentFolder + "/"
+ key := currentFolder
components[key] = m
foldersList = append(foldersList, key)
- _, err = os.Stat(filepath.Join(currentFolder, "go.mod"))
- if err == nil { // go.mod file exists.
- dependabotData.Updates = append(dependabotData.Updates, newDependabotUpdate(currentFolder, makePriority(m.Status)))
- }
+
for stability := range m.Status.Stability {
if stability == unmaintainedStatus {
// do not account for unmaintained status to change the max length of the component line.
@@ -249,165 +152,37 @@ func run(folder string, allowlistFilePath string, dependabotOnly bool) error {
if err != nil {
return err
}
- if !dependabotOnly {
- if err = generateCodeownersFiles(foldersList, allCodeowners, allowlistFilePath, components, maxLength); err != nil {
- return err
- }
- }
- sort.Slice(dependabotData.Updates, func(i, j int) bool {
- return dependabotData.Updates[i].Priority > dependabotData.Updates[j].Priority
- })
- removed := dependabotData.Updates[maxDependabotUpdates:]
- dependabotData.Updates = dependabotData.Updates[:maxDependabotUpdates]
- if len(removed) > 0 {
- sort.Slice(removed, func(i, j int) bool {
- return strings.Compare(removed[i].Directory.Value, removed[j].Directory.Value) < 0
- })
- fmt.Printf("The following modules were not added to Dependabot to keep within limits of %d\n", maxDependabotUpdates)
- for _, update := range removed {
- fmt.Printf(" - %q\n", update.Directory.Value)
- }
+ sort.Strings(foldersList)
+ codeownersList := make([]string, 0, len(allCodeowners))
+ for c := range allCodeowners {
+ codeownersList = append(codeownersList, c)
}
+ sort.Strings(codeownersList)
- sort.Slice(dependabotData.Updates, func(i, j int) bool {
- return strings.Compare(dependabotData.Updates[i].Directory.Value, dependabotData.Updates[j].Directory.Value) < 0
- })
-
- var yamlContents bytes.Buffer
- encoder := yaml.NewEncoder(&yamlContents)
- encoder.SetIndent(2)
- err = encoder.Encode(dependabotData)
- if err != nil {
- return err
- }
- err = os.WriteFile(filepath.Join(".github", "dependabot.yml"), append([]byte(dependabotHeader), yamlContents.Bytes()...), 0600)
+ var distributions []distributionData
+ dd, err := os.ReadFile(filepath.Join(folder, "distributions.yaml"))
if err != nil {
return err
}
-
- return nil
-}
-
-func generateCodeownersFiles(foldersList []string, allCodeowners map[string]struct{}, allowlistFilePath string, components map[string]metadata, maxLength int) error {
- allowlistData, err := os.ReadFile(allowlistFilePath)
+ err = yaml.Unmarshal(dd, &distributions)
if err != nil {
return err
}
- allowlistLines := strings.Split(string(allowlistData), "\n")
- allowlist := make(map[string]struct{}, len(allowlistLines))
- for _, line := range allowlistLines {
- allowlist[line] = struct{}{}
+ data := &githubData{
+ folders: foldersList,
+ codeowners: codeownersList,
+ allowlistFilePath: allowlistFilePath,
+ maxLength: maxLength,
+ components: components,
+ distributions: distributions,
}
- sort.Strings(foldersList)
- var missingCodeowners []string
- var duplicateCodeowners []string
- members, err := getGithubMembers()
- if err != nil {
- return err
- }
- for codeowner := range allCodeowners {
- _, present := members[codeowner]
-
- if !present {
- _, allowed := allowlist[codeowner]
- allowed = allowed || strings.HasPrefix(codeowner, "open-telemetry/")
- if !allowed {
- missingCodeowners = append(missingCodeowners, codeowner)
- }
- } else if _, ok := allowlist[codeowner]; ok {
- duplicateCodeowners = append(duplicateCodeowners, codeowner)
- }
- }
- if len(missingCodeowners) > 0 {
- sort.Strings(missingCodeowners)
- return fmt.Errorf("codeowners are not members: %s", strings.Join(missingCodeowners, ", "))
- }
- if len(duplicateCodeowners) > 0 {
- sort.Strings(duplicateCodeowners)
- return fmt.Errorf("codeowners members duplicate in allowlist: %s", strings.Join(duplicateCodeowners, ", "))
- }
-
- codeowners := codeownersHeader
- deprecatedList := "## DEPRECATED components\n"
- unmaintainedList := "\n## UNMAINTAINED components\n"
- unmaintainedCodeowners := unmaintainedHeader
- currentFirstSegment := ""
-LOOP:
- for _, key := range foldersList {
- m := components[key]
- for stability := range m.Status.Stability {
- if stability == unmaintainedStatus {
- unmaintainedList += key + "\n"
- unmaintainedCodeowners += fmt.Sprintf("%s%s @open-telemetry/collector-contrib-approvers \n", key, strings.Repeat(" ", maxLength-len(key)))
- continue LOOP
- }
- if stability == "deprecated" && (m.Status.Codeowners == nil || len(m.Status.Codeowners.Active) == 0) {
- deprecatedList += key + "\n"
- }
- }
-
- if m.Status.Codeowners != nil {
- parts := strings.Split(key, string(os.PathSeparator))
- firstSegment := parts[0]
- if firstSegment != currentFirstSegment {
- currentFirstSegment = firstSegment
- codeowners += "\n"
- }
- owners := ""
- for _, owner := range m.Status.Codeowners.Active {
- owners += " "
- owners += "@" + owner
- }
- codeowners += fmt.Sprintf("%s%s @open-telemetry/collector-contrib-approvers%s\n", key, strings.Repeat(" ", maxLength-len(key)), owners)
+ for _, g := range generators {
+ if err = g.generate(data); err != nil {
+ return err
}
}
-
- err = os.WriteFile(filepath.Join(".github", "CODEOWNERS"), []byte(codeowners+unmaintainedCodeowners), 0600)
- if err != nil {
- return err
- }
- err = os.WriteFile(filepath.Join(".github", "ALLOWLIST"), []byte(allowlistHeader+deprecatedList+unmaintainedList), 0600)
- if err != nil {
- return err
- }
return nil
}
-
-func getGithubMembers() (map[string]struct{}, error) {
- githubToken := os.Getenv("GITHUB_TOKEN")
- if githubToken == "" {
- return nil, fmt.Errorf("Set the environment variable `GITHUB_TOKEN` to a PAT token to authenticate")
- }
- client := github.NewTokenClient(context.Background(), githubToken)
- var allUsers []*github.User
- pageIndex := 0
- for {
- users, resp, err := client.Organizations.ListMembers(context.Background(), "open-telemetry",
- &github.ListMembersOptions{
- PublicOnly: false,
- ListOptions: github.ListOptions{
- PerPage: 50,
- Page: pageIndex,
- },
- },
- )
- if err != nil {
- return nil, err
- }
- defer resp.Body.Close()
- if len(users) == 0 {
- break
- }
- allUsers = append(allUsers, users...)
- pageIndex++
- }
-
- usernames := make(map[string]struct{}, len(allUsers))
- for _, u := range allUsers {
- usernames[*u.Login] = struct{}{}
- }
- return usernames, nil
-}
diff --git a/cmd/mdatagen/README.md b/cmd/mdatagen/README.md
deleted file mode 100644
index 0ca79053de8d..000000000000
--- a/cmd/mdatagen/README.md
+++ /dev/null
@@ -1,56 +0,0 @@
-# Metadata Generator
-
-Every component's documentation should include a brief description of the component and guidance on how to use it.
-There is also some information about the component (or metadata) that should be included to help end-users understand the current state of the component and whether it is right for their use case.
-Examples of this metadata about a component are:
-
-* its stability level
-* the distributions containing it
-* the types of pipelines it supports
-* metrics emitted in the case of a scraping receiver
-
-The metadata generator defines a schema for specifying this information to ensure it is complete and well-formed.
-The metadata generator is then able to ingest the metadata, validate it against the schema and produce documentation in a standardized format.
-An example of how this generated documentation looks can be found in [documentation.md](./documentation.md).
-
-## Using the Metadata Generator
-
-In order for a component to benefit from the metadata generator (`mdatagen`) these requirements need to be met:
-1. A `metadata.yaml` file containing the metadata needs to be included in the component
-2. The component should declare a `go:generate mdatagen` directive which tells `mdatagen` what to generate
-
-As an example, here is a minimal `metadata.yaml` for the [OTLP receiver](https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver/otlpreceiver):
-```yaml
-type: otlp
-status:
- class: receiver
- stability:
- beta: [logs]
- stable: [metrics, traces]
-```
-
-Detailed information about the schema of `metadata.yaml` can be found in [metadata-schema.yaml](./metadata-schema.yaml).
-
-The `go:generate mdatagen` directive is usually defined in a `doc.go` file in the same package as the component, for example:
-```go
-//go:generate mdatagen metadata.yaml
-
-package main
-```
-
-Below are some more examples that can be used for reference:
-
-* The ElasticSearch receiver has an extensive [metadata.yaml](../../receiver/elasticsearchreceiver/metadata.yaml)
-* The host metrics receiver has internal subcomponents, each with their own `metadata.yaml` and `doc.go`. See [cpuscraper](../../receiver/hostmetricsreceiver/internal/scraper/cpuscraper) for example.
-
-You can run `cd cmd/mdatagen && $(GOCMD) install .` to install the `mdatagen` tool in `GOBIN` and then run `mdatagen metadata.yaml` to generate documentation for a specific component or you can run `make generate` to generate documentation for all components.
-
-## Contributing to the Metadata Generator
-
-The code for generating the documentation can be found in [loader.go](./loader.go) and the templates for rendering the documentation can be found in [templates](./templates).
-When making updates to the metadata generator or introducing support for new functionality:
-
-1. Ensure the [metadata-schema.yaml](./metadata-schema.yaml) and [./metadata.yaml](metadata.yaml) files reflect the changes.
-2. Run `make mdatagen-test`.
-3. Make sure all tests are passing including [generated tests](./internal/metadata/generated_metrics_test.go).
-4. Run `make generate`.
diff --git a/cmd/mdatagen/doc.go b/cmd/mdatagen/doc.go
deleted file mode 100644
index 8f1fc6a71768..000000000000
--- a/cmd/mdatagen/doc.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-// Generate a test metrics builder from a sample metrics set covering all configuration options.
-//go:generate mdatagen metadata-sample.yaml
-
-package main
diff --git a/cmd/mdatagen/documentation.md b/cmd/mdatagen/documentation.md
deleted file mode 100644
index 1955e0815351..000000000000
--- a/cmd/mdatagen/documentation.md
+++ /dev/null
@@ -1,96 +0,0 @@
-[comment]: <> (Code generated by mdatagen. DO NOT EDIT.)
-
-# file
-
-## Default Metrics
-
-The following metrics are emitted by default. Each of them can be disabled by applying the following configuration:
-
-```yaml
-metrics:
- :
- enabled: false
-```
-
-### default.metric
-
-Monotonic cumulative sum int metric enabled by default.
-
-The metric will be become optional soon.
-
-| Unit | Metric Type | Value Type | Aggregation Temporality | Monotonic |
-| ---- | ----------- | ---------- | ----------------------- | --------- |
-| s | Sum | Int | Cumulative | true |
-
-#### Attributes
-
-| Name | Description | Values |
-| ---- | ----------- | ------ |
-| string_attr | Attribute with any string value. | Any Str |
-| state | Integer attribute with overridden name. | Any Int |
-| enum_attr | Attribute with a known set of string values. | Str: ``red``, ``green``, ``blue`` |
-| slice_attr | Attribute with a slice value. | Any Slice |
-| map_attr | Attribute with a map value. | Any Map |
-
-### default.metric.to_be_removed
-
-[DEPRECATED] Non-monotonic delta sum double metric enabled by default.
-
-The metric will be will be removed soon.
-
-| Unit | Metric Type | Value Type | Aggregation Temporality | Monotonic |
-| ---- | ----------- | ---------- | ----------------------- | --------- |
-| s | Sum | Double | Delta | false |
-
-## Optional Metrics
-
-The following metrics are not emitted by default. Each of them can be enabled by applying the following configuration:
-
-```yaml
-metrics:
- :
- enabled: true
-```
-
-### optional.metric
-
-[DEPRECATED] Gauge double metric disabled by default.
-
-| Unit | Metric Type | Value Type |
-| ---- | ----------- | ---------- |
-| 1 | Gauge | Double |
-
-#### Attributes
-
-| Name | Description | Values |
-| ---- | ----------- | ------ |
-| string_attr | Attribute with any string value. | Any Str |
-| boolean_attr | Attribute with a boolean value. | Any Bool |
-
-### optional.metric.empty_unit
-
-[DEPRECATED] Gauge double metric disabled by default.
-
-| Unit | Metric Type | Value Type |
-| ---- | ----------- | ---------- |
-| | Gauge | Double |
-
-#### Attributes
-
-| Name | Description | Values |
-| ---- | ----------- | ------ |
-| string_attr | Attribute with any string value. | Any Str |
-| boolean_attr | Attribute with a boolean value. | Any Bool |
-
-## Resource Attributes
-
-| Name | Description | Values | Enabled |
-| ---- | ----------- | ------ | ------- |
-| map.resource.attr | Resource attribute with a map value. | Any Map | true |
-| optional.resource.attr | Explicitly disabled ResourceAttribute. | Any Str | false |
-| slice.resource.attr | Resource attribute with a slice value. | Any Slice | true |
-| string.enum.resource.attr | Resource attribute with a known set of string values. | Str: ``one``, ``two`` | true |
-| string.resource.attr | Resource attribute with any string value. | Any Str | true |
-| string.resource.attr_disable_warning | Resource attribute with any string value. | Any Str | true |
-| string.resource.attr_remove_warning | Resource attribute with any string value. | Any Str | false |
-| string.resource.attr_to_be_removed | Resource attribute with any string value. | Any Str | true |
diff --git a/cmd/mdatagen/embeded_templates.go b/cmd/mdatagen/embeded_templates.go
deleted file mode 100644
index dace6c43f320..000000000000
--- a/cmd/mdatagen/embeded_templates.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import "embed"
-
-// templateFS ensures that the files needed
-// to generate metadata as an embedded filesystem since
-// `go get` doesn't require these files to be downloaded.
-//
-//go:embed templates/*.tmpl templates/testdata/*.tmpl
-var templateFS embed.FS
diff --git a/cmd/mdatagen/embeded_templates_test.go b/cmd/mdatagen/embeded_templates_test.go
deleted file mode 100644
index 0ffd6a1b5cba..000000000000
--- a/cmd/mdatagen/embeded_templates_test.go
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "io/fs"
- "path"
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestEnsureTemplatesLoaded(t *testing.T) {
- t.Parallel()
-
- const (
- rootDir = "templates"
- )
-
- var (
- templateFiles = map[string]struct{}{
- path.Join(rootDir, "documentation.md.tmpl"): {},
- path.Join(rootDir, "metrics.go.tmpl"): {},
- path.Join(rootDir, "metrics_test.go.tmpl"): {},
- path.Join(rootDir, "resource.go.tmpl"): {},
- path.Join(rootDir, "resource_test.go.tmpl"): {},
- path.Join(rootDir, "config.go.tmpl"): {},
- path.Join(rootDir, "config_test.go.tmpl"): {},
- path.Join(rootDir, "readme.md.tmpl"): {},
- path.Join(rootDir, "status.go.tmpl"): {},
- path.Join(rootDir, "testdata", "config.yaml.tmpl"): {},
- }
- count = 0
- )
- assert.NoError(t, fs.WalkDir(templateFS, ".", func(path string, d fs.DirEntry, err error) error {
- if d != nil && d.IsDir() {
- return nil
- }
- count++
- assert.Contains(t, templateFiles, path)
- return nil
- }))
- assert.Equal(t, len(templateFiles), count, "Must match the expected number of calls")
-
-}
diff --git a/cmd/mdatagen/go.mod b/cmd/mdatagen/go.mod
deleted file mode 100644
index 01ea78b2ced8..000000000000
--- a/cmd/mdatagen/go.mod
+++ /dev/null
@@ -1,51 +0,0 @@
-module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/mdatagen
-
-go 1.20
-
-require (
- github.com/google/go-cmp v0.6.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/receiver v0.89.0
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
- golang.org/x/text v0.14.0
-)
-
-require (
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
- github.com/json-iterator/go v1.1.12 // 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/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
- github.com/mitchellh/reflectwalk v1.0.2 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
- gopkg.in/yaml.v3 v3.0.1 // indirect
-)
-
-retract (
- v0.76.2
- v0.76.1
- v0.65.0
-)
diff --git a/cmd/mdatagen/internal/metadata/generated_config.go b/cmd/mdatagen/internal/metadata/generated_config.go
deleted file mode 100644
index ac4e46cd1785..000000000000
--- a/cmd/mdatagen/internal/metadata/generated_config.go
+++ /dev/null
@@ -1,122 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import "go.opentelemetry.io/collector/confmap"
-
-// MetricConfig provides common config for a particular metric.
-type MetricConfig struct {
- Enabled bool `mapstructure:"enabled"`
-
- enabledSetByUser bool
-}
-
-func (ms *MetricConfig) Unmarshal(parser *confmap.Conf) error {
- if parser == nil {
- return nil
- }
- err := parser.Unmarshal(ms, confmap.WithErrorUnused())
- if err != nil {
- return err
- }
- ms.enabledSetByUser = parser.IsSet("enabled")
- return nil
-}
-
-// MetricsConfig provides config for file metrics.
-type MetricsConfig struct {
- DefaultMetric MetricConfig `mapstructure:"default.metric"`
- DefaultMetricToBeRemoved MetricConfig `mapstructure:"default.metric.to_be_removed"`
- OptionalMetric MetricConfig `mapstructure:"optional.metric"`
- OptionalMetricEmptyUnit MetricConfig `mapstructure:"optional.metric.empty_unit"`
-}
-
-func DefaultMetricsConfig() MetricsConfig {
- return MetricsConfig{
- DefaultMetric: MetricConfig{
- Enabled: true,
- },
- DefaultMetricToBeRemoved: MetricConfig{
- Enabled: true,
- },
- OptionalMetric: MetricConfig{
- Enabled: false,
- },
- OptionalMetricEmptyUnit: MetricConfig{
- Enabled: false,
- },
- }
-}
-
-// ResourceAttributeConfig provides common config for a particular resource attribute.
-type ResourceAttributeConfig struct {
- Enabled bool `mapstructure:"enabled"`
-
- enabledSetByUser bool
-}
-
-func (rac *ResourceAttributeConfig) Unmarshal(parser *confmap.Conf) error {
- if parser == nil {
- return nil
- }
- err := parser.Unmarshal(rac, confmap.WithErrorUnused())
- if err != nil {
- return err
- }
- rac.enabledSetByUser = parser.IsSet("enabled")
- return nil
-}
-
-// ResourceAttributesConfig provides config for file resource attributes.
-type ResourceAttributesConfig struct {
- MapResourceAttr ResourceAttributeConfig `mapstructure:"map.resource.attr"`
- OptionalResourceAttr ResourceAttributeConfig `mapstructure:"optional.resource.attr"`
- SliceResourceAttr ResourceAttributeConfig `mapstructure:"slice.resource.attr"`
- StringEnumResourceAttr ResourceAttributeConfig `mapstructure:"string.enum.resource.attr"`
- StringResourceAttr ResourceAttributeConfig `mapstructure:"string.resource.attr"`
- StringResourceAttrDisableWarning ResourceAttributeConfig `mapstructure:"string.resource.attr_disable_warning"`
- StringResourceAttrRemoveWarning ResourceAttributeConfig `mapstructure:"string.resource.attr_remove_warning"`
- StringResourceAttrToBeRemoved ResourceAttributeConfig `mapstructure:"string.resource.attr_to_be_removed"`
-}
-
-func DefaultResourceAttributesConfig() ResourceAttributesConfig {
- return ResourceAttributesConfig{
- MapResourceAttr: ResourceAttributeConfig{
- Enabled: true,
- },
- OptionalResourceAttr: ResourceAttributeConfig{
- Enabled: false,
- },
- SliceResourceAttr: ResourceAttributeConfig{
- Enabled: true,
- },
- StringEnumResourceAttr: ResourceAttributeConfig{
- Enabled: true,
- },
- StringResourceAttr: ResourceAttributeConfig{
- Enabled: true,
- },
- StringResourceAttrDisableWarning: ResourceAttributeConfig{
- Enabled: true,
- },
- StringResourceAttrRemoveWarning: ResourceAttributeConfig{
- Enabled: false,
- },
- StringResourceAttrToBeRemoved: ResourceAttributeConfig{
- Enabled: true,
- },
- }
-}
-
-// MetricsBuilderConfig is a configuration for file metrics builder.
-type MetricsBuilderConfig struct {
- Metrics MetricsConfig `mapstructure:"metrics"`
- ResourceAttributes ResourceAttributesConfig `mapstructure:"resource_attributes"`
-}
-
-func DefaultMetricsBuilderConfig() MetricsBuilderConfig {
- return MetricsBuilderConfig{
- Metrics: DefaultMetricsConfig(),
- ResourceAttributes: DefaultResourceAttributesConfig(),
- }
-}
diff --git a/cmd/mdatagen/internal/metadata/generated_config_test.go b/cmd/mdatagen/internal/metadata/generated_config_test.go
deleted file mode 100644
index fd755c25eab3..000000000000
--- a/cmd/mdatagen/internal/metadata/generated_config_test.go
+++ /dev/null
@@ -1,144 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "path/filepath"
- "testing"
-
- "github.com/google/go-cmp/cmp"
- "github.com/google/go-cmp/cmp/cmpopts"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/confmap/confmaptest"
-)
-
-func TestMetricsBuilderConfig(t *testing.T) {
- tests := []struct {
- name string
- want MetricsBuilderConfig
- }{
- {
- name: "default",
- want: DefaultMetricsBuilderConfig(),
- },
- {
- name: "all_set",
- want: MetricsBuilderConfig{
- Metrics: MetricsConfig{
- DefaultMetric: MetricConfig{Enabled: true},
- DefaultMetricToBeRemoved: MetricConfig{Enabled: true},
- OptionalMetric: MetricConfig{Enabled: true},
- OptionalMetricEmptyUnit: MetricConfig{Enabled: true},
- },
- ResourceAttributes: ResourceAttributesConfig{
- MapResourceAttr: ResourceAttributeConfig{Enabled: true},
- OptionalResourceAttr: ResourceAttributeConfig{Enabled: true},
- SliceResourceAttr: ResourceAttributeConfig{Enabled: true},
- StringEnumResourceAttr: ResourceAttributeConfig{Enabled: true},
- StringResourceAttr: ResourceAttributeConfig{Enabled: true},
- StringResourceAttrDisableWarning: ResourceAttributeConfig{Enabled: true},
- StringResourceAttrRemoveWarning: ResourceAttributeConfig{Enabled: true},
- StringResourceAttrToBeRemoved: ResourceAttributeConfig{Enabled: true},
- },
- },
- },
- {
- name: "none_set",
- want: MetricsBuilderConfig{
- Metrics: MetricsConfig{
- DefaultMetric: MetricConfig{Enabled: false},
- DefaultMetricToBeRemoved: MetricConfig{Enabled: false},
- OptionalMetric: MetricConfig{Enabled: false},
- OptionalMetricEmptyUnit: MetricConfig{Enabled: false},
- },
- ResourceAttributes: ResourceAttributesConfig{
- MapResourceAttr: ResourceAttributeConfig{Enabled: false},
- OptionalResourceAttr: ResourceAttributeConfig{Enabled: false},
- SliceResourceAttr: ResourceAttributeConfig{Enabled: false},
- StringEnumResourceAttr: ResourceAttributeConfig{Enabled: false},
- StringResourceAttr: ResourceAttributeConfig{Enabled: false},
- StringResourceAttrDisableWarning: ResourceAttributeConfig{Enabled: false},
- StringResourceAttrRemoveWarning: ResourceAttributeConfig{Enabled: false},
- StringResourceAttrToBeRemoved: ResourceAttributeConfig{Enabled: false},
- },
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- cfg := loadMetricsBuilderConfig(t, tt.name)
- if diff := cmp.Diff(tt.want, cfg, cmpopts.IgnoreUnexported(MetricConfig{}, ResourceAttributeConfig{})); diff != "" {
- t.Errorf("Config mismatch (-expected +actual):\n%s", diff)
- }
- })
- }
-}
-
-func loadMetricsBuilderConfig(t *testing.T, name string) MetricsBuilderConfig {
- cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
- require.NoError(t, err)
- sub, err := cm.Sub(name)
- require.NoError(t, err)
- cfg := DefaultMetricsBuilderConfig()
- require.NoError(t, component.UnmarshalConfig(sub, &cfg))
- return cfg
-}
-
-func TestResourceAttributesConfig(t *testing.T) {
- tests := []struct {
- name string
- want ResourceAttributesConfig
- }{
- {
- name: "default",
- want: DefaultResourceAttributesConfig(),
- },
- {
- name: "all_set",
- want: ResourceAttributesConfig{
- MapResourceAttr: ResourceAttributeConfig{Enabled: true},
- OptionalResourceAttr: ResourceAttributeConfig{Enabled: true},
- SliceResourceAttr: ResourceAttributeConfig{Enabled: true},
- StringEnumResourceAttr: ResourceAttributeConfig{Enabled: true},
- StringResourceAttr: ResourceAttributeConfig{Enabled: true},
- StringResourceAttrDisableWarning: ResourceAttributeConfig{Enabled: true},
- StringResourceAttrRemoveWarning: ResourceAttributeConfig{Enabled: true},
- StringResourceAttrToBeRemoved: ResourceAttributeConfig{Enabled: true},
- },
- },
- {
- name: "none_set",
- want: ResourceAttributesConfig{
- MapResourceAttr: ResourceAttributeConfig{Enabled: false},
- OptionalResourceAttr: ResourceAttributeConfig{Enabled: false},
- SliceResourceAttr: ResourceAttributeConfig{Enabled: false},
- StringEnumResourceAttr: ResourceAttributeConfig{Enabled: false},
- StringResourceAttr: ResourceAttributeConfig{Enabled: false},
- StringResourceAttrDisableWarning: ResourceAttributeConfig{Enabled: false},
- StringResourceAttrRemoveWarning: ResourceAttributeConfig{Enabled: false},
- StringResourceAttrToBeRemoved: ResourceAttributeConfig{Enabled: false},
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- cfg := loadResourceAttributesConfig(t, tt.name)
- if diff := cmp.Diff(tt.want, cfg, cmpopts.IgnoreUnexported(ResourceAttributeConfig{})); diff != "" {
- t.Errorf("Config mismatch (-expected +actual):\n%s", diff)
- }
- })
- }
-}
-
-func loadResourceAttributesConfig(t *testing.T, name string) ResourceAttributesConfig {
- cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
- require.NoError(t, err)
- sub, err := cm.Sub(name)
- require.NoError(t, err)
- sub, err = sub.Sub("resource_attributes")
- require.NoError(t, err)
- cfg := DefaultResourceAttributesConfig()
- require.NoError(t, component.UnmarshalConfig(sub, &cfg))
- return cfg
-}
diff --git a/cmd/mdatagen/internal/metadata/generated_metrics.go b/cmd/mdatagen/internal/metadata/generated_metrics.go
deleted file mode 100644
index a52195c69df9..000000000000
--- a/cmd/mdatagen/internal/metadata/generated_metrics.go
+++ /dev/null
@@ -1,425 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "time"
-
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/pmetric"
- "go.opentelemetry.io/collector/receiver"
- conventions "go.opentelemetry.io/collector/semconv/v1.9.0"
-)
-
-// AttributeEnumAttr specifies the a value enum_attr attribute.
-type AttributeEnumAttr int
-
-const (
- _ AttributeEnumAttr = iota
- AttributeEnumAttrRed
- AttributeEnumAttrGreen
- AttributeEnumAttrBlue
-)
-
-// String returns the string representation of the AttributeEnumAttr.
-func (av AttributeEnumAttr) String() string {
- switch av {
- case AttributeEnumAttrRed:
- return "red"
- case AttributeEnumAttrGreen:
- return "green"
- case AttributeEnumAttrBlue:
- return "blue"
- }
- return ""
-}
-
-// MapAttributeEnumAttr is a helper map of string to AttributeEnumAttr attribute value.
-var MapAttributeEnumAttr = map[string]AttributeEnumAttr{
- "red": AttributeEnumAttrRed,
- "green": AttributeEnumAttrGreen,
- "blue": AttributeEnumAttrBlue,
-}
-
-type metricDefaultMetric struct {
- data pmetric.Metric // data buffer for generated metric.
- config MetricConfig // metric config provided by user.
- capacity int // max observed number of data points added to the metric.
-}
-
-// init fills default.metric metric with initial data.
-func (m *metricDefaultMetric) init() {
- m.data.SetName("default.metric")
- m.data.SetDescription("Monotonic cumulative sum int metric enabled by default.")
- m.data.SetUnit("s")
- m.data.SetEmptySum()
- m.data.Sum().SetIsMonotonic(true)
- m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative)
- m.data.Sum().DataPoints().EnsureCapacity(m.capacity)
-}
-
-func (m *metricDefaultMetric) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val int64, stringAttrAttributeValue string, overriddenIntAttrAttributeValue int64, enumAttrAttributeValue string, sliceAttrAttributeValue []any, mapAttrAttributeValue map[string]any) {
- if !m.config.Enabled {
- return
- }
- dp := m.data.Sum().DataPoints().AppendEmpty()
- dp.SetStartTimestamp(start)
- dp.SetTimestamp(ts)
- dp.SetIntValue(val)
- dp.Attributes().PutStr("string_attr", stringAttrAttributeValue)
- dp.Attributes().PutInt("state", overriddenIntAttrAttributeValue)
- dp.Attributes().PutStr("enum_attr", enumAttrAttributeValue)
- dp.Attributes().PutEmptySlice("slice_attr").FromRaw(sliceAttrAttributeValue)
- dp.Attributes().PutEmptyMap("map_attr").FromRaw(mapAttrAttributeValue)
-}
-
-// updateCapacity saves max length of data point slices that will be used for the slice capacity.
-func (m *metricDefaultMetric) updateCapacity() {
- if m.data.Sum().DataPoints().Len() > m.capacity {
- m.capacity = m.data.Sum().DataPoints().Len()
- }
-}
-
-// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points.
-func (m *metricDefaultMetric) emit(metrics pmetric.MetricSlice) {
- if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 {
- m.updateCapacity()
- m.data.MoveTo(metrics.AppendEmpty())
- m.init()
- }
-}
-
-func newMetricDefaultMetric(cfg MetricConfig) metricDefaultMetric {
- m := metricDefaultMetric{config: cfg}
- if cfg.Enabled {
- m.data = pmetric.NewMetric()
- m.init()
- }
- return m
-}
-
-type metricDefaultMetricToBeRemoved struct {
- data pmetric.Metric // data buffer for generated metric.
- config MetricConfig // metric config provided by user.
- capacity int // max observed number of data points added to the metric.
-}
-
-// init fills default.metric.to_be_removed metric with initial data.
-func (m *metricDefaultMetricToBeRemoved) init() {
- m.data.SetName("default.metric.to_be_removed")
- m.data.SetDescription("[DEPRECATED] Non-monotonic delta sum double metric enabled by default.")
- m.data.SetUnit("s")
- m.data.SetEmptySum()
- m.data.Sum().SetIsMonotonic(false)
- m.data.Sum().SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
-}
-
-func (m *metricDefaultMetricToBeRemoved) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val float64) {
- if !m.config.Enabled {
- return
- }
- dp := m.data.Sum().DataPoints().AppendEmpty()
- dp.SetStartTimestamp(start)
- dp.SetTimestamp(ts)
- dp.SetDoubleValue(val)
-}
-
-// updateCapacity saves max length of data point slices that will be used for the slice capacity.
-func (m *metricDefaultMetricToBeRemoved) updateCapacity() {
- if m.data.Sum().DataPoints().Len() > m.capacity {
- m.capacity = m.data.Sum().DataPoints().Len()
- }
-}
-
-// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points.
-func (m *metricDefaultMetricToBeRemoved) emit(metrics pmetric.MetricSlice) {
- if m.config.Enabled && m.data.Sum().DataPoints().Len() > 0 {
- m.updateCapacity()
- m.data.MoveTo(metrics.AppendEmpty())
- m.init()
- }
-}
-
-func newMetricDefaultMetricToBeRemoved(cfg MetricConfig) metricDefaultMetricToBeRemoved {
- m := metricDefaultMetricToBeRemoved{config: cfg}
- if cfg.Enabled {
- m.data = pmetric.NewMetric()
- m.init()
- }
- return m
-}
-
-type metricOptionalMetric struct {
- data pmetric.Metric // data buffer for generated metric.
- config MetricConfig // metric config provided by user.
- capacity int // max observed number of data points added to the metric.
-}
-
-// init fills optional.metric metric with initial data.
-func (m *metricOptionalMetric) init() {
- m.data.SetName("optional.metric")
- m.data.SetDescription("[DEPRECATED] Gauge double metric disabled by default.")
- m.data.SetUnit("1")
- m.data.SetEmptyGauge()
- m.data.Gauge().DataPoints().EnsureCapacity(m.capacity)
-}
-
-func (m *metricOptionalMetric) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val float64, stringAttrAttributeValue string, booleanAttrAttributeValue bool) {
- if !m.config.Enabled {
- return
- }
- dp := m.data.Gauge().DataPoints().AppendEmpty()
- dp.SetStartTimestamp(start)
- dp.SetTimestamp(ts)
- dp.SetDoubleValue(val)
- dp.Attributes().PutStr("string_attr", stringAttrAttributeValue)
- dp.Attributes().PutBool("boolean_attr", booleanAttrAttributeValue)
-}
-
-// updateCapacity saves max length of data point slices that will be used for the slice capacity.
-func (m *metricOptionalMetric) updateCapacity() {
- if m.data.Gauge().DataPoints().Len() > m.capacity {
- m.capacity = m.data.Gauge().DataPoints().Len()
- }
-}
-
-// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points.
-func (m *metricOptionalMetric) emit(metrics pmetric.MetricSlice) {
- if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 {
- m.updateCapacity()
- m.data.MoveTo(metrics.AppendEmpty())
- m.init()
- }
-}
-
-func newMetricOptionalMetric(cfg MetricConfig) metricOptionalMetric {
- m := metricOptionalMetric{config: cfg}
- if cfg.Enabled {
- m.data = pmetric.NewMetric()
- m.init()
- }
- return m
-}
-
-type metricOptionalMetricEmptyUnit struct {
- data pmetric.Metric // data buffer for generated metric.
- config MetricConfig // metric config provided by user.
- capacity int // max observed number of data points added to the metric.
-}
-
-// init fills optional.metric.empty_unit metric with initial data.
-func (m *metricOptionalMetricEmptyUnit) init() {
- m.data.SetName("optional.metric.empty_unit")
- m.data.SetDescription("[DEPRECATED] Gauge double metric disabled by default.")
- m.data.SetUnit("")
- m.data.SetEmptyGauge()
- m.data.Gauge().DataPoints().EnsureCapacity(m.capacity)
-}
-
-func (m *metricOptionalMetricEmptyUnit) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val float64, stringAttrAttributeValue string, booleanAttrAttributeValue bool) {
- if !m.config.Enabled {
- return
- }
- dp := m.data.Gauge().DataPoints().AppendEmpty()
- dp.SetStartTimestamp(start)
- dp.SetTimestamp(ts)
- dp.SetDoubleValue(val)
- dp.Attributes().PutStr("string_attr", stringAttrAttributeValue)
- dp.Attributes().PutBool("boolean_attr", booleanAttrAttributeValue)
-}
-
-// updateCapacity saves max length of data point slices that will be used for the slice capacity.
-func (m *metricOptionalMetricEmptyUnit) updateCapacity() {
- if m.data.Gauge().DataPoints().Len() > m.capacity {
- m.capacity = m.data.Gauge().DataPoints().Len()
- }
-}
-
-// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points.
-func (m *metricOptionalMetricEmptyUnit) emit(metrics pmetric.MetricSlice) {
- if m.config.Enabled && m.data.Gauge().DataPoints().Len() > 0 {
- m.updateCapacity()
- m.data.MoveTo(metrics.AppendEmpty())
- m.init()
- }
-}
-
-func newMetricOptionalMetricEmptyUnit(cfg MetricConfig) metricOptionalMetricEmptyUnit {
- m := metricOptionalMetricEmptyUnit{config: cfg}
- if cfg.Enabled {
- m.data = pmetric.NewMetric()
- m.init()
- }
- return m
-}
-
-// MetricsBuilder provides an interface for scrapers to report metrics while taking care of all the transformations
-// required to produce metric representation defined in metadata and user config.
-type MetricsBuilder struct {
- config MetricsBuilderConfig // config of the metrics builder.
- startTime pcommon.Timestamp // start time that will be applied to all recorded data points.
- metricsCapacity int // maximum observed number of metrics per resource.
- metricsBuffer pmetric.Metrics // accumulates metrics data before emitting.
- buildInfo component.BuildInfo // contains version information.
- metricDefaultMetric metricDefaultMetric
- metricDefaultMetricToBeRemoved metricDefaultMetricToBeRemoved
- metricOptionalMetric metricOptionalMetric
- metricOptionalMetricEmptyUnit metricOptionalMetricEmptyUnit
-}
-
-// metricBuilderOption applies changes to default metrics builder.
-type metricBuilderOption func(*MetricsBuilder)
-
-// WithStartTime sets startTime on the metrics builder.
-func WithStartTime(startTime pcommon.Timestamp) metricBuilderOption {
- return func(mb *MetricsBuilder) {
- mb.startTime = startTime
- }
-}
-
-func NewMetricsBuilder(mbc MetricsBuilderConfig, settings receiver.CreateSettings, options ...metricBuilderOption) *MetricsBuilder {
- if !mbc.Metrics.DefaultMetric.enabledSetByUser {
- settings.Logger.Warn("[WARNING] Please set `enabled` field explicitly for `default.metric`: This metric will be disabled by default soon.")
- }
- if mbc.Metrics.DefaultMetricToBeRemoved.Enabled {
- settings.Logger.Warn("[WARNING] `default.metric.to_be_removed` should not be enabled: This metric is deprecated and will be removed soon.")
- }
- if mbc.Metrics.OptionalMetric.enabledSetByUser {
- settings.Logger.Warn("[WARNING] `optional.metric` should not be configured: This metric is deprecated and will be removed soon.")
- }
- if mbc.Metrics.OptionalMetricEmptyUnit.enabledSetByUser {
- settings.Logger.Warn("[WARNING] `optional.metric.empty_unit` should not be configured: This metric is deprecated and will be removed soon.")
- }
- if !mbc.ResourceAttributes.StringResourceAttrDisableWarning.enabledSetByUser {
- settings.Logger.Warn("[WARNING] Please set `enabled` field explicitly for `string.resource.attr_disable_warning`: This resource_attribute will be disabled by default soon.")
- }
- if mbc.ResourceAttributes.StringResourceAttrRemoveWarning.enabledSetByUser {
- settings.Logger.Warn("[WARNING] `string.resource.attr_remove_warning` should not be configured: This resource_attribute is deprecated and will be removed soon.")
- }
- if mbc.ResourceAttributes.StringResourceAttrToBeRemoved.Enabled {
- settings.Logger.Warn("[WARNING] `string.resource.attr_to_be_removed` should not be enabled: This resource_attribute is deprecated and will be removed soon.")
- }
- mb := &MetricsBuilder{
- config: mbc,
- startTime: pcommon.NewTimestampFromTime(time.Now()),
- metricsBuffer: pmetric.NewMetrics(),
- buildInfo: settings.BuildInfo,
- metricDefaultMetric: newMetricDefaultMetric(mbc.Metrics.DefaultMetric),
- metricDefaultMetricToBeRemoved: newMetricDefaultMetricToBeRemoved(mbc.Metrics.DefaultMetricToBeRemoved),
- metricOptionalMetric: newMetricOptionalMetric(mbc.Metrics.OptionalMetric),
- metricOptionalMetricEmptyUnit: newMetricOptionalMetricEmptyUnit(mbc.Metrics.OptionalMetricEmptyUnit),
- }
- for _, op := range options {
- op(mb)
- }
- return mb
-}
-
-// NewResourceBuilder returns a new resource builder that should be used to build a resource associated with for the emitted metrics.
-func (mb *MetricsBuilder) NewResourceBuilder() *ResourceBuilder {
- return NewResourceBuilder(mb.config.ResourceAttributes)
-}
-
-// updateCapacity updates max length of metrics and resource attributes that will be used for the slice capacity.
-func (mb *MetricsBuilder) updateCapacity(rm pmetric.ResourceMetrics) {
- if mb.metricsCapacity < rm.ScopeMetrics().At(0).Metrics().Len() {
- mb.metricsCapacity = rm.ScopeMetrics().At(0).Metrics().Len()
- }
-}
-
-// ResourceMetricsOption applies changes to provided resource metrics.
-type ResourceMetricsOption func(pmetric.ResourceMetrics)
-
-// WithResource sets the provided resource on the emitted ResourceMetrics.
-// It's recommended to use ResourceBuilder to create the resource.
-func WithResource(res pcommon.Resource) ResourceMetricsOption {
- return func(rm pmetric.ResourceMetrics) {
- res.CopyTo(rm.Resource())
- }
-}
-
-// WithStartTimeOverride overrides start time for all the resource metrics data points.
-// This option should be only used if different start time has to be set on metrics coming from different resources.
-func WithStartTimeOverride(start pcommon.Timestamp) ResourceMetricsOption {
- return func(rm pmetric.ResourceMetrics) {
- var dps pmetric.NumberDataPointSlice
- metrics := rm.ScopeMetrics().At(0).Metrics()
- for i := 0; i < metrics.Len(); i++ {
- switch metrics.At(i).Type() {
- case pmetric.MetricTypeGauge:
- dps = metrics.At(i).Gauge().DataPoints()
- case pmetric.MetricTypeSum:
- dps = metrics.At(i).Sum().DataPoints()
- }
- for j := 0; j < dps.Len(); j++ {
- dps.At(j).SetStartTimestamp(start)
- }
- }
- }
-}
-
-// EmitForResource saves all the generated metrics under a new resource and updates the internal state to be ready for
-// recording another set of data points as part of another resource. This function can be helpful when one scraper
-// needs to emit metrics from several resources. Otherwise calling this function is not required,
-// just `Emit` function can be called instead.
-// Resource attributes should be provided as ResourceMetricsOption arguments.
-func (mb *MetricsBuilder) EmitForResource(rmo ...ResourceMetricsOption) {
- rm := pmetric.NewResourceMetrics()
- rm.SetSchemaUrl(conventions.SchemaURL)
- ils := rm.ScopeMetrics().AppendEmpty()
- ils.Scope().SetName("otelcol")
- ils.Scope().SetVersion(mb.buildInfo.Version)
- ils.Metrics().EnsureCapacity(mb.metricsCapacity)
- mb.metricDefaultMetric.emit(ils.Metrics())
- mb.metricDefaultMetricToBeRemoved.emit(ils.Metrics())
- mb.metricOptionalMetric.emit(ils.Metrics())
- mb.metricOptionalMetricEmptyUnit.emit(ils.Metrics())
-
- for _, op := range rmo {
- op(rm)
- }
- if ils.Metrics().Len() > 0 {
- mb.updateCapacity(rm)
- rm.MoveTo(mb.metricsBuffer.ResourceMetrics().AppendEmpty())
- }
-}
-
-// Emit returns all the metrics accumulated by the metrics builder and updates the internal state to be ready for
-// recording another set of metrics. This function will be responsible for applying all the transformations required to
-// produce metric representation defined in metadata and user config, e.g. delta or cumulative.
-func (mb *MetricsBuilder) Emit(rmo ...ResourceMetricsOption) pmetric.Metrics {
- mb.EmitForResource(rmo...)
- metrics := mb.metricsBuffer
- mb.metricsBuffer = pmetric.NewMetrics()
- return metrics
-}
-
-// RecordDefaultMetricDataPoint adds a data point to default.metric metric.
-func (mb *MetricsBuilder) RecordDefaultMetricDataPoint(ts pcommon.Timestamp, val int64, stringAttrAttributeValue string, overriddenIntAttrAttributeValue int64, enumAttrAttributeValue AttributeEnumAttr, sliceAttrAttributeValue []any, mapAttrAttributeValue map[string]any) {
- mb.metricDefaultMetric.recordDataPoint(mb.startTime, ts, val, stringAttrAttributeValue, overriddenIntAttrAttributeValue, enumAttrAttributeValue.String(), sliceAttrAttributeValue, mapAttrAttributeValue)
-}
-
-// RecordDefaultMetricToBeRemovedDataPoint adds a data point to default.metric.to_be_removed metric.
-func (mb *MetricsBuilder) RecordDefaultMetricToBeRemovedDataPoint(ts pcommon.Timestamp, val float64) {
- mb.metricDefaultMetricToBeRemoved.recordDataPoint(mb.startTime, ts, val)
-}
-
-// RecordOptionalMetricDataPoint adds a data point to optional.metric metric.
-func (mb *MetricsBuilder) RecordOptionalMetricDataPoint(ts pcommon.Timestamp, val float64, stringAttrAttributeValue string, booleanAttrAttributeValue bool) {
- mb.metricOptionalMetric.recordDataPoint(mb.startTime, ts, val, stringAttrAttributeValue, booleanAttrAttributeValue)
-}
-
-// RecordOptionalMetricEmptyUnitDataPoint adds a data point to optional.metric.empty_unit metric.
-func (mb *MetricsBuilder) RecordOptionalMetricEmptyUnitDataPoint(ts pcommon.Timestamp, val float64, stringAttrAttributeValue string, booleanAttrAttributeValue bool) {
- mb.metricOptionalMetricEmptyUnit.recordDataPoint(mb.startTime, ts, val, stringAttrAttributeValue, booleanAttrAttributeValue)
-}
-
-// Reset resets metrics builder to its initial state. It should be used when external metrics source is restarted,
-// and metrics builder should update its startTime and reset it's internal state accordingly.
-func (mb *MetricsBuilder) Reset(options ...metricBuilderOption) {
- mb.startTime = pcommon.NewTimestampFromTime(time.Now())
- for _, op := range options {
- op(mb)
- }
-}
diff --git a/cmd/mdatagen/internal/metadata/generated_metrics_test.go b/cmd/mdatagen/internal/metadata/generated_metrics_test.go
deleted file mode 100644
index dc265beca6d5..000000000000
--- a/cmd/mdatagen/internal/metadata/generated_metrics_test.go
+++ /dev/null
@@ -1,214 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/pmetric"
- "go.opentelemetry.io/collector/receiver/receivertest"
- "go.uber.org/zap"
- "go.uber.org/zap/zaptest/observer"
-)
-
-type testConfigCollection int
-
-const (
- testSetDefault testConfigCollection = iota
- testSetAll
- testSetNone
-)
-
-func TestMetricsBuilder(t *testing.T) {
- tests := []struct {
- name string
- configSet testConfigCollection
- }{
- {
- name: "default",
- configSet: testSetDefault,
- },
- {
- name: "all_set",
- configSet: testSetAll,
- },
- {
- name: "none_set",
- configSet: testSetNone,
- },
- }
- for _, test := range tests {
- t.Run(test.name, func(t *testing.T) {
- start := pcommon.Timestamp(1_000_000_000)
- ts := pcommon.Timestamp(1_000_001_000)
- observedZapCore, observedLogs := observer.New(zap.WarnLevel)
- settings := receivertest.NewNopCreateSettings()
- settings.Logger = zap.New(observedZapCore)
- mb := NewMetricsBuilder(loadMetricsBuilderConfig(t, test.name), settings, WithStartTime(start))
-
- expectedWarnings := 0
- if test.configSet == testSetDefault {
- assert.Equal(t, "[WARNING] Please set `enabled` field explicitly for `default.metric`: This metric will be disabled by default soon.", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- if test.configSet == testSetDefault || test.configSet == testSetAll {
- assert.Equal(t, "[WARNING] `default.metric.to_be_removed` should not be enabled: This metric is deprecated and will be removed soon.", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- if test.configSet == testSetAll || test.configSet == testSetNone {
- assert.Equal(t, "[WARNING] `optional.metric` should not be configured: This metric is deprecated and will be removed soon.", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- if test.configSet == testSetAll || test.configSet == testSetNone {
- assert.Equal(t, "[WARNING] `optional.metric.empty_unit` should not be configured: This metric is deprecated and will be removed soon.", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- if test.configSet == testSetDefault {
- assert.Equal(t, "[WARNING] Please set `enabled` field explicitly for `string.resource.attr_disable_warning`: This resource_attribute will be disabled by default soon.", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- if test.configSet == testSetAll || test.configSet == testSetNone {
- assert.Equal(t, "[WARNING] `string.resource.attr_remove_warning` should not be configured: This resource_attribute is deprecated and will be removed soon.", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- if test.configSet == testSetDefault || test.configSet == testSetAll {
- assert.Equal(t, "[WARNING] `string.resource.attr_to_be_removed` should not be enabled: This resource_attribute is deprecated and will be removed soon.", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
-
- assert.Equal(t, expectedWarnings, observedLogs.Len())
-
- defaultMetricsCount := 0
- allMetricsCount := 0
-
- defaultMetricsCount++
- allMetricsCount++
- mb.RecordDefaultMetricDataPoint(ts, 1, "string_attr-val", 19, AttributeEnumAttrRed, []any{"slice_attr-item1", "slice_attr-item2"}, map[string]any{"key1": "map_attr-val1", "key2": "map_attr-val2"})
-
- defaultMetricsCount++
- allMetricsCount++
- mb.RecordDefaultMetricToBeRemovedDataPoint(ts, 1)
-
- allMetricsCount++
- mb.RecordOptionalMetricDataPoint(ts, 1, "string_attr-val", true)
-
- allMetricsCount++
- mb.RecordOptionalMetricEmptyUnitDataPoint(ts, 1, "string_attr-val", true)
-
- rb := mb.NewResourceBuilder()
- rb.SetMapResourceAttr(map[string]any{"key1": "map.resource.attr-val1", "key2": "map.resource.attr-val2"})
- rb.SetOptionalResourceAttr("optional.resource.attr-val")
- rb.SetSliceResourceAttr([]any{"slice.resource.attr-item1", "slice.resource.attr-item2"})
- rb.SetStringEnumResourceAttrOne()
- rb.SetStringResourceAttr("string.resource.attr-val")
- rb.SetStringResourceAttrDisableWarning("string.resource.attr_disable_warning-val")
- rb.SetStringResourceAttrRemoveWarning("string.resource.attr_remove_warning-val")
- rb.SetStringResourceAttrToBeRemoved("string.resource.attr_to_be_removed-val")
- res := rb.Emit()
- metrics := mb.Emit(WithResource(res))
-
- if test.configSet == testSetNone {
- assert.Equal(t, 0, metrics.ResourceMetrics().Len())
- return
- }
-
- assert.Equal(t, 1, metrics.ResourceMetrics().Len())
- rm := metrics.ResourceMetrics().At(0)
- assert.Equal(t, res, rm.Resource())
- assert.Equal(t, 1, rm.ScopeMetrics().Len())
- ms := rm.ScopeMetrics().At(0).Metrics()
- if test.configSet == testSetDefault {
- assert.Equal(t, defaultMetricsCount, ms.Len())
- }
- if test.configSet == testSetAll {
- assert.Equal(t, allMetricsCount, ms.Len())
- }
- validatedMetrics := make(map[string]bool)
- for i := 0; i < ms.Len(); i++ {
- switch ms.At(i).Name() {
- case "default.metric":
- assert.False(t, validatedMetrics["default.metric"], "Found a duplicate in the metrics slice: default.metric")
- validatedMetrics["default.metric"] = true
- assert.Equal(t, pmetric.MetricTypeSum, ms.At(i).Type())
- assert.Equal(t, 1, ms.At(i).Sum().DataPoints().Len())
- assert.Equal(t, "Monotonic cumulative sum int metric enabled by default.", ms.At(i).Description())
- assert.Equal(t, "s", ms.At(i).Unit())
- assert.Equal(t, true, ms.At(i).Sum().IsMonotonic())
- assert.Equal(t, pmetric.AggregationTemporalityCumulative, ms.At(i).Sum().AggregationTemporality())
- dp := ms.At(i).Sum().DataPoints().At(0)
- assert.Equal(t, start, dp.StartTimestamp())
- assert.Equal(t, ts, dp.Timestamp())
- assert.Equal(t, pmetric.NumberDataPointValueTypeInt, dp.ValueType())
- assert.Equal(t, int64(1), dp.IntValue())
- attrVal, ok := dp.Attributes().Get("string_attr")
- assert.True(t, ok)
- assert.EqualValues(t, "string_attr-val", attrVal.Str())
- attrVal, ok = dp.Attributes().Get("state")
- assert.True(t, ok)
- assert.EqualValues(t, 19, attrVal.Int())
- attrVal, ok = dp.Attributes().Get("enum_attr")
- assert.True(t, ok)
- assert.EqualValues(t, "red", attrVal.Str())
- attrVal, ok = dp.Attributes().Get("slice_attr")
- assert.True(t, ok)
- assert.EqualValues(t, []any{"slice_attr-item1", "slice_attr-item2"}, attrVal.Slice().AsRaw())
- attrVal, ok = dp.Attributes().Get("map_attr")
- assert.True(t, ok)
- assert.EqualValues(t, map[string]any{"key1": "map_attr-val1", "key2": "map_attr-val2"}, attrVal.Map().AsRaw())
- case "default.metric.to_be_removed":
- assert.False(t, validatedMetrics["default.metric.to_be_removed"], "Found a duplicate in the metrics slice: default.metric.to_be_removed")
- validatedMetrics["default.metric.to_be_removed"] = true
- assert.Equal(t, pmetric.MetricTypeSum, ms.At(i).Type())
- assert.Equal(t, 1, ms.At(i).Sum().DataPoints().Len())
- assert.Equal(t, "[DEPRECATED] Non-monotonic delta sum double metric enabled by default.", ms.At(i).Description())
- assert.Equal(t, "s", ms.At(i).Unit())
- assert.Equal(t, false, ms.At(i).Sum().IsMonotonic())
- assert.Equal(t, pmetric.AggregationTemporalityDelta, ms.At(i).Sum().AggregationTemporality())
- dp := ms.At(i).Sum().DataPoints().At(0)
- assert.Equal(t, start, dp.StartTimestamp())
- assert.Equal(t, ts, dp.Timestamp())
- assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType())
- assert.Equal(t, float64(1), dp.DoubleValue())
- case "optional.metric":
- assert.False(t, validatedMetrics["optional.metric"], "Found a duplicate in the metrics slice: optional.metric")
- validatedMetrics["optional.metric"] = true
- assert.Equal(t, pmetric.MetricTypeGauge, ms.At(i).Type())
- assert.Equal(t, 1, ms.At(i).Gauge().DataPoints().Len())
- assert.Equal(t, "[DEPRECATED] Gauge double metric disabled by default.", ms.At(i).Description())
- assert.Equal(t, "1", ms.At(i).Unit())
- dp := ms.At(i).Gauge().DataPoints().At(0)
- assert.Equal(t, start, dp.StartTimestamp())
- assert.Equal(t, ts, dp.Timestamp())
- assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType())
- assert.Equal(t, float64(1), dp.DoubleValue())
- attrVal, ok := dp.Attributes().Get("string_attr")
- assert.True(t, ok)
- assert.EqualValues(t, "string_attr-val", attrVal.Str())
- attrVal, ok = dp.Attributes().Get("boolean_attr")
- assert.True(t, ok)
- assert.EqualValues(t, true, attrVal.Bool())
- case "optional.metric.empty_unit":
- assert.False(t, validatedMetrics["optional.metric.empty_unit"], "Found a duplicate in the metrics slice: optional.metric.empty_unit")
- validatedMetrics["optional.metric.empty_unit"] = true
- assert.Equal(t, pmetric.MetricTypeGauge, ms.At(i).Type())
- assert.Equal(t, 1, ms.At(i).Gauge().DataPoints().Len())
- assert.Equal(t, "[DEPRECATED] Gauge double metric disabled by default.", ms.At(i).Description())
- assert.Equal(t, "", ms.At(i).Unit())
- dp := ms.At(i).Gauge().DataPoints().At(0)
- assert.Equal(t, start, dp.StartTimestamp())
- assert.Equal(t, ts, dp.Timestamp())
- assert.Equal(t, pmetric.NumberDataPointValueTypeDouble, dp.ValueType())
- assert.Equal(t, float64(1), dp.DoubleValue())
- attrVal, ok := dp.Attributes().Get("string_attr")
- assert.True(t, ok)
- assert.EqualValues(t, "string_attr-val", attrVal.Str())
- attrVal, ok = dp.Attributes().Get("boolean_attr")
- assert.True(t, ok)
- assert.EqualValues(t, true, attrVal.Bool())
- }
- }
- })
- }
-}
diff --git a/cmd/mdatagen/internal/metadata/generated_resource.go b/cmd/mdatagen/internal/metadata/generated_resource.go
deleted file mode 100644
index da69b3c08411..000000000000
--- a/cmd/mdatagen/internal/metadata/generated_resource.go
+++ /dev/null
@@ -1,92 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "go.opentelemetry.io/collector/pdata/pcommon"
-)
-
-// ResourceBuilder is a helper struct to build resources predefined in metadata.yaml.
-// The ResourceBuilder is not thread-safe and must not to be used in multiple goroutines.
-type ResourceBuilder struct {
- config ResourceAttributesConfig
- res pcommon.Resource
-}
-
-// NewResourceBuilder creates a new ResourceBuilder. This method should be called on the start of the application.
-func NewResourceBuilder(rac ResourceAttributesConfig) *ResourceBuilder {
- return &ResourceBuilder{
- config: rac,
- res: pcommon.NewResource(),
- }
-}
-
-// SetMapResourceAttr sets provided value as "map.resource.attr" attribute.
-func (rb *ResourceBuilder) SetMapResourceAttr(val map[string]any) {
- if rb.config.MapResourceAttr.Enabled {
- rb.res.Attributes().PutEmptyMap("map.resource.attr").FromRaw(val)
- }
-}
-
-// SetOptionalResourceAttr sets provided value as "optional.resource.attr" attribute.
-func (rb *ResourceBuilder) SetOptionalResourceAttr(val string) {
- if rb.config.OptionalResourceAttr.Enabled {
- rb.res.Attributes().PutStr("optional.resource.attr", val)
- }
-}
-
-// SetSliceResourceAttr sets provided value as "slice.resource.attr" attribute.
-func (rb *ResourceBuilder) SetSliceResourceAttr(val []any) {
- if rb.config.SliceResourceAttr.Enabled {
- rb.res.Attributes().PutEmptySlice("slice.resource.attr").FromRaw(val)
- }
-}
-
-// SetStringEnumResourceAttrOne sets "string.enum.resource.attr=one" attribute.
-func (rb *ResourceBuilder) SetStringEnumResourceAttrOne() {
- if rb.config.StringEnumResourceAttr.Enabled {
- rb.res.Attributes().PutStr("string.enum.resource.attr", "one")
- }
-}
-
-// SetStringEnumResourceAttrTwo sets "string.enum.resource.attr=two" attribute.
-func (rb *ResourceBuilder) SetStringEnumResourceAttrTwo() {
- if rb.config.StringEnumResourceAttr.Enabled {
- rb.res.Attributes().PutStr("string.enum.resource.attr", "two")
- }
-}
-
-// SetStringResourceAttr sets provided value as "string.resource.attr" attribute.
-func (rb *ResourceBuilder) SetStringResourceAttr(val string) {
- if rb.config.StringResourceAttr.Enabled {
- rb.res.Attributes().PutStr("string.resource.attr", val)
- }
-}
-
-// SetStringResourceAttrDisableWarning sets provided value as "string.resource.attr_disable_warning" attribute.
-func (rb *ResourceBuilder) SetStringResourceAttrDisableWarning(val string) {
- if rb.config.StringResourceAttrDisableWarning.Enabled {
- rb.res.Attributes().PutStr("string.resource.attr_disable_warning", val)
- }
-}
-
-// SetStringResourceAttrRemoveWarning sets provided value as "string.resource.attr_remove_warning" attribute.
-func (rb *ResourceBuilder) SetStringResourceAttrRemoveWarning(val string) {
- if rb.config.StringResourceAttrRemoveWarning.Enabled {
- rb.res.Attributes().PutStr("string.resource.attr_remove_warning", val)
- }
-}
-
-// SetStringResourceAttrToBeRemoved sets provided value as "string.resource.attr_to_be_removed" attribute.
-func (rb *ResourceBuilder) SetStringResourceAttrToBeRemoved(val string) {
- if rb.config.StringResourceAttrToBeRemoved.Enabled {
- rb.res.Attributes().PutStr("string.resource.attr_to_be_removed", val)
- }
-}
-
-// Emit returns the built resource and resets the internal builder state.
-func (rb *ResourceBuilder) Emit() pcommon.Resource {
- r := rb.res
- rb.res = pcommon.NewResource()
- return r
-}
diff --git a/cmd/mdatagen/internal/metadata/generated_resource_test.go b/cmd/mdatagen/internal/metadata/generated_resource_test.go
deleted file mode 100644
index c0bde40a0870..000000000000
--- a/cmd/mdatagen/internal/metadata/generated_resource_test.go
+++ /dev/null
@@ -1,82 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestResourceBuilder(t *testing.T) {
- for _, test := range []string{"default", "all_set", "none_set"} {
- t.Run(test, func(t *testing.T) {
- cfg := loadResourceAttributesConfig(t, test)
- rb := NewResourceBuilder(cfg)
- rb.SetMapResourceAttr(map[string]any{"key1": "map.resource.attr-val1", "key2": "map.resource.attr-val2"})
- rb.SetOptionalResourceAttr("optional.resource.attr-val")
- rb.SetSliceResourceAttr([]any{"slice.resource.attr-item1", "slice.resource.attr-item2"})
- rb.SetStringEnumResourceAttrOne()
- rb.SetStringResourceAttr("string.resource.attr-val")
- rb.SetStringResourceAttrDisableWarning("string.resource.attr_disable_warning-val")
- rb.SetStringResourceAttrRemoveWarning("string.resource.attr_remove_warning-val")
- rb.SetStringResourceAttrToBeRemoved("string.resource.attr_to_be_removed-val")
-
- res := rb.Emit()
- assert.Equal(t, 0, rb.Emit().Attributes().Len()) // Second call should return empty Resource
-
- switch test {
- case "default":
- assert.Equal(t, 6, res.Attributes().Len())
- case "all_set":
- assert.Equal(t, 8, res.Attributes().Len())
- case "none_set":
- assert.Equal(t, 0, res.Attributes().Len())
- return
- default:
- assert.Failf(t, "unexpected test case: %s", test)
- }
-
- val, ok := res.Attributes().Get("map.resource.attr")
- assert.True(t, ok)
- if ok {
- assert.EqualValues(t, map[string]any{"key1": "map.resource.attr-val1", "key2": "map.resource.attr-val2"}, val.Map().AsRaw())
- }
- val, ok = res.Attributes().Get("optional.resource.attr")
- assert.Equal(t, test == "all_set", ok)
- if ok {
- assert.EqualValues(t, "optional.resource.attr-val", val.Str())
- }
- val, ok = res.Attributes().Get("slice.resource.attr")
- assert.True(t, ok)
- if ok {
- assert.EqualValues(t, []any{"slice.resource.attr-item1", "slice.resource.attr-item2"}, val.Slice().AsRaw())
- }
- val, ok = res.Attributes().Get("string.enum.resource.attr")
- assert.True(t, ok)
- if ok {
- assert.EqualValues(t, "one", val.Str())
- }
- val, ok = res.Attributes().Get("string.resource.attr")
- assert.True(t, ok)
- if ok {
- assert.EqualValues(t, "string.resource.attr-val", val.Str())
- }
- val, ok = res.Attributes().Get("string.resource.attr_disable_warning")
- assert.True(t, ok)
- if ok {
- assert.EqualValues(t, "string.resource.attr_disable_warning-val", val.Str())
- }
- val, ok = res.Attributes().Get("string.resource.attr_remove_warning")
- assert.Equal(t, test == "all_set", ok)
- if ok {
- assert.EqualValues(t, "string.resource.attr_remove_warning-val", val.Str())
- }
- val, ok = res.Attributes().Get("string.resource.attr_to_be_removed")
- assert.True(t, ok)
- if ok {
- assert.EqualValues(t, "string.resource.attr_to_be_removed-val", val.Str())
- }
- })
- }
-}
diff --git a/cmd/mdatagen/internal/metadata/generated_status.go b/cmd/mdatagen/internal/metadata/generated_status.go
deleted file mode 100644
index e9ab937c5055..000000000000
--- a/cmd/mdatagen/internal/metadata/generated_status.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "go.opentelemetry.io/collector/component"
-)
-
-const (
- Type = "file"
- TracesStability = component.StabilityLevelBeta
- LogsStability = component.StabilityLevelDevelopment
- MetricsStability = component.StabilityLevelStable
-)
diff --git a/cmd/mdatagen/internal/metadata/testdata/config.yaml b/cmd/mdatagen/internal/metadata/testdata/config.yaml
deleted file mode 100644
index 8283dc2dd70b..000000000000
--- a/cmd/mdatagen/internal/metadata/testdata/config.yaml
+++ /dev/null
@@ -1,55 +0,0 @@
-default:
-all_set:
- metrics:
- default.metric:
- enabled: true
- default.metric.to_be_removed:
- enabled: true
- optional.metric:
- enabled: true
- optional.metric.empty_unit:
- enabled: true
- resource_attributes:
- map.resource.attr:
- enabled: true
- optional.resource.attr:
- enabled: true
- slice.resource.attr:
- enabled: true
- string.enum.resource.attr:
- enabled: true
- string.resource.attr:
- enabled: true
- string.resource.attr_disable_warning:
- enabled: true
- string.resource.attr_remove_warning:
- enabled: true
- string.resource.attr_to_be_removed:
- enabled: true
-none_set:
- metrics:
- default.metric:
- enabled: false
- default.metric.to_be_removed:
- enabled: false
- optional.metric:
- enabled: false
- optional.metric.empty_unit:
- enabled: false
- resource_attributes:
- map.resource.attr:
- enabled: false
- optional.resource.attr:
- enabled: false
- slice.resource.attr:
- enabled: false
- string.enum.resource.attr:
- enabled: false
- string.resource.attr:
- enabled: false
- string.resource.attr_disable_warning:
- enabled: false
- string.resource.attr_remove_warning:
- enabled: false
- string.resource.attr_to_be_removed:
- enabled: false
diff --git a/cmd/mdatagen/lint.go b/cmd/mdatagen/lint.go
deleted file mode 100644
index 3fb41d70c1f2..000000000000
--- a/cmd/mdatagen/lint.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "errors"
- "strings"
- "unicode"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/mdatagen/third_party/golint"
-)
-
-// formatIdentifier variable in a go-safe way
-func formatIdentifier(s string, exported bool) (string, error) {
- if s == "" {
- return "", errors.New("string cannot be empty")
- }
- // Convert various characters to . for strings.Title to operate on.
- replace := strings.NewReplacer("_", ".", "-", ".", "<", ".", ">", ".", "/", ".", ":", ".")
- str := replace.Replace(s)
- str = strings.Title(str) // nolint SA1019
- str = strings.ReplaceAll(str, ".", "")
-
- var word string
- var output string
-
- // Fixup acronyms to make lint happy.
- for idx, r := range str {
- if idx == 0 {
- if exported {
- r = unicode.ToUpper(r)
- } else {
- r = unicode.ToLower(r)
- }
- }
-
- if unicode.IsUpper(r) || unicode.IsNumber(r) {
- // If the current word is an acronym and it's either exported or it's not the
- // beginning of an unexported variable then upper case it.
- if golint.Acronyms[strings.ToUpper(word)] && (exported || output != "") {
- output += strings.ToUpper(word)
- word = string(r)
- } else {
- output += word
- word = string(r)
- }
- } else {
- word += string(r)
- }
- }
-
- if golint.Acronyms[strings.ToUpper(word)] && output != "" {
- output += strings.ToUpper(word)
- } else {
- output += word
- }
-
- // Remove white spaces
- output = strings.Join(strings.Fields(output), "")
-
- return output, nil
-}
diff --git a/cmd/mdatagen/lint_test.go b/cmd/mdatagen/lint_test.go
deleted file mode 100644
index 5c470f302d7c..000000000000
--- a/cmd/mdatagen/lint_test.go
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "testing"
-
- "github.com/stretchr/testify/require"
-)
-
-func Test_formatIdentifier(t *testing.T) {
- var tests = []struct {
- input string
- want string
- exported bool
- wantErr string
- }{
- // Unexported.
- {input: "max.cpu", want: "maxCPU"},
- {input: "max.foo", want: "maxFoo"},
- {input: "cpu.utilization", want: "cpuUtilization"},
- {input: "cpu", want: "cpu"},
- {input: "max.ip.addr", want: "maxIPAddr"},
- {input: "some_metric", want: "someMetric"},
- {input: "some-metric", want: "someMetric"},
- {input: "Upper.Case", want: "upperCase"},
- {input: "max.ip6", want: "maxIP6"},
- {input: "max.ip6.idle", want: "maxIP6Idle"},
- {input: "node_netstat_IpExt_OutOctets", want: "nodeNetstatIPExtOutOctets"},
-
- // Exported.
- {input: "cpu.state", want: "CPUState", exported: true},
-
- // Errors
- {input: "", want: "", wantErr: "string cannot be empty"},
- }
- for _, tt := range tests {
- t.Run(tt.input, func(t *testing.T) {
- got, err := formatIdentifier(tt.input, tt.exported)
-
- if tt.wantErr != "" {
- require.EqualError(t, err, tt.wantErr)
- } else {
- require.NoError(t, err)
- require.Equal(t, tt.want, got)
- }
- })
- }
-}
diff --git a/cmd/mdatagen/loader.go b/cmd/mdatagen/loader.go
deleted file mode 100644
index 19add14defb5..000000000000
--- a/cmd/mdatagen/loader.go
+++ /dev/null
@@ -1,294 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "context"
- "errors"
- "fmt"
- "os"
- "path/filepath"
- "strings"
-
- "go.opentelemetry.io/collector/confmap"
- "go.opentelemetry.io/collector/confmap/provider/fileprovider"
- "go.opentelemetry.io/collector/pdata/pcommon"
-)
-
-type metricName string
-
-func (mn metricName) Render() (string, error) {
- return formatIdentifier(string(mn), true)
-}
-
-func (mn metricName) RenderUnexported() (string, error) {
- return formatIdentifier(string(mn), false)
-}
-
-type attributeName string
-
-func (mn attributeName) Render() (string, error) {
- return formatIdentifier(string(mn), true)
-}
-
-func (mn attributeName) RenderUnexported() (string, error) {
- return formatIdentifier(string(mn), false)
-}
-
-// ValueType defines an attribute value type.
-type ValueType struct {
- // ValueType is type of the attribute value.
- ValueType pcommon.ValueType
-}
-
-// UnmarshalText implements the encoding.TextUnmarshaler interface.
-func (mvt *ValueType) UnmarshalText(text []byte) error {
- switch vtStr := string(text); vtStr {
- case "string":
- mvt.ValueType = pcommon.ValueTypeStr
- case "int":
- mvt.ValueType = pcommon.ValueTypeInt
- case "double":
- mvt.ValueType = pcommon.ValueTypeDouble
- case "bool":
- mvt.ValueType = pcommon.ValueTypeBool
- case "bytes":
- mvt.ValueType = pcommon.ValueTypeBytes
- case "slice":
- mvt.ValueType = pcommon.ValueTypeSlice
- case "map":
- mvt.ValueType = pcommon.ValueTypeMap
- default:
- return fmt.Errorf("invalid type: %q", vtStr)
- }
- return nil
-}
-
-// String returns capitalized name of the ValueType.
-func (mvt ValueType) String() string {
- return strings.Title(strings.ToLower(mvt.ValueType.String())) // nolint SA1019
-}
-
-// Primitive returns name of primitive type for the ValueType.
-func (mvt ValueType) Primitive() string {
- switch mvt.ValueType {
- case pcommon.ValueTypeStr:
- return "string"
- case pcommon.ValueTypeInt:
- return "int64"
- case pcommon.ValueTypeDouble:
- return "float64"
- case pcommon.ValueTypeBool:
- return "bool"
- case pcommon.ValueTypeBytes:
- return "[]byte"
- case pcommon.ValueTypeSlice:
- return "[]any"
- case pcommon.ValueTypeMap:
- return "map[string]any"
- case pcommon.ValueTypeEmpty:
- return ""
- default:
- return ""
- }
-}
-
-type metric struct {
- // Enabled defines whether the metric is enabled by default.
- Enabled bool `mapstructure:"enabled"`
-
- // Warnings that will be shown to user under specified conditions.
- Warnings warnings `mapstructure:"warnings"`
-
- // Description of the metric.
- Description string `mapstructure:"description"`
-
- // ExtendedDocumentation of the metric. If specified, this will
- // be appended to the description used in generated documentation.
- ExtendedDocumentation string `mapstructure:"extended_documentation"`
-
- // Unit of the metric.
- Unit *string `mapstructure:"unit"`
-
- // Sum stores metadata for sum metric type
- Sum *sum `mapstructure:"sum,omitempty"`
- // Gauge stores metadata for gauge metric type
- Gauge *gauge `mapstructure:"gauge,omitempty"`
-
- // Attributes is the list of attributes that the metric emits.
- Attributes []attributeName `mapstructure:"attributes"`
-}
-
-func (m *metric) Unmarshal(parser *confmap.Conf) error {
- if !parser.IsSet("enabled") {
- return errors.New("missing required field: `enabled`")
- }
- err := parser.Unmarshal(m, confmap.WithErrorUnused())
- if err != nil {
- return err
- }
- return nil
-}
-func (m metric) Data() MetricData {
- if m.Sum != nil {
- return m.Sum
- }
- if m.Gauge != nil {
- return m.Gauge
- }
- return nil
-}
-
-type warnings struct {
- // A warning that will be displayed if the field is enabled in user config.
- IfEnabled string `mapstructure:"if_enabled"`
- // A warning that will be displayed if `enabled` field is not set explicitly in user config.
- IfEnabledNotSet string `mapstructure:"if_enabled_not_set"`
- // A warning that will be displayed if the field is configured by user in any way.
- IfConfigured string `mapstructure:"if_configured"`
-}
-
-type attribute struct {
- // Description describes the purpose of the attribute.
- Description string `mapstructure:"description"`
- // NameOverride can be used to override the attribute name.
- NameOverride string `mapstructure:"name_override"`
- // Enabled defines whether the attribute is enabled by default.
- Enabled bool `mapstructure:"enabled"`
- // Enum can optionally describe the set of values to which the attribute can belong.
- Enum []string `mapstructure:"enum"`
- // Type is an attribute type.
- Type ValueType `mapstructure:"type"`
- // FullName is the attribute name populated from the map key.
- FullName attributeName `mapstructure:"-"`
- // Warnings that will be shown to user under specified conditions.
- Warnings warnings `mapstructure:"warnings"`
-}
-
-// Name returns actual name of the attribute that is set on the metric after applying NameOverride.
-func (a attribute) Name() attributeName {
- if a.NameOverride != "" {
- return attributeName(a.NameOverride)
- }
- return a.FullName
-}
-
-func (a attribute) TestValue() string {
- if a.Enum != nil {
- return fmt.Sprintf(`"%s"`, a.Enum[0])
- }
- switch a.Type.ValueType {
- case pcommon.ValueTypeEmpty:
- return ""
- case pcommon.ValueTypeStr:
- return fmt.Sprintf(`"%s-val"`, a.FullName)
- case pcommon.ValueTypeInt:
- return fmt.Sprintf("%d", len(a.FullName))
- case pcommon.ValueTypeDouble:
- return fmt.Sprintf("%f", 0.1+float64(len(a.FullName)))
- case pcommon.ValueTypeBool:
- return fmt.Sprintf("%t", len(a.FullName)%2 == 0)
- case pcommon.ValueTypeMap:
- return fmt.Sprintf(`map[string]any{"key1": "%s-val1", "key2": "%s-val2"}`, a.FullName, a.FullName)
- case pcommon.ValueTypeSlice:
- return fmt.Sprintf(`[]any{"%s-item1", "%s-item2"}`, a.FullName, a.FullName)
- case pcommon.ValueTypeBytes:
- return fmt.Sprintf(`bytes("%s-val")`, a.FullName)
- }
- return ""
-}
-
-type metadata struct {
- // Type of the component.
- Type string `mapstructure:"type"`
- // Type of the parent component (applicable to subcomponents).
- Parent string `mapstructure:"parent"`
- // Status information for the component.
- Status *Status `mapstructure:"status"`
- // SemConvVersion is a version number of OpenTelemetry semantic conventions applied to the scraped metrics.
- SemConvVersion string `mapstructure:"sem_conv_version"`
- // ResourceAttributes that can be emitted by the component.
- ResourceAttributes map[attributeName]attribute `mapstructure:"resource_attributes"`
- // Attributes emitted by one or more metrics.
- Attributes map[attributeName]attribute `mapstructure:"attributes"`
- // Metrics that can be emitted by the component.
- Metrics map[metricName]metric `mapstructure:"metrics"`
- // ScopeName of the metrics emitted by the component.
- ScopeName string `mapstructure:"-"`
- // ShortFolderName is the shortened folder name of the component, removing class if present
- ShortFolderName string `mapstructure:"-"`
-}
-
-func setAttributesFullName(attrs map[attributeName]attribute) {
- for k, v := range attrs {
- v.FullName = k
- attrs[k] = v
- }
-}
-
-type templateContext struct {
- metadata
- // Package name for generated code.
- Package string
-}
-
-func loadMetadata(filePath string) (metadata, error) {
- cp, err := fileprovider.New().Retrieve(context.Background(), "file:"+filePath, nil)
- if err != nil {
- return metadata{}, err
- }
-
- conf, err := cp.AsConf()
- if err != nil {
- return metadata{}, err
- }
-
- md := metadata{ScopeName: scopeName(filePath), ShortFolderName: shortFolderName(filePath)}
- if err := conf.Unmarshal(&md, confmap.WithErrorUnused()); err != nil {
- return md, err
- }
-
- if err := md.Validate(); err != nil {
- return md, err
- }
-
- setAttributesFullName(md.Attributes)
- setAttributesFullName(md.ResourceAttributes)
-
- return md, nil
-}
-
-func shortFolderName(filePath string) string {
- parentFolder := filepath.Base(filepath.Dir(filePath))
- if strings.HasSuffix(parentFolder, "connector") {
- return strings.TrimSuffix(parentFolder, "connector")
- }
- if strings.HasSuffix(parentFolder, "exporter") {
- return strings.TrimSuffix(parentFolder, "exporter")
- }
- if strings.HasSuffix(parentFolder, "extension") {
- return strings.TrimSuffix(parentFolder, "extension")
- }
- if strings.HasSuffix(parentFolder, "processor") {
- return strings.TrimSuffix(parentFolder, "processor")
- }
- if strings.HasSuffix(parentFolder, "receiver") {
- return strings.TrimSuffix(parentFolder, "receiver")
- }
- return parentFolder
-}
-
-func scopeName(filePath string) string {
- sn := "otelcol"
- dirs := strings.Split(filepath.Dir(filePath), string(os.PathSeparator))
- for _, dir := range dirs {
- if dir != "receiver" && strings.HasSuffix(dir, "receiver") {
- sn += "/" + dir
- }
- if dir != "scraper" && strings.HasSuffix(dir, "scraper") {
- sn += "/" + strings.TrimSuffix(dir, "scraper")
- }
- }
- return sn
-}
diff --git a/cmd/mdatagen/loader_test.go b/cmd/mdatagen/loader_test.go
deleted file mode 100644
index 4af1bad52339..000000000000
--- a/cmd/mdatagen/loader_test.go
+++ /dev/null
@@ -1,281 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "testing"
-
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/pmetric"
-)
-
-func Test_loadMetadata(t *testing.T) {
- tests := []struct {
- name string
- want metadata
- wantErr string
- }{
- {
- name: "metadata-sample.yaml",
- want: metadata{
- Type: "file",
- SemConvVersion: "1.9.0",
- Status: &Status{
- Class: "receiver",
- Stability: map[string][]string{
- "development": {"logs"},
- "beta": {"traces"},
- "stable": {"metrics"},
- },
- Distributions: []string{"contrib"},
- Warnings: []string{"Any additional information that should be brought to the consumer's attention"},
- },
- ResourceAttributes: map[attributeName]attribute{
- "string.resource.attr": {
- Description: "Resource attribute with any string value.",
- Enabled: true,
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "string.resource.attr",
- },
- "string.enum.resource.attr": {
- Description: "Resource attribute with a known set of string values.",
- Enabled: true,
- Enum: []string{"one", "two"},
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "string.enum.resource.attr",
- },
- "optional.resource.attr": {
- Description: "Explicitly disabled ResourceAttribute.",
- Enabled: false,
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "optional.resource.attr",
- },
- "slice.resource.attr": {
- Description: "Resource attribute with a slice value.",
- Enabled: true,
- Type: ValueType{
- ValueType: pcommon.ValueTypeSlice,
- },
- FullName: "slice.resource.attr",
- },
- "map.resource.attr": {
- Description: "Resource attribute with a map value.",
- Enabled: true,
- Type: ValueType{
- ValueType: pcommon.ValueTypeMap,
- },
- FullName: "map.resource.attr",
- },
- "string.resource.attr_disable_warning": {
- Description: "Resource attribute with any string value.",
- Warnings: warnings{
- IfEnabledNotSet: "This resource_attribute will be disabled by default soon.",
- },
- Enabled: true,
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "string.resource.attr_disable_warning",
- },
- "string.resource.attr_remove_warning": {
- Description: "Resource attribute with any string value.",
- Warnings: warnings{
- IfConfigured: "This resource_attribute is deprecated and will be removed soon.",
- },
- Enabled: false,
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "string.resource.attr_remove_warning",
- },
- "string.resource.attr_to_be_removed": {
- Description: "Resource attribute with any string value.",
- Warnings: warnings{
- IfEnabled: "This resource_attribute is deprecated and will be removed soon.",
- },
- Enabled: true,
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "string.resource.attr_to_be_removed",
- },
- },
-
- Attributes: map[attributeName]attribute{
- "enum_attr": {
- Description: "Attribute with a known set of string values.",
- NameOverride: "",
- Enum: []string{"red", "green", "blue"},
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "enum_attr",
- },
- "string_attr": {
- Description: "Attribute with any string value.",
- NameOverride: "",
- Type: ValueType{
- ValueType: pcommon.ValueTypeStr,
- },
- FullName: "string_attr",
- },
- "overridden_int_attr": {
- Description: "Integer attribute with overridden name.",
- NameOverride: "state",
- Type: ValueType{
- ValueType: pcommon.ValueTypeInt,
- },
- FullName: "overridden_int_attr",
- },
- "boolean_attr": {
- Description: "Attribute with a boolean value.",
- Type: ValueType{
- ValueType: pcommon.ValueTypeBool,
- },
- FullName: "boolean_attr",
- },
- "slice_attr": {
- Description: "Attribute with a slice value.",
- Type: ValueType{
- ValueType: pcommon.ValueTypeSlice,
- },
- FullName: "slice_attr",
- },
- "map_attr": {
- Description: "Attribute with a map value.",
- Type: ValueType{
- ValueType: pcommon.ValueTypeMap,
- },
- FullName: "map_attr",
- },
- },
- Metrics: map[metricName]metric{
- "default.metric": {
- Enabled: true,
- Description: "Monotonic cumulative sum int metric enabled by default.",
- ExtendedDocumentation: "The metric will be become optional soon.",
- Warnings: warnings{
- IfEnabledNotSet: "This metric will be disabled by default soon.",
- },
- Unit: strPtr("s"),
- Sum: &sum{
- MetricValueType: MetricValueType{pmetric.NumberDataPointValueTypeInt},
- AggregationTemporality: AggregationTemporality{Aggregation: pmetric.AggregationTemporalityCumulative},
- Mono: Mono{Monotonic: true},
- },
- Attributes: []attributeName{"string_attr", "overridden_int_attr", "enum_attr", "slice_attr", "map_attr"},
- },
- "optional.metric": {
- Enabled: false,
- Description: "[DEPRECATED] Gauge double metric disabled by default.",
- Warnings: warnings{
- IfConfigured: "This metric is deprecated and will be removed soon.",
- },
- Unit: strPtr("1"),
- Gauge: &gauge{
- MetricValueType: MetricValueType{pmetric.NumberDataPointValueTypeDouble},
- },
- Attributes: []attributeName{"string_attr", "boolean_attr"},
- },
- "optional.metric.empty_unit": {
- Enabled: false,
- Description: "[DEPRECATED] Gauge double metric disabled by default.",
- Warnings: warnings{
- IfConfigured: "This metric is deprecated and will be removed soon.",
- },
- Unit: strPtr(""),
- Gauge: &gauge{
- MetricValueType: MetricValueType{pmetric.NumberDataPointValueTypeDouble},
- },
- Attributes: []attributeName{"string_attr", "boolean_attr"},
- },
-
- "default.metric.to_be_removed": {
- Enabled: true,
- Description: "[DEPRECATED] Non-monotonic delta sum double metric enabled by default.",
- ExtendedDocumentation: "The metric will be will be removed soon.",
- Warnings: warnings{
- IfEnabled: "This metric is deprecated and will be removed soon.",
- },
- Unit: strPtr("s"),
- Sum: &sum{
- MetricValueType: MetricValueType{pmetric.NumberDataPointValueTypeDouble},
- AggregationTemporality: AggregationTemporality{Aggregation: pmetric.AggregationTemporalityDelta},
- Mono: Mono{Monotonic: false},
- },
- },
- },
- ScopeName: "otelcol",
- ShortFolderName: ".",
- },
- },
- {
- name: "testdata/parent.yaml",
- want: metadata{
- Type: "subcomponent",
- Parent: "parentComponent",
- ScopeName: "otelcol",
- ShortFolderName: "testdata",
- },
- },
- {
- name: "testdata/invalid_type_rattr.yaml",
- want: metadata{},
- wantErr: "1 error(s) decoding:\n\n* error decoding 'resource_attributes[string.resource.attr].type': invalid type: \"invalidtype\"",
- },
- {
- name: "testdata/no_enabled.yaml",
- want: metadata{},
- wantErr: "1 error(s) decoding:\n\n* error decoding 'metrics[system.cpu.time]': missing required field: `enabled`",
- },
- {
- name: "testdata/no_value_type.yaml",
- want: metadata{},
- wantErr: "1 error(s) decoding:\n\n* error decoding 'metrics[system.cpu.time]': 1 error(s) decoding:\n\n" +
- "* error decoding 'sum': missing required field: `value_type`",
- },
- {
- name: "testdata/unknown_value_type.yaml",
- wantErr: "1 error(s) decoding:\n\n* error decoding 'metrics[system.cpu.time]': 1 error(s) decoding:\n\n* error decoding 'sum': 1 error(s) decoding:\n\n* error decoding 'value_type': invalid value_type: \"unknown\"",
- },
- {
- name: "testdata/no_aggregation.yaml",
- want: metadata{},
- wantErr: "1 error(s) decoding:\n\n* error decoding 'metrics[default.metric]': 1 error(s) decoding:\n\n* error decoding 'sum': missing required field: `aggregation_temporality`",
- },
- {
- name: "testdata/invalid_aggregation.yaml",
- want: metadata{},
- wantErr: "1 error(s) decoding:\n\n* error decoding 'metrics[default.metric]': 1 error(s) decoding:\n\n* error decoding 'sum': 1 error(s) decoding:\n\n* error decoding 'aggregation_temporality': invalid aggregation: \"invalidaggregation\"",
- },
- {
- name: "testdata/invalid_type_attr.yaml",
- want: metadata{},
- wantErr: "1 error(s) decoding:\n\n* error decoding 'attributes[used_attr].type': invalid type: \"invalidtype\"",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- got, err := loadMetadata(tt.name)
- if tt.wantErr != "" {
- require.Error(t, err)
- require.EqualError(t, err, tt.wantErr)
- } else {
- require.NoError(t, err)
- require.Equal(t, tt.want, got)
- }
- })
- }
-}
-
-func strPtr(s string) *string {
- return &s
-}
diff --git a/cmd/mdatagen/main.go b/cmd/mdatagen/main.go
deleted file mode 100644
index 2d35ff129362..000000000000
--- a/cmd/mdatagen/main.go
+++ /dev/null
@@ -1,236 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "bytes"
- "errors"
- "flag"
- "fmt"
- "go/format"
- "log"
- "os"
- "path/filepath"
- "regexp"
- "strings"
- "text/template"
-
- "golang.org/x/text/cases"
- "golang.org/x/text/language"
-)
-
-const (
- statusStart = ""
- statusEnd = ""
-)
-
-func main() {
- flag.Parse()
- yml := flag.Arg(0)
- if err := run(yml); err != nil {
- log.Fatal(err)
- }
-}
-
-func run(ymlPath string) error {
- if ymlPath == "" {
- return errors.New("argument must be metadata.yaml file")
- }
- ymlPath, err := filepath.Abs(ymlPath)
- if err != nil {
- return fmt.Errorf("failed to get absolute path for %v: %w", ymlPath, err)
- }
-
- ymlDir := filepath.Dir(ymlPath)
-
- md, err := loadMetadata(ymlPath)
- if err != nil {
- return fmt.Errorf("failed loading %v: %w", ymlPath, err)
- }
-
- tmplDir := "templates"
-
- codeDir := filepath.Join(ymlDir, "internal", "metadata")
- if err = os.MkdirAll(codeDir, 0700); err != nil {
- return fmt.Errorf("unable to create output directory %q: %w", codeDir, err)
- }
- if md.Status != nil {
- if md.Status.Class != "cmd" && md.Status.Class != "pkg" {
- if err = generateFile(filepath.Join(tmplDir, "status.go.tmpl"),
- filepath.Join(codeDir, "generated_status.go"), md); err != nil {
- return err
- }
- }
-
- if _, err = os.Stat(filepath.Join(ymlDir, "README.md")); err == nil {
- if err = inlineReplace(
- filepath.Join(tmplDir, "readme.md.tmpl"),
- filepath.Join(ymlDir, "README.md"),
- md, statusStart, statusEnd); err != nil {
- return err
- }
- }
- }
- if len(md.Metrics) == 0 && len(md.ResourceAttributes) == 0 {
- return nil
- }
-
- if err = os.MkdirAll(filepath.Join(codeDir, "testdata"), 0700); err != nil {
- return fmt.Errorf("unable to create output directory %q: %w", filepath.Join(codeDir, "testdata"), err)
- }
- if err = generateFile(filepath.Join(tmplDir, "testdata", "config.yaml.tmpl"),
- filepath.Join(codeDir, "testdata", "config.yaml"), md); err != nil {
- return err
- }
-
- if err = generateFile(filepath.Join(tmplDir, "config.go.tmpl"),
- filepath.Join(codeDir, "generated_config.go"), md); err != nil {
- return err
- }
- if err = generateFile(filepath.Join(tmplDir, "config_test.go.tmpl"),
- filepath.Join(codeDir, "generated_config_test.go"), md); err != nil {
- return err
- }
-
- if len(md.ResourceAttributes) > 0 {
- if err = generateFile(filepath.Join(tmplDir, "resource.go.tmpl"),
- filepath.Join(codeDir, "generated_resource.go"), md); err != nil {
- return err
- }
- if err = generateFile(filepath.Join(tmplDir, "resource_test.go.tmpl"),
- filepath.Join(codeDir, "generated_resource_test.go"), md); err != nil {
- return err
- }
- }
-
- if len(md.Metrics) == 0 {
- return nil
- }
-
- if err = generateFile(filepath.Join(tmplDir, "metrics.go.tmpl"),
- filepath.Join(codeDir, "generated_metrics.go"), md); err != nil {
- return err
- }
- if err = generateFile(filepath.Join(tmplDir, "metrics_test.go.tmpl"),
- filepath.Join(codeDir, "generated_metrics_test.go"), md); err != nil {
- return err
- }
-
- return generateFile(filepath.Join(tmplDir, "documentation.md.tmpl"), filepath.Join(ymlDir, "documentation.md"), md)
-}
-
-func templatize(tmplFile string, md metadata) *template.Template {
- return template.Must(
- template.
- New(filepath.Base(tmplFile)).
- Option("missingkey=error").
- Funcs(map[string]any{
- "publicVar": func(s string) (string, error) {
- return formatIdentifier(s, true)
- },
- "attributeInfo": func(an attributeName) attribute {
- return md.Attributes[an]
- },
- "metricInfo": func(mn metricName) metric {
- return md.Metrics[mn]
- },
- "parseImportsRequired": func(metrics map[metricName]metric) bool {
- for _, m := range metrics {
- if m.Data().HasMetricInputType() {
- return true
- }
- }
- return false
- },
- "stringsJoin": strings.Join,
- "stringsSplit": strings.Split,
- "userLinks": func(elems []string) []string {
- result := make([]string, len(elems))
- for i, elem := range elems {
- if elem == "open-telemetry/collector-approvers" {
- result[i] = "[@open-telemetry/collector-approvers](https://github.com/orgs/open-telemetry/teams/collector-approvers)"
- } else {
- result[i] = fmt.Sprintf("[@%s](https://www.github.com/%s)", elem, elem)
- }
- }
- return result
- },
- "casesTitle": cases.Title(language.English).String,
- "toCamelCase": func(s string) string {
- caser := cases.Title(language.English).String
- parts := strings.Split(s, "_")
- result := ""
- for _, part := range parts {
- result += caser(part)
- }
- return result
- },
- "inc": func(i int) int { return i + 1 },
- "distroURL": func(name string) string {
- return distros[name]
- },
- // ParseFS delegates the parsing of the files to `Glob`
- // which uses the `\` as a special character.
- // Meaning on windows based machines, the `\` needs to be replaced
- // with a `/` for it to find the file.
- }).ParseFS(templateFS, strings.ReplaceAll(tmplFile, "\\", "/")))
-}
-
-func inlineReplace(tmplFile string, outputFile string, md metadata, start string, end string) error {
- var readmeContents []byte
- var err error
- if readmeContents, err = os.ReadFile(outputFile); err != nil {
- return err
- }
-
- var re = regexp.MustCompile(fmt.Sprintf("%s[\\s\\S]*%s", start, end))
- if !re.Match(readmeContents) {
- return nil
- }
-
- tmpl := templatize(tmplFile, md)
- buf := bytes.Buffer{}
-
- if err := tmpl.Execute(&buf, templateContext{metadata: md, Package: "metadata"}); err != nil {
- return fmt.Errorf("failed executing template: %w", err)
- }
-
- result := buf.String()
-
- s := re.ReplaceAllString(string(readmeContents), result)
- if err := os.WriteFile(outputFile, []byte(s), 0600); err != nil {
- return fmt.Errorf("failed writing %q: %w", outputFile, err)
- }
-
- return nil
-}
-
-func generateFile(tmplFile string, outputFile string, md metadata) error {
- tmpl := templatize(tmplFile, md)
- buf := bytes.Buffer{}
-
- if err := tmpl.Execute(&buf, templateContext{metadata: md, Package: "metadata"}); err != nil {
- return fmt.Errorf("failed executing template: %w", err)
- }
-
- if err := os.Remove(outputFile); err != nil && !errors.Is(err, os.ErrNotExist) {
- return fmt.Errorf("unable to remove genererated file %q: %w", outputFile, err)
- }
-
- result := buf.Bytes()
- var formatErr error
- if strings.HasSuffix(outputFile, ".go") {
- if formatted, err := format.Source(buf.Bytes()); err == nil {
- result = formatted
- } else {
- formatErr = fmt.Errorf("failed formatting %s:%w", outputFile, err)
- }
- }
-
- if err := os.WriteFile(outputFile, result, 0600); err != nil {
- return fmt.Errorf("failed writing %q: %w", outputFile, err)
- }
-
- return formatErr
-}
diff --git a/cmd/mdatagen/main_test.go b/cmd/mdatagen/main_test.go
deleted file mode 100644
index e23dcb6d129c..000000000000
--- a/cmd/mdatagen/main_test.go
+++ /dev/null
@@ -1,379 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "bytes"
- "fmt"
- "os"
- "path/filepath"
- "testing"
-
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/receiver/receivertest"
-
- md "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/mdatagen/internal/metadata"
-)
-
-func Test_runContents(t *testing.T) {
- tests := []struct {
- yml string
- wantMetricsGenerated bool
- wantConfigGenerated bool
- wantStatusGenerated bool
- wantErr bool
- }{
- {
- yml: "invalid.yaml",
- wantErr: true,
- },
- {
- yml: "metrics_and_type.yaml",
- wantMetricsGenerated: true,
- wantConfigGenerated: true,
- wantStatusGenerated: true,
- },
- {
- yml: "resource_attributes_only.yaml",
- wantConfigGenerated: true,
- wantStatusGenerated: true,
- },
- {
- yml: "status_only.yaml",
- wantStatusGenerated: true,
- },
- }
- for _, tt := range tests {
- t.Run(tt.yml, func(t *testing.T) {
- tmpdir := t.TempDir()
- ymlContent, err := os.ReadFile(filepath.Join("testdata", tt.yml))
- require.NoError(t, err)
- metadataFile := filepath.Join(tmpdir, "metadata.yaml")
- require.NoError(t, os.WriteFile(metadataFile, ymlContent, 0600))
- require.NoError(t, os.WriteFile(filepath.Join(tmpdir, "README.md"), []byte(`
-
-foo
-`), 0600))
-
- err = run(metadataFile)
- if tt.wantErr {
- require.Error(t, err)
- return
- }
- require.NoError(t, err)
-
- if tt.wantMetricsGenerated {
- require.FileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_metrics.go"))
- require.FileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_metrics_test.go"))
- require.FileExists(t, filepath.Join(tmpdir, "documentation.md"))
- } else {
- require.NoFileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_metrics.go"))
- require.NoFileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_metrics_test.go"))
- require.NoFileExists(t, filepath.Join(tmpdir, "documentation.md"))
- }
-
- if tt.wantConfigGenerated {
- require.FileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_config.go"))
- require.FileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_config_test.go"))
- } else {
- require.NoFileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_config.go"))
- require.NoFileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_config_test.go"))
- }
-
- if tt.wantStatusGenerated {
- require.FileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_status.go"))
- contents, err := os.ReadFile(filepath.Join(tmpdir, "README.md"))
- require.NoError(t, err)
- require.NotContains(t, string(contents), "foo")
- } else {
- require.NoFileExists(t, filepath.Join(tmpdir, "internal/metadata/generated_status.go"))
- contents, err := os.ReadFile(filepath.Join(tmpdir, "README.md"))
- require.NoError(t, err)
- require.Contains(t, string(contents), "foo")
- }
- })
- }
-}
-
-func Test_run(t *testing.T) {
- type args struct {
- ymlPath string
- }
- tests := []struct {
- name string
- args args
- wantErr bool
- }{
- {
- name: "no argument",
- args: args{""},
- wantErr: true,
- },
- {
- name: "no such file",
- args: args{"/no/such/file"},
- wantErr: true,
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- if err := run(tt.args.ymlPath); (err != nil) != tt.wantErr {
- t.Errorf("run() error = %v, wantErr %v", err, tt.wantErr)
- }
- })
- }
-}
-
-func Test_inlineReplace(t *testing.T) {
- tests := []struct {
- name string
- markdown string
- outputFile string
- componentClass string
- warnings []string
- stability map[string][]string
- distros []string
- codeowners *Codeowners
- }{
- {
- name: "readme with empty status",
- markdown: `# Some component
-
-
-
-
-Some info about a component
-`,
- outputFile: "readme_with_status.md",
- componentClass: "receiver",
- distros: []string{"contrib"},
- },
- {
- name: "readme with status for extension",
- markdown: `# Some component
-
-
-
-
-Some info about a component
-`,
- outputFile: "readme_with_status_extension.md",
- componentClass: "extension",
- distros: []string{"contrib"},
- },
- {
- name: "readme with status with codeowners and emeritus",
- markdown: `# Some component
-
-
-
-
-Some info about a component
-`,
- outputFile: "readme_with_status_codeowners_and_emeritus.md",
- componentClass: "receiver",
- distros: []string{"contrib"},
- codeowners: &Codeowners{
- Active: []string{"foo"},
- Emeritus: []string{"bar"},
- },
- },
- {
- name: "readme with status with codeowners",
- markdown: `# Some component
-
-
-
-
-Some info about a component
-`,
- outputFile: "readme_with_status_codeowners.md",
- componentClass: "receiver",
- distros: []string{"contrib"},
- codeowners: &Codeowners{
- Active: []string{"foo"},
- },
- },
- {
- name: "readme with status table",
- markdown: `# Some component
-
-
-| Status | |
-| ------------------------ |-----------|
-
-
-Some info about a component
-`,
- outputFile: "readme_with_status.md",
- componentClass: "receiver",
- distros: []string{"contrib"},
- },
- {
- name: "readme with no status",
- markdown: `# Some component
-
-Some info about a component
-`,
- outputFile: "readme_without_status.md",
- distros: []string{"contrib"},
- },
- {
- name: "component with warnings",
- markdown: `# Some component
-
-
-
-
-Some info about a component
-### warnings
-Some warning there.
-`,
- outputFile: "readme_with_warnings.md",
- warnings: []string{"warning1"},
- distros: []string{"contrib"},
- },
- {
- name: "readme with multiple signals",
- markdown: `# Some component
-
-
-
-
-Some info about a component
-`,
- outputFile: "readme_with_multiple_signals.md",
- stability: map[string][]string{"beta": {"metrics"}, "alpha": {"logs"}},
- distros: []string{"contrib"},
- },
- {
- name: "readme with cmd class",
- markdown: `# Some component
-
-
-
-
-Some info about a component
-`,
- outputFile: "readme_with_cmd_class.md",
- stability: map[string][]string{"beta": {"metrics"}, "alpha": {"logs"}},
- componentClass: "cmd",
- distros: []string{},
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- stability := map[string][]string{"beta": {"metrics"}}
- if len(tt.stability) > 0 {
- stability = tt.stability
- }
- md := metadata{
- Type: "foo",
- ShortFolderName: "foo",
- Status: &Status{
- Stability: stability,
- Distributions: tt.distros,
- Class: tt.componentClass,
- Warnings: tt.warnings,
- Codeowners: tt.codeowners,
- },
- }
- tmpdir := t.TempDir()
-
- readmeFile := filepath.Join(tmpdir, "README.md")
- require.NoError(t, os.WriteFile(readmeFile, []byte(tt.markdown), 0600))
-
- err := inlineReplace("templates/readme.md.tmpl", readmeFile, md, statusStart, statusEnd)
- require.NoError(t, err)
-
- require.FileExists(t, filepath.Join(tmpdir, "README.md"))
- got, err := os.ReadFile(filepath.Join(tmpdir, "README.md"))
- require.NoError(t, err)
- got = bytes.ReplaceAll(got, []byte("\r\n"), []byte("\n"))
- expected, err := os.ReadFile(filepath.Join("testdata", tt.outputFile))
- require.NoError(t, err)
- expected = bytes.ReplaceAll(expected, []byte("\r\n"), []byte("\n"))
- fmt.Println(string(got))
- fmt.Println(string(expected))
- require.Equal(t, string(expected), string(got))
- })
- }
-}
-
-func TestGenerateStatusMetadata(t *testing.T) {
- tests := []struct {
- name string
- output string
- md metadata
- expected string
- }{
- {
- name: "foo component with beta status",
- md: metadata{
- Type: "foo",
- Status: &Status{
- Stability: map[string][]string{"beta": {"metrics"}},
- Distributions: []string{"contrib"},
- Class: "receiver",
- },
- },
- expected: `// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "go.opentelemetry.io/collector/component"
-)
-
-const (
- Type = "foo"
- MetricsStability = component.StabilityLevelBeta
-)
-`,
- },
- {
- name: "foo component with alpha status",
- md: metadata{
- Type: "foo",
- Status: &Status{
- Stability: map[string][]string{"alpha": {"metrics"}},
- Distributions: []string{"contrib"},
- Class: "receiver",
- },
- },
- expected: `// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "go.opentelemetry.io/collector/component"
-)
-
-const (
- Type = "foo"
- MetricsStability = component.StabilityLevelAlpha
-)
-`,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- tmpdir := t.TempDir()
- err := generateFile("templates/status.go.tmpl",
- filepath.Join(tmpdir, "generated_status.go"), tt.md)
- require.NoError(t, err)
- actual, err := os.ReadFile(filepath.Join(tmpdir, "generated_status.go"))
- require.NoError(t, err)
- require.Equal(t, tt.expected, string(actual))
- })
- }
-}
-
-// TestGenerated verifies that the internal/metadata API is generated correctly.
-func TestGenerated(t *testing.T) {
- mb := md.NewMetricsBuilder(md.DefaultMetricsBuilderConfig(), receivertest.NewNopCreateSettings())
- m := mb.Emit()
- require.Equal(t, 0, m.ResourceMetrics().Len())
-}
diff --git a/cmd/mdatagen/metadata-sample.yaml b/cmd/mdatagen/metadata-sample.yaml
deleted file mode 100644
index b9a5f8f6c908..000000000000
--- a/cmd/mdatagen/metadata-sample.yaml
+++ /dev/null
@@ -1,136 +0,0 @@
-# Sample metric metadata file with all available configurations.
-
-type: file
-
-sem_conv_version: 1.9.0
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-resource_attributes:
- string.resource.attr:
- description: Resource attribute with any string value.
- type: string
- enabled: true
-
- string.enum.resource.attr:
- description: Resource attribute with a known set of string values.
- type: string
- enum: [one, two]
- enabled: true
-
- optional.resource.attr:
- description: Explicitly disabled ResourceAttribute.
- type: string
- enabled: false
-
- slice.resource.attr:
- description: Resource attribute with a slice value.
- type: slice
- enabled: true
-
- map.resource.attr:
- description: Resource attribute with a map value.
- type: map
- enabled: true
-
- string.resource.attr_disable_warning:
- description: Resource attribute with any string value.
- type: string
- enabled: true
- warnings:
- if_enabled_not_set: This resource_attribute will be disabled by default soon.
-
- string.resource.attr_remove_warning:
- description: Resource attribute with any string value.
- type: string
- enabled: false
- warnings:
- if_configured: This resource_attribute is deprecated and will be removed soon.
-
- string.resource.attr_to_be_removed:
- description: Resource attribute with any string value.
- type: string
- enabled: true
- warnings:
- if_enabled: This resource_attribute is deprecated and will be removed soon.
-
-attributes:
- string_attr:
- description: Attribute with any string value.
- type: string
-
- overridden_int_attr:
- name_override: state
- description: Integer attribute with overridden name.
- type: int
-
- enum_attr:
- description: Attribute with a known set of string values.
- type: string
- enum: [red, green, blue]
-
- boolean_attr:
- description: Attribute with a boolean value.
- type: bool
-
- slice_attr:
- description: Attribute with a slice value.
- type: slice
-
- map_attr:
- description: Attribute with a map value.
- type: map
-
-metrics:
- default.metric:
- enabled: true
- description: Monotonic cumulative sum int metric enabled by default.
- extended_documentation: The metric will be become optional soon.
- unit: s
- sum:
- value_type: int
- monotonic: true
- aggregation_temporality: cumulative
- attributes: [string_attr, overridden_int_attr, enum_attr, slice_attr, map_attr]
- warnings:
- if_enabled_not_set: This metric will be disabled by default soon.
-
- optional.metric:
- enabled: false
- description: "[DEPRECATED] Gauge double metric disabled by default."
- unit: 1
- gauge:
- value_type: double
- attributes: [string_attr, boolean_attr]
- warnings:
- if_configured: This metric is deprecated and will be removed soon.
-
- optional.metric.empty_unit:
- enabled: false
- description: "[DEPRECATED] Gauge double metric disabled by default."
- unit: ""
- gauge:
- value_type: double
- attributes: [string_attr, boolean_attr]
- warnings:
- if_configured: This metric is deprecated and will be removed soon.
-
- default.metric.to_be_removed:
- enabled: true
- description: "[DEPRECATED] Non-monotonic delta sum double metric enabled by default."
- extended_documentation: The metric will be will be removed soon.
- unit: s
- sum:
- value_type: double
- monotonic: false
- aggregation_temporality: delta
- warnings:
- if_enabled: This metric is deprecated and will be removed soon.
diff --git a/cmd/mdatagen/metadata-schema.yaml b/cmd/mdatagen/metadata-schema.yaml
deleted file mode 100644
index 91ab3404bcbd..000000000000
--- a/cmd/mdatagen/metadata-schema.yaml
+++ /dev/null
@@ -1,106 +0,0 @@
-# Required: The type of the component - Usually the name. The type and class combined uniquely identify the component (eg. receiver/otlp) or subcomponent (eg. receiver/hostmetricsreceiver/cpu)
-type:
-
-# Required for subcomponents: The type of the parent component.
-parent: string
-
-# Required for components (Optional for subcomponents): A high-level view of the development status and use of this component
-status:
- # Required: The class of the component (For example receiver)
- class:
- # Required: The stability of the component - See https://github.com/open-telemetry/opentelemetry-collector#stability-levels
- stability:
- development: []
- alpha: []
- beta: []
- stable: []
- deprecated: []
- unmaintained: []
- # Optional: The distributions that this component is bundled with (For example core or contrib). See statusdata.go for a list of common distros.
- distributions: [string]
- # Optional: A list of warnings that should be brought to the attention of users looking to use this component
- warnings: [string]
- # Optional: Metadata related to codeowners of the component
- codeowners:
- active: [string]
- emeritus: [string]
-
-# Optional: OTel Semantic Conventions version that will be associated with the scraped metrics.
-# This attribute should be set for metrics compliant with OTel Semantic Conventions.
-sem_conv_version: 1.9.0
-
-# Optional: map of resource attribute definitions with the key being the attribute name.
-resource_attributes:
- :
- # Required: whether the resource attribute is added the emitted metrics by default.
- enabled: bool
- # Required: description of the attribute.
- description:
- # Optional: array of attribute values if they are static values (currently, only string type is supported).
- enum: [string]
- # Required: attribute value type.
- type:
- # Optional: warnings that will be shown to user under specified conditions.
- warnings:
- # A warning that will be displayed if the resource_attribute is enabled in user config.
- # Should be used for deprecated default resource_attributes that will be removed soon.
- if_enabled:
- # A warning that will be displayed if `enabled` field is not set explicitly in user config.
- # Should be used for resource_attributes that will be turned from default to optional or vice versa.
- if_enabled_not_set:
- # A warning that will be displayed if the resource_attribute is configured by user in any way.
- # Should be used for deprecated optional resource_attributes that will be removed soon.
- if_configured:
-
-
-# Optional: map of attribute definitions with the key being the attribute name and value
-# being described below.
-attributes:
- :
- # Optional: this field can be used to override the actual attribute name defined by the key.
- # It should be used if multiple metrics have different attributes with the same name.
- name_override:
- # Required: description of the attribute.
- description:
- # Optional: array of attribute values if they are static values (currently, only string type is supported).
- enum: [string]
- # Required: attribute value type.
- type:
-
-# Optional: map of metric names with the key being the metric name and value
-# being described below.
-metrics:
- :
- # Required: whether the metric is collected by default.
- enabled: bool
- # Required: metric description.
- description:
- # Optional: extended documentation of the metric.
- extended_documentation:
- # Optional: warnings that will be shown to user under specified conditions.
- warnings:
- # A warning that will be displayed if the metric is enabled in user config.
- # Should be used for deprecated default metrics that will be removed soon.
- if_enabled:
- # A warning that will be displayed if `enabled` field is not set explicitly in user config.
- # Should be used for metrics that will be turned from default to optional or vice versa.
- if_enabled_not_set:
- # A warning that will be displayed if the metrics is configured by user in any way.
- # Should be used for deprecated optional metrics that will be removed soon.
- if_configured:
- # Required: metric unit as defined by https://ucum.org/ucum.html.
- unit:
- # Required: metric type with its settings.
- :
- # Required for sum and gauge metrics: type of number data point values.
- value_type:
- # Required for sum metric: whether the metric is monotonic (no negative delta values).
- monotonic: bool
- # Required for sum metric: whether reported values incorporate previous measurements
- # (cumulative) or not (delta).
- aggregation_temporality:
- # Optional: Indicates the type the metric needs to be parsed from. If set, the generated
- # functions will parse the value from string to value_type.
- input_type: string
- # Optional: array of attributes that were defined in the attributes section that are emitted by this metric.
- attributes: [string]
diff --git a/cmd/mdatagen/metadata.yaml b/cmd/mdatagen/metadata.yaml
deleted file mode 100644
index 65bb097a9624..000000000000
--- a/cmd/mdatagen/metadata.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-type: mdatagen
-
-status:
- class: cmd
- codeowners:
- active: [dmitryax]
\ No newline at end of file
diff --git a/cmd/mdatagen/metricdata.go b/cmd/mdatagen/metricdata.go
deleted file mode 100644
index c3448f1722c6..000000000000
--- a/cmd/mdatagen/metricdata.go
+++ /dev/null
@@ -1,182 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "errors"
- "fmt"
-
- "go.opentelemetry.io/collector/confmap"
- "go.opentelemetry.io/collector/pdata/pmetric"
-)
-
-var (
- _ MetricData = &gauge{}
- _ MetricData = &sum{}
-)
-
-// MetricData is generic interface for all metric datatypes.
-type MetricData interface {
- Type() string
- HasMonotonic() bool
- HasAggregated() bool
- HasMetricInputType() bool
-}
-
-// AggregationTemporality defines a metric aggregation type.
-type AggregationTemporality struct {
- // Aggregation describes if the aggregator reports delta changes
- // since last report time, or cumulative changes since a fixed start time.
- Aggregation pmetric.AggregationTemporality
-}
-
-// UnmarshalText implements the encoding.TextUnmarshaler interface.
-func (agg *AggregationTemporality) UnmarshalText(text []byte) error {
- switch vtStr := string(text); vtStr {
- case "cumulative":
- agg.Aggregation = pmetric.AggregationTemporalityCumulative
- case "delta":
- agg.Aggregation = pmetric.AggregationTemporalityDelta
- default:
- return fmt.Errorf("invalid aggregation: %q", vtStr)
- }
- return nil
-}
-
-// String returns string representation of the aggregation temporality.
-func (agg *AggregationTemporality) String() string {
- return agg.Aggregation.String()
-}
-
-// Mono defines the metric monotonicity.
-type Mono struct {
- // Monotonic is true if the sum is monotonic.
- Monotonic bool `mapstructure:"monotonic"`
-}
-
-// MetricInputType defines the metric input value type
-type MetricInputType struct {
- // InputType is the type the metric needs to be parsed from, options are "string"
- InputType string `mapstructure:"input_type"`
-}
-
-func (mit MetricInputType) HasMetricInputType() bool {
- return mit.InputType != ""
-}
-
-// Type returns name of the datapoint type.
-func (mit MetricInputType) String() string {
- return mit.InputType
-}
-
-// MetricValueType defines the metric number type.
-type MetricValueType struct {
- // ValueType is type of the metric number, options are "double", "int".
- ValueType pmetric.NumberDataPointValueType
-}
-
-func (mvt *MetricValueType) Unmarshal(parser *confmap.Conf) error {
- if !parser.IsSet("value_type") {
- return errors.New("missing required field: `value_type`")
- }
- return nil
-}
-
-// UnmarshalText implements the encoding.TextUnmarshaler interface.
-func (mvt *MetricValueType) UnmarshalText(text []byte) error {
- switch vtStr := string(text); vtStr {
- case "int":
- mvt.ValueType = pmetric.NumberDataPointValueTypeInt
- case "double":
- mvt.ValueType = pmetric.NumberDataPointValueTypeDouble
- default:
- return fmt.Errorf("invalid value_type: %q", vtStr)
- }
- return nil
-}
-
-// Type returns name of the datapoint type.
-func (mvt MetricValueType) String() string {
- return mvt.ValueType.String()
-}
-
-// BasicType returns name of a golang basic type for the datapoint type.
-func (mvt MetricValueType) BasicType() string {
- switch mvt.ValueType {
- case pmetric.NumberDataPointValueTypeInt:
- return "int64"
- case pmetric.NumberDataPointValueTypeDouble:
- return "float64"
- case pmetric.NumberDataPointValueTypeEmpty:
- return ""
- default:
- return ""
- }
-}
-
-type gauge struct {
- MetricValueType `mapstructure:"value_type"`
- MetricInputType `mapstructure:",squash"`
-}
-
-// Unmarshal is a custom unmarshaler for gauge. Needed mostly to avoid MetricValueType.Unmarshal inheritance.
-func (d *gauge) Unmarshal(parser *confmap.Conf) error {
- if err := d.MetricValueType.Unmarshal(parser); err != nil {
- return err
- }
- return parser.Unmarshal(d, confmap.WithErrorUnused())
-}
-
-func (d gauge) Type() string {
- return "Gauge"
-}
-
-func (d gauge) HasMonotonic() bool {
- return false
-}
-
-func (d gauge) HasAggregated() bool {
- return false
-}
-
-type sum struct {
- AggregationTemporality `mapstructure:"aggregation_temporality"`
- Mono `mapstructure:",squash"`
- MetricValueType `mapstructure:"value_type"`
- MetricInputType `mapstructure:",squash"`
-}
-
-// Unmarshal is a custom unmarshaler for sum. Needed mostly to avoid MetricValueType.Unmarshal inheritance.
-func (d *sum) Unmarshal(parser *confmap.Conf) error {
- if !parser.IsSet("aggregation_temporality") {
- return errors.New("missing required field: `aggregation_temporality`")
- }
- if err := d.MetricValueType.Unmarshal(parser); err != nil {
- return err
- }
- return parser.Unmarshal(d, confmap.WithErrorUnused())
-}
-
-// TODO: Currently, this func will not be called because of https://github.com/open-telemetry/opentelemetry-collector/issues/6671. Uncomment function and
-// add a test case to Test_loadMetadata for file no_monotonic.yaml once the issue is solved.
-//
-// Unmarshal is a custom unmarshaler for Mono.
-// func (m *Mono) Unmarshal(parser *confmap.Conf) error {
-// if !parser.IsSet("monotonic") {
-// return errors.New("missing required field: `monotonic`")
-// }
-// return parser.Unmarshal(m, confmap.WithErrorUnused())
-// }
-
-func (d sum) Type() string {
- return "Sum"
-}
-
-func (d sum) HasMonotonic() bool {
- return true
-}
-
-func (d sum) HasAggregated() bool {
- return true
-}
diff --git a/cmd/mdatagen/metricdata_test.go b/cmd/mdatagen/metricdata_test.go
deleted file mode 100644
index 10b7f46613ed..000000000000
--- a/cmd/mdatagen/metricdata_test.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestMetricData(t *testing.T) {
- for _, arg := range []struct {
- metricData MetricData
- typ string
- hasAggregated bool
- hasMonotonic bool
- }{
- {&gauge{}, "Gauge", false, false},
- {&sum{}, "Sum", true, true},
- } {
- assert.Equal(t, arg.typ, arg.metricData.Type())
- assert.Equal(t, arg.hasAggregated, arg.metricData.HasAggregated())
- assert.Equal(t, arg.hasMonotonic, arg.metricData.HasMonotonic())
- }
-}
diff --git a/cmd/mdatagen/statusdata.go b/cmd/mdatagen/statusdata.go
deleted file mode 100644
index 9ecf63d4257d..000000000000
--- a/cmd/mdatagen/statusdata.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "sort"
-)
-
-// distros is a collection of distributions that can be referenced in the metadata.yaml files.
-// The rules below apply to every distribution added to this list:
-// - The distribution must be open source.
-// - The link must point to a publicly accessible repository.
-var distros = map[string]string{
- "core": "https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol",
- "contrib": "https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib",
- "aws": "https://github.com/aws-observability/aws-otel-collector",
- "grafana": "https://github.com/grafana/agent",
- "observiq": "https://github.com/observIQ/observiq-otel-collector",
- "redhat": "https://github.com/os-observability/redhat-opentelemetry-collector",
- "splunk": "https://github.com/signalfx/splunk-otel-collector",
- "sumo": "https://github.com/SumoLogic/sumologic-otel-collector",
- "liatrio": "https://github.com/liatrio/liatrio-otel-collector",
-}
-
-type Codeowners struct {
- // Active codeowners
- Active []string `mapstructure:"active"`
- // Emeritus codeowners
- Emeritus []string `mapstructure:"emeritus"`
-}
-
-type Status struct {
- Stability map[string][]string `mapstructure:"stability"`
- Distributions []string `mapstructure:"distributions"`
- Class string `mapstructure:"class"`
- Warnings []string `mapstructure:"warnings"`
- Codeowners *Codeowners `mapstructure:"codeowners"`
-}
-
-func (s *Status) SortedDistributions() []string {
- sorted := s.Distributions
- sort.Slice(sorted, func(i, j int) bool {
- if s.Distributions[i] == "core" {
- return true
- }
- if s.Distributions[i] == "contrib" {
- return s.Distributions[j] != "core"
- }
- if s.Distributions[j] == "core" {
- return false
- }
- if s.Distributions[j] == "contrib" {
- return s.Distributions[i] == "core"
- }
- return s.Distributions[i] < s.Distributions[j]
- })
- return sorted
-}
diff --git a/cmd/mdatagen/statusdata_test.go b/cmd/mdatagen/statusdata_test.go
deleted file mode 100644
index 947065b1d6f4..000000000000
--- a/cmd/mdatagen/statusdata_test.go
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-func TestSortedDistributions(t *testing.T) {
- tests := []struct {
- name string
- s Status
- result []string
- }{
- {
- "all combined",
- Status{Distributions: []string{"arm", "contrib", "core", "foo", "bar"}},
- []string{"core", "contrib", "arm", "bar", "foo"},
- },
- {
- "core only",
- Status{Distributions: []string{"core"}},
- []string{"core"},
- },
- {
- "core and contrib only",
- Status{Distributions: []string{"core", "contrib"}},
- []string{"core", "contrib"},
- },
- {
- "core and contrib reversed",
- Status{Distributions: []string{"contrib", "core"}},
- []string{"core", "contrib"},
- },
- {
- "neither core nor contrib",
- Status{Distributions: []string{"foo", "bar"}},
- []string{"bar", "foo"},
- },
- {
- "no core, contrib, something else",
- Status{Distributions: []string{"foo", "contrib", "bar"}},
- []string{"contrib", "bar", "foo"},
- },
- {
- "core, no contrib, something else",
- Status{Distributions: []string{"foo", "core", "bar"}},
- []string{"core", "bar", "foo"},
- },
- }
- for _, test := range tests {
- t.Run(test.name, func(t *testing.T) {
- assert.Equal(t, test.result, test.s.SortedDistributions())
- })
- }
-}
diff --git a/cmd/mdatagen/templates/config.go.tmpl b/cmd/mdatagen/templates/config.go.tmpl
deleted file mode 100644
index 02f697883345..000000000000
--- a/cmd/mdatagen/templates/config.go.tmpl
+++ /dev/null
@@ -1,103 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package {{ .Package }}
-
-{{ if or .Metrics .ResourceAttributes -}}
-import "go.opentelemetry.io/collector/confmap"
-{{- end }}
-
-{{ if .Metrics -}}
-
-// MetricConfig provides common config for a particular metric.
-type MetricConfig struct {
- Enabled bool `mapstructure:"enabled"`
-
- enabledSetByUser bool
-}
-
-func (ms *MetricConfig) Unmarshal(parser *confmap.Conf) error {
- if parser == nil {
- return nil
- }
- err := parser.Unmarshal(ms, confmap.WithErrorUnused())
- if err != nil {
- return err
- }
- ms.enabledSetByUser = parser.IsSet("enabled")
- return nil
-}
-
-// MetricsConfig provides config for {{ .Type }} metrics.
-type MetricsConfig struct {
- {{- range $name, $metric := .Metrics }}
- {{ $name.Render }} MetricConfig `mapstructure:"{{ $name }}"`
- {{- end }}
-}
-
-func DefaultMetricsConfig() MetricsConfig {
- return MetricsConfig{
- {{- range $name, $metric := .Metrics }}
- {{ $name.Render }}: MetricConfig{
- Enabled: {{ $metric.Enabled }},
- },
- {{- end }}
- }
-}
-{{- end }}
-
-{{ if .ResourceAttributes -}}
-// ResourceAttributeConfig provides common config for a particular resource attribute.
-type ResourceAttributeConfig struct {
- Enabled bool `mapstructure:"enabled"`
-
- enabledSetByUser bool
-}
-
-func (rac *ResourceAttributeConfig) Unmarshal(parser *confmap.Conf) error {
- if parser == nil {
- return nil
- }
- err := parser.Unmarshal(rac, confmap.WithErrorUnused())
- if err != nil {
- return err
- }
- rac.enabledSetByUser = parser.IsSet("enabled")
- return nil
-}
-
-// ResourceAttributesConfig provides config for {{ .Type }} resource attributes.
-type ResourceAttributesConfig struct {
- {{- range $name, $attr := .ResourceAttributes }}
- {{ $name.Render }} ResourceAttributeConfig `mapstructure:"{{ $name }}"`
- {{- end }}
-}
-
-func DefaultResourceAttributesConfig() ResourceAttributesConfig {
- return ResourceAttributesConfig{
- {{- range $name, $attr := .ResourceAttributes }}
- {{ $name.Render }}: ResourceAttributeConfig {
- Enabled: {{ $attr.Enabled }},
- },
- {{- end }}
- }
-}
-{{- end }}
-
-{{ if .Metrics -}}
-// MetricsBuilderConfig is a configuration for {{ .Type }} metrics builder.
-type MetricsBuilderConfig struct {
- Metrics MetricsConfig `mapstructure:"metrics"`
- {{- if .ResourceAttributes }}
- ResourceAttributes ResourceAttributesConfig `mapstructure:"resource_attributes"`
- {{- end }}
-}
-
-func DefaultMetricsBuilderConfig() MetricsBuilderConfig {
- return MetricsBuilderConfig {
- Metrics: DefaultMetricsConfig(),
- {{- if .ResourceAttributes }}
- ResourceAttributes: DefaultResourceAttributesConfig(),
- {{- end }}
- }
-}
-{{- end }}
diff --git a/cmd/mdatagen/templates/config_test.go.tmpl b/cmd/mdatagen/templates/config_test.go.tmpl
deleted file mode 100644
index 3f6a636bc6ec..000000000000
--- a/cmd/mdatagen/templates/config_test.go.tmpl
+++ /dev/null
@@ -1,131 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package {{ .Package }}
-
-import (
- "path/filepath"
- "testing"
-
- "github.com/google/go-cmp/cmp"
- "github.com/google/go-cmp/cmp/cmpopts"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/confmap/confmaptest"
-)
-
-{{ if .Metrics }}
-func TestMetricsBuilderConfig(t *testing.T) {
- tests := []struct {
- name string
- want MetricsBuilderConfig
- }{
- {
- name: "default",
- want: DefaultMetricsBuilderConfig(),
- },
- {
- name: "all_set",
- want: MetricsBuilderConfig{
- Metrics: MetricsConfig{
- {{- range $name, $_ := .Metrics }}
- {{ $name.Render }}: MetricConfig{Enabled: true},
- {{- end }}
- },
- {{- if .ResourceAttributes }}
- ResourceAttributes: ResourceAttributesConfig{
- {{- range $name, $_ := .ResourceAttributes }}
- {{ $name.Render }}: ResourceAttributeConfig{Enabled: true},
- {{- end }}
- },
- {{- end }}
- },
- },
- {
- name: "none_set",
- want: MetricsBuilderConfig{
- Metrics: MetricsConfig{
- {{- range $name, $_ := .Metrics }}
- {{ $name.Render }}: MetricConfig{Enabled: false},
- {{- end }}
- },
- {{- if .ResourceAttributes }}
- ResourceAttributes: ResourceAttributesConfig{
- {{- range $name, $_ := .ResourceAttributes }}
- {{ $name.Render }}: ResourceAttributeConfig{Enabled: false},
- {{- end }}
- },
- {{- end }}
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- cfg := loadMetricsBuilderConfig(t, tt.name)
- if diff := cmp.Diff(tt.want, cfg, cmpopts.IgnoreUnexported(MetricConfig{}
- {{- if .ResourceAttributes }}, ResourceAttributeConfig{}{{ end }})); diff != "" {
- t.Errorf("Config mismatch (-expected +actual):\n%s", diff)
- }
- })
- }
-}
-
-func loadMetricsBuilderConfig(t *testing.T, name string) MetricsBuilderConfig {
- cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
- require.NoError(t, err)
- sub, err := cm.Sub(name)
- require.NoError(t, err)
- cfg := DefaultMetricsBuilderConfig()
- require.NoError(t, component.UnmarshalConfig(sub, &cfg))
- return cfg
-}
-{{- end }}
-
-{{ if .ResourceAttributes -}}
-func TestResourceAttributesConfig(t *testing.T) {
- tests := []struct {
- name string
- want ResourceAttributesConfig
- }{
- {
- name: "default",
- want: DefaultResourceAttributesConfig(),
- },
- {
- name: "all_set",
- want: ResourceAttributesConfig{
- {{- range $name, $_ := .ResourceAttributes }}
- {{ $name.Render }}: ResourceAttributeConfig{Enabled: true},
- {{- end }}
- },
- },
- {
- name: "none_set",
- want: ResourceAttributesConfig{
- {{- range $name, $_ := .ResourceAttributes }}
- {{ $name.Render }}: ResourceAttributeConfig{Enabled: false},
- {{- end }}
- },
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- cfg := loadResourceAttributesConfig(t, tt.name)
- if diff := cmp.Diff(tt.want, cfg, cmpopts.IgnoreUnexported(ResourceAttributeConfig{})); diff != "" {
- t.Errorf("Config mismatch (-expected +actual):\n%s", diff)
- }
- })
- }
-}
-
-func loadResourceAttributesConfig(t *testing.T, name string) ResourceAttributesConfig {
- cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
- require.NoError(t, err)
- sub, err := cm.Sub(name)
- require.NoError(t, err)
- sub, err = sub.Sub("resource_attributes")
- require.NoError(t, err)
- cfg := DefaultResourceAttributesConfig()
- require.NoError(t, component.UnmarshalConfig(sub, &cfg))
- return cfg
-}
-{{- end }}
diff --git a/cmd/mdatagen/templates/documentation.md.tmpl b/cmd/mdatagen/templates/documentation.md.tmpl
deleted file mode 100644
index eda8dc9fffe2..000000000000
--- a/cmd/mdatagen/templates/documentation.md.tmpl
+++ /dev/null
@@ -1,98 +0,0 @@
-{{- define "metric-documenation" -}}
-{{- $metricName := . }}
-{{- $metric := $metricName | metricInfo -}}
-
-### {{ $metricName }}
-
-{{ $metric.Description }}
-
-{{- if $metric.ExtendedDocumentation }}
-
-{{ $metric.ExtendedDocumentation }}
-
-{{- end }}
-
-| Unit | Metric Type | Value Type |{{ if $metric.Data.HasAggregated }} Aggregation Temporality |{{ end }}{{ if $metric.Data.HasMonotonic }} Monotonic |{{ end }}
-| ---- | ----------- | ---------- |{{ if $metric.Data.HasAggregated }} ----------------------- |{{ end }}{{ if $metric.Data.HasMonotonic }} --------- |{{ end }}
-| {{ $metric.Unit }} | {{ $metric.Data.Type }} | {{ $metric.Data.MetricValueType }} |
-{{- if $metric.Data.HasAggregated }} {{ $metric.Data.AggregationTemporality }} |{{ end }}
-{{- if $metric.Data.HasMonotonic }} {{ $metric.Data.Monotonic }} |{{ end }}
-
-{{- if $metric.Attributes }}
-
-#### Attributes
-
-| Name | Description | Values |
-| ---- | ----------- | ------ |
-{{- range $metric.Attributes }}
-{{- $attribute := . | attributeInfo }}
-| {{ $attribute.Name }} | {{ $attribute.Description }} |
-{{- if $attribute.Enum }} {{ $attribute.Type }}: ``{{ stringsJoin $attribute.Enum "``, ``" }}``{{ else }} Any {{ $attribute.Type }}{{ end }} |
-{{- end }}
-
-{{- end }}
-
-{{- end -}}
-
-[comment]: <> (Code generated by mdatagen. DO NOT EDIT.)
-
-# {{ .Type }}
-
-{{- if .Parent }}
-
-**Parent Component:** {{ .Parent }}
-{{- end }}
-
-## Default Metrics
-
-The following metrics are emitted by default. Each of them can be disabled by applying the following configuration:
-
-```yaml
-metrics:
- :
- enabled: false
-```
-
-{{- range $metricName, $metric := .Metrics }}
-{{- if $metric.Enabled }}
-
-{{ template "metric-documenation" $metricName }}
-
-{{- end }}
-{{- end }}
-
-{{- $optionalMetricSeen := false }}
-{{- range $metricName, $metric := .Metrics }}
-{{- if not $metric.Enabled }}
-{{- if not $optionalMetricSeen }}
-
-## Optional Metrics
-
-The following metrics are not emitted by default. Each of them can be enabled by applying the following configuration:
-
-```yaml
-metrics:
- :
- enabled: true
-```
-
-{{- end }}
-{{- $optionalMetricSeen = true }}
-
-{{ template "metric-documenation" $metricName }}
-
-{{- end }}
-{{- end }}
-
-{{- if .ResourceAttributes }}
-
-## Resource Attributes
-
-| Name | Description | Values | Enabled |
-| ---- | ----------- | ------ | ------- |
-{{- range $attributeName, $attribute := .ResourceAttributes }}
-| {{ $attributeName }} | {{ $attribute.Description }} |
-{{- if $attribute.Enum }} {{ $attribute.Type }}: ``{{ stringsJoin $attribute.Enum "``, ``" }}``{{ else }} Any {{ $attribute.Type }}{{ end }} | {{ $attribute.Enabled }} |
-{{- end }}
-
-{{- end }}
diff --git a/cmd/mdatagen/templates/metrics.go.tmpl b/cmd/mdatagen/templates/metrics.go.tmpl
deleted file mode 100644
index c76623c40fcc..000000000000
--- a/cmd/mdatagen/templates/metrics.go.tmpl
+++ /dev/null
@@ -1,319 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package {{ .Package }}
-
-import (
- {{- if .Metrics | parseImportsRequired }}
- "strconv"
- "fmt"
- {{- end }}
- "time"
-
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/pmetric"
- "go.opentelemetry.io/collector/receiver"
- {{- if .SemConvVersion }}
- conventions "go.opentelemetry.io/collector/semconv/v{{ .SemConvVersion }}"
- {{- end }}
-)
-
-{{ range $name, $info := .Attributes }}
-{{- if $info.Enum -}}
-// Attribute{{ $name.Render }} specifies the a value {{ $name }} attribute.
-type Attribute{{ $name.Render }} int
-
-const (
- _ Attribute{{ $name.Render }} = iota
- {{- range $info.Enum }}
- Attribute{{ $name.Render }}{{ . | publicVar }}
- {{- end }}
-)
-
-// String returns the string representation of the Attribute{{ $name.Render }}.
-func (av Attribute{{ $name.Render }}) String() string {
- switch av {
- {{- range $info.Enum }}
- case Attribute{{ $name.Render }}{{ . | publicVar }}:
- return "{{ . }}"
- {{- end }}
- }
- return ""
-}
-
-// MapAttribute{{ $name.Render }} is a helper map of string to Attribute{{ $name.Render }} attribute value.
-var MapAttribute{{ $name.Render }} = map[string]Attribute{{ $name.Render }}{
- {{- range $info.Enum }}
- "{{ . }}": Attribute{{ $name.Render }}{{ . | publicVar }},
- {{- end }}
-}
-
-{{ end }}
-{{- end }}
-
-{{ range $name, $metric := .Metrics -}}
-type metric{{ $name.Render }} struct {
- data pmetric.Metric // data buffer for generated metric.
- config MetricConfig // metric config provided by user.
- capacity int // max observed number of data points added to the metric.
-}
-
-// init fills {{ $name }} metric with initial data.
-func (m *metric{{ $name.Render }}) init() {
- m.data.SetName("{{ $name }}")
- m.data.SetDescription("{{ $metric.Description }}")
- m.data.SetUnit("{{ $metric.Unit }}")
- m.data.SetEmpty{{ $metric.Data.Type }}()
- {{- if $metric.Data.HasMonotonic }}
- m.data.{{ $metric.Data.Type }}().SetIsMonotonic({{ $metric.Data.Monotonic }})
- {{- end }}
- {{- if $metric.Data.HasAggregated }}
- m.data.{{ $metric.Data.Type }}().SetAggregationTemporality(pmetric.AggregationTemporality{{ $metric.Data.AggregationTemporality }})
- {{- end }}
- {{- if $metric.Attributes }}
- m.data.{{ $metric.Data.Type }}().DataPoints().EnsureCapacity(m.capacity)
- {{- end }}
-}
-
-func (m *metric{{ $name.Render }}) recordDataPoint(start pcommon.Timestamp, ts pcommon.Timestamp, val {{ $metric.Data.MetricValueType.BasicType }}
-{{- range $metric.Attributes -}}, {{ .RenderUnexported }}AttributeValue {{ (attributeInfo .).Type.Primitive }}{{ end }}) {
- if !m.config.Enabled {
- return
- }
- dp := m.data.{{ $metric.Data.Type }}().DataPoints().AppendEmpty()
- dp.SetStartTimestamp(start)
- dp.SetTimestamp(ts)
- dp.Set{{ $metric.Data.MetricValueType }}Value(val)
- {{- range $metric.Attributes }}
- {{- if eq (attributeInfo .).Type.Primitive "[]byte" }}
- dp.Attributes().PutEmptyBytes("{{ (attributeInfo .).Name }}").FromRaw({{ .RenderUnexported }}AttributeValue)
- {{- else if eq (attributeInfo .).Type.Primitive "[]any" }}
- dp.Attributes().PutEmptySlice("{{ (attributeInfo .).Name }}").FromRaw({{ .RenderUnexported }}AttributeValue)
- {{- else if eq (attributeInfo .).Type.Primitive "map[string]any" }}
- dp.Attributes().PutEmptyMap("{{ (attributeInfo .).Name }}").FromRaw({{ .RenderUnexported }}AttributeValue)
- {{- else }}
- dp.Attributes().Put{{ (attributeInfo .).Type }}("{{ (attributeInfo .).Name }}", {{ .RenderUnexported }}AttributeValue)
- {{- end }}
- {{- end }}
-}
-
-// updateCapacity saves max length of data point slices that will be used for the slice capacity.
-func (m *metric{{ $name.Render }}) updateCapacity() {
- if m.data.{{ $metric.Data.Type }}().DataPoints().Len() > m.capacity {
- m.capacity = m.data.{{ $metric.Data.Type }}().DataPoints().Len()
- }
-}
-
-// emit appends recorded metric data to a metrics slice and prepares it for recording another set of data points.
-func (m *metric{{ $name.Render }}) emit(metrics pmetric.MetricSlice) {
- if m.config.Enabled && m.data.{{ $metric.Data.Type }}().DataPoints().Len() > 0 {
- m.updateCapacity()
- m.data.MoveTo(metrics.AppendEmpty())
- m.init()
- }
-}
-
-func newMetric{{ $name.Render }}(cfg MetricConfig) metric{{ $name.Render }} {
- m := metric{{ $name.Render }}{config: cfg}
- if cfg.Enabled {
- m.data = pmetric.NewMetric()
- m.init()
- }
- return m
-}
-
-{{ end -}}
-
-// MetricsBuilder provides an interface for scrapers to report metrics while taking care of all the transformations
-// required to produce metric representation defined in metadata and user config.
-type MetricsBuilder struct {
- config MetricsBuilderConfig // config of the metrics builder.
- startTime pcommon.Timestamp // start time that will be applied to all recorded data points.
- metricsCapacity int // maximum observed number of metrics per resource.
- metricsBuffer pmetric.Metrics // accumulates metrics data before emitting.
- buildInfo component.BuildInfo // contains version information.
- {{- range $name, $metric := .Metrics }}
- metric{{ $name.Render }} metric{{ $name.Render }}
- {{- end }}
-}
-
-// metricBuilderOption applies changes to default metrics builder.
-type metricBuilderOption func(*MetricsBuilder)
-
-// WithStartTime sets startTime on the metrics builder.
-func WithStartTime(startTime pcommon.Timestamp) metricBuilderOption {
- return func(mb *MetricsBuilder) {
- mb.startTime = startTime
- }
-}
-
-func NewMetricsBuilder(mbc MetricsBuilderConfig, settings receiver.CreateSettings, options ...metricBuilderOption) *MetricsBuilder {
- {{- range $name, $metric := .Metrics }}
- {{- if $metric.Warnings.IfEnabled }}
- if mbc.Metrics.{{ $name.Render }}.Enabled {
- settings.Logger.Warn("[WARNING] `{{ $name }}` should not be enabled: {{ $metric.Warnings.IfEnabled }}")
- }
- {{- end }}
- {{- if $metric.Warnings.IfEnabledNotSet }}
- if !mbc.Metrics.{{ $name.Render }}.enabledSetByUser {
- settings.Logger.Warn("[WARNING] Please set `enabled` field explicitly for `{{ $name }}`: {{ $metric.Warnings.IfEnabledNotSet }}")
- }
- {{- end }}
- {{- if $metric.Warnings.IfConfigured }}
- if mbc.Metrics.{{ $name.Render }}.enabledSetByUser {
- settings.Logger.Warn("[WARNING] `{{ $name }}` should not be configured: {{ $metric.Warnings.IfConfigured }}")
- }
- {{- end }}
- {{- end }}
- {{- range $name, $attr := .ResourceAttributes }}
- {{- if $attr.Warnings.IfEnabled }}
- if mbc.ResourceAttributes.{{ $name.Render }}.Enabled {
- settings.Logger.Warn("[WARNING] `{{ $name }}` should not be enabled: {{ $attr.Warnings.IfEnabled }}")
- }
- {{- end }}
- {{- if $attr.Warnings.IfEnabledNotSet }}
- if !mbc.ResourceAttributes.{{ $name.Render }}.enabledSetByUser {
- settings.Logger.Warn("[WARNING] Please set `enabled` field explicitly for `{{ $name }}`: {{ $attr.Warnings.IfEnabledNotSet }}")
- }
- {{- end }}
- {{- if $attr.Warnings.IfConfigured }}
- if mbc.ResourceAttributes.{{ $name.Render }}.enabledSetByUser {
- settings.Logger.Warn("[WARNING] `{{ $name }}` should not be configured: {{ $attr.Warnings.IfConfigured }}")
- }
- {{- end }}
- {{- end }}
- mb := &MetricsBuilder{
- config: mbc,
- startTime: pcommon.NewTimestampFromTime(time.Now()),
- metricsBuffer: pmetric.NewMetrics(),
- buildInfo: settings.BuildInfo,
- {{- range $name, $metric := .Metrics }}
- metric{{ $name.Render }}: newMetric{{ $name.Render }}(mbc.Metrics.{{ $name.Render }}),
- {{- end }}
- }
- for _, op := range options {
- op(mb)
- }
- return mb
-}
-
-{{- if .ResourceAttributes }}
-// NewResourceBuilder returns a new resource builder that should be used to build a resource associated with for the emitted metrics.
-func (mb *MetricsBuilder) NewResourceBuilder() *ResourceBuilder {
- return NewResourceBuilder(mb.config.ResourceAttributes)
-}
-{{- end }}
-
-// updateCapacity updates max length of metrics and resource attributes that will be used for the slice capacity.
-func (mb *MetricsBuilder) updateCapacity(rm pmetric.ResourceMetrics) {
- if mb.metricsCapacity < rm.ScopeMetrics().At(0).Metrics().Len() {
- mb.metricsCapacity = rm.ScopeMetrics().At(0).Metrics().Len()
- }
-}
-
-// ResourceMetricsOption applies changes to provided resource metrics.
-type ResourceMetricsOption func(pmetric.ResourceMetrics)
-
-// WithResource sets the provided resource on the emitted ResourceMetrics.
-// It's recommended to use ResourceBuilder to create the resource.
-func WithResource(res pcommon.Resource) ResourceMetricsOption {
- return func(rm pmetric.ResourceMetrics) {
- res.CopyTo(rm.Resource())
- }
-}
-
-// WithStartTimeOverride overrides start time for all the resource metrics data points.
-// This option should be only used if different start time has to be set on metrics coming from different resources.
-func WithStartTimeOverride(start pcommon.Timestamp) ResourceMetricsOption {
- return func(rm pmetric.ResourceMetrics) {
- var dps pmetric.NumberDataPointSlice
- metrics := rm.ScopeMetrics().At(0).Metrics()
- for i := 0; i < metrics.Len(); i++ {
- switch metrics.At(i).Type() {
- case pmetric.MetricTypeGauge:
- dps = metrics.At(i).Gauge().DataPoints()
- case pmetric.MetricTypeSum:
- dps = metrics.At(i).Sum().DataPoints()
- }
- for j := 0; j < dps.Len(); j++ {
- dps.At(j).SetStartTimestamp(start)
- }
- }
- }
-}
-
-// EmitForResource saves all the generated metrics under a new resource and updates the internal state to be ready for
-// recording another set of data points as part of another resource. This function can be helpful when one scraper
-// needs to emit metrics from several resources. Otherwise calling this function is not required,
-// just `Emit` function can be called instead.
-// Resource attributes should be provided as ResourceMetricsOption arguments.
-func (mb *MetricsBuilder) EmitForResource(rmo ...ResourceMetricsOption) {
- rm := pmetric.NewResourceMetrics()
- {{- if .SemConvVersion }}
- rm.SetSchemaUrl(conventions.SchemaURL)
- {{- end }}
- ils := rm.ScopeMetrics().AppendEmpty()
- ils.Scope().SetName("{{ .ScopeName }}")
- ils.Scope().SetVersion(mb.buildInfo.Version)
- ils.Metrics().EnsureCapacity(mb.metricsCapacity)
- {{- range $name, $metric := .Metrics }}
- mb.metric{{- $name.Render }}.emit(ils.Metrics())
- {{- end }}
-
- for _, op := range rmo {
- op(rm)
- }
- if ils.Metrics().Len() > 0 {
- mb.updateCapacity(rm)
- rm.MoveTo(mb.metricsBuffer.ResourceMetrics().AppendEmpty())
- }
-}
-
-// Emit returns all the metrics accumulated by the metrics builder and updates the internal state to be ready for
-// recording another set of metrics. This function will be responsible for applying all the transformations required to
-// produce metric representation defined in metadata and user config, e.g. delta or cumulative.
-func (mb *MetricsBuilder) Emit(rmo ...ResourceMetricsOption) pmetric.Metrics {
- mb.EmitForResource(rmo...)
- metrics := mb.metricsBuffer
- mb.metricsBuffer = pmetric.NewMetrics()
- return metrics
-}
-
-{{ range $name, $metric := .Metrics -}}
-// Record{{ $name.Render }}DataPoint adds a data point to {{ $name }} metric.
-func (mb *MetricsBuilder) Record{{ $name.Render }}DataPoint(ts pcommon.Timestamp
- {{- if $metric.Data.HasMetricInputType }}, inputVal {{ $metric.Data.MetricInputType.String }}
- {{- else }}, val {{ $metric.Data.MetricValueType.BasicType }}
- {{- end }}
- {{- range $metric.Attributes -}}
- , {{ .RenderUnexported }}AttributeValue {{ if (attributeInfo .).Enum }}Attribute{{ .Render }}{{ else }}{{ (attributeInfo .).Type.Primitive }}{{ end }}
- {{- end }})
- {{- if $metric.Data.HasMetricInputType }} error{{ end }} {
- {{- if $metric.Data.HasMetricInputType }}
- {{- if eq $metric.Data.MetricValueType.BasicType "float64" }}
- val, err := strconv.ParseFloat(inputVal, 64)
- {{- else if eq $metric.Data.MetricValueType.BasicType "int64" }}
- val, err := strconv.ParseInt(inputVal, 10, 64)
- {{- end }}
- if err != nil {
- return fmt.Errorf("failed to parse {{ $metric.Data.MetricValueType.BasicType }} for {{ $name.Render }}, value was %s: %w", inputVal, err)
- }
- {{- end }}
- mb.metric{{ $name.Render }}.recordDataPoint(mb.startTime, ts, val
- {{- range $metric.Attributes -}}
- , {{ .RenderUnexported }}AttributeValue{{ if (attributeInfo .).Enum }}.String(){{ end }}
- {{- end }})
- {{- if $metric.Data.HasMetricInputType }}
- return nil
- {{- end }}
-}
-{{ end }}
-
-// Reset resets metrics builder to its initial state. It should be used when external metrics source is restarted,
-// and metrics builder should update its startTime and reset it's internal state accordingly.
-func (mb *MetricsBuilder) Reset(options ...metricBuilderOption) {
- mb.startTime = pcommon.NewTimestampFromTime(time.Now())
- for _, op := range options {
- op(mb)
- }
-}
diff --git a/cmd/mdatagen/templates/metrics_test.go.tmpl b/cmd/mdatagen/templates/metrics_test.go.tmpl
deleted file mode 100644
index bf7b09d05a99..000000000000
--- a/cmd/mdatagen/templates/metrics_test.go.tmpl
+++ /dev/null
@@ -1,174 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package {{ .Package }}
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/pmetric"
- "go.opentelemetry.io/collector/receiver/receivertest"
- "go.uber.org/zap"
- "go.uber.org/zap/zaptest/observer"
-)
-
-
-type testConfigCollection int
-
-const (
- testSetDefault testConfigCollection = iota
- testSetAll
- testSetNone
-)
-
-func TestMetricsBuilder(t *testing.T) {
- tests := []struct {
- name string
- configSet testConfigCollection
- }{
- {
- name: "default",
- configSet: testSetDefault,
- },
- {
- name: "all_set",
- configSet: testSetAll,
- },
- {
- name: "none_set",
- configSet: testSetNone,
- },
- }
- for _, test := range tests {
- t.Run(test.name, func(t *testing.T) {
- start := pcommon.Timestamp(1_000_000_000)
- ts := pcommon.Timestamp(1_000_001_000)
- observedZapCore, observedLogs := observer.New(zap.WarnLevel)
- settings := receivertest.NewNopCreateSettings()
- settings.Logger = zap.New(observedZapCore)
- mb := NewMetricsBuilder(loadMetricsBuilderConfig(t, test.name), settings, WithStartTime(start))
-
- expectedWarnings := 0
- {{- range $name, $metric := .Metrics }}
- {{- if and $metric.Enabled $metric.Warnings.IfEnabled }}
- if test.configSet == testSetDefault || test.configSet == testSetAll {
- assert.Equal(t, "[WARNING] `{{ $name }}` should not be enabled: {{ $metric.Warnings.IfEnabled }}", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- {{- end }}
- {{- if $metric.Warnings.IfEnabledNotSet }}
- if test.configSet == testSetDefault {
- assert.Equal(t, "[WARNING] Please set `enabled` field explicitly for `{{ $name }}`: {{ $metric.Warnings.IfEnabledNotSet }}", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- {{- end }}
- {{- if $metric.Warnings.IfConfigured }}
- if test.configSet == testSetAll || test.configSet == testSetNone {
- assert.Equal(t, "[WARNING] `{{ $name }}` should not be configured: {{ $metric.Warnings.IfConfigured }}", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- {{- end }}
- {{- end }}
- {{- range $name, $attr := .ResourceAttributes }}
- {{- if and $attr.Enabled $attr.Warnings.IfEnabled }}
- if test.configSet == testSetDefault || test.configSet == testSetAll {
- assert.Equal(t, "[WARNING] `{{ $name }}` should not be enabled: {{ $attr.Warnings.IfEnabled }}", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- {{- end }}
- {{- if $attr.Warnings.IfEnabledNotSet }}
- if test.configSet == testSetDefault {
- assert.Equal(t, "[WARNING] Please set `enabled` field explicitly for `{{ $name }}`: {{ $attr.Warnings.IfEnabledNotSet }}", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- {{- end }}
- {{- if $attr.Warnings.IfConfigured }}
- if test.configSet == testSetAll || test.configSet == testSetNone {
- assert.Equal(t, "[WARNING] `{{ $name }}` should not be configured: {{ $attr.Warnings.IfConfigured }}", observedLogs.All()[expectedWarnings].Message)
- expectedWarnings++
- }
- {{- end }}
- {{- end }}
-
-
- assert.Equal(t, expectedWarnings, observedLogs.Len())
-
- defaultMetricsCount := 0
- allMetricsCount := 0
- {{- range $name, $metric := .Metrics }}
-
- {{ if $metric.Enabled }}defaultMetricsCount++{{ end }}
- allMetricsCount++
- mb.Record{{ $name.Render }}DataPoint(ts, {{ if $metric.Data.HasMetricInputType }}"1"{{ else }}1{{ end }}
- {{- range $metric.Attributes -}}
- , {{ if (attributeInfo .).Enum }}Attribute{{ .Render }}{{ (index (attributeInfo .).Enum 0) | publicVar }}{{ else }}{{ (attributeInfo .).TestValue }}{{ end }}
- {{- end }})
- {{- end }}
-
- {{ if .ResourceAttributes }}
- rb := mb.NewResourceBuilder()
- {{- range $name, $attr := .ResourceAttributes }}
- {{- if $attr.Enum }}
- rb.Set{{ $attr.Name.Render }}{{ index $attr.Enum 0 | publicVar }}()
- {{- else }}
- rb.Set{{ $attr.Name.Render }}({{ $attr.TestValue }})
- {{- end }}
- {{- end }}
- res := rb.Emit()
- {{- else }}
- res := pcommon.NewResource()
- {{- end }}
- metrics := mb.Emit(WithResource(res))
-
- if test.configSet == testSetNone {
- assert.Equal(t, 0, metrics.ResourceMetrics().Len())
- return
- }
-
- assert.Equal(t, 1, metrics.ResourceMetrics().Len())
- rm := metrics.ResourceMetrics().At(0)
- assert.Equal(t, res, rm.Resource())
- assert.Equal(t, 1, rm.ScopeMetrics().Len())
- ms := rm.ScopeMetrics().At(0).Metrics()
- if test.configSet == testSetDefault {
- assert.Equal(t, defaultMetricsCount, ms.Len())
- }
- if test.configSet == testSetAll {
- assert.Equal(t, allMetricsCount, ms.Len())
- }
- validatedMetrics := make(map[string]bool)
- for i := 0; i < ms.Len(); i++ {
- switch ms.At(i).Name() {
- {{- range $name, $metric := .Metrics }}
- case "{{ $name }}":
- assert.False(t, validatedMetrics["{{ $name }}"], "Found a duplicate in the metrics slice: {{ $name }}")
- validatedMetrics["{{ $name }}"] = true
- assert.Equal(t, pmetric.MetricType{{ $metric.Data.Type }}, ms.At(i).Type())
- assert.Equal(t, 1, ms.At(i).{{ $metric.Data.Type }}().DataPoints().Len())
- assert.Equal(t, "{{ $metric.Description }}", ms.At(i).Description())
- assert.Equal(t, "{{ $metric.Unit }}", ms.At(i).Unit())
- {{- if $metric.Data.HasMonotonic }}
- assert.Equal(t, {{ $metric.Data.Monotonic }}, ms.At(i).{{ $metric.Data.Type }}().IsMonotonic())
- {{- end }}
- {{- if $metric.Data.HasAggregated }}
- assert.Equal(t, pmetric.AggregationTemporality{{ $metric.Data.AggregationTemporality }}, ms.At(i).{{ $metric.Data.Type }}().AggregationTemporality())
- {{- end }}
- dp := ms.At(i).{{ $metric.Data.Type }}().DataPoints().At(0)
- assert.Equal(t, start, dp.StartTimestamp())
- assert.Equal(t, ts, dp.Timestamp())
- assert.Equal(t, pmetric.NumberDataPointValueType{{ $metric.Data.MetricValueType }}, dp.ValueType())
- assert.Equal(t, {{ $metric.Data.MetricValueType.BasicType }}(1), dp.{{ $metric.Data.MetricValueType }}Value())
-
- {{- range $i, $attr := $metric.Attributes }}
- attrVal, ok {{ if eq $i 0 }}:{{ end }}= dp.Attributes().Get("{{ (attributeInfo $attr).Name }}")
- assert.True(t, ok)
- assert.EqualValues(t, {{ (attributeInfo $attr).TestValue }}, attrVal.{{ (attributeInfo $attr).Type }}()
- {{- if or (eq (attributeInfo $attr).Type.String "Slice") (eq (attributeInfo $attr).Type.String "Map")}}.AsRaw(){{ end }})
- {{- end }}
- {{- end }}
- }
- }
- })
- }
-}
diff --git a/cmd/mdatagen/templates/readme.md.tmpl b/cmd/mdatagen/templates/readme.md.tmpl
deleted file mode 100644
index 364d3ad484d4..000000000000
--- a/cmd/mdatagen/templates/readme.md.tmpl
+++ /dev/null
@@ -1,55 +0,0 @@
-
-{{- if len .Status.Stability }}
-| Status | |
-| ------------- |-----------|
-{{- $class := .Status.Class }}
-{{- $shortName := .ShortFolderName }}
-{{- if ne $class "connector" }}
-{{- $idx := 0 }}
-{{- range $stability, $value := .Status.Stability }}
-| {{ if not $idx }}Stability{{ else }} {{ end }} | [{{ $stability }}]{{ if ne $class "extension" }}: {{ stringsJoin $value ", " }} {{ end }} |
-{{- $idx = inc $idx }}
-{{- end }}
-{{- end}}
-{{- if and (ne $class "cmd") (ne $class "pkg") }}
-| Distributions | [{{ stringsJoin .Status.SortedDistributions "], [" }}] |
-{{- end }}
-{{- if .Status.Warnings }}
-| Warnings | [{{ stringsJoin .Status.Warnings ", " }}](#warnings) |
-{{- end }}
-{{- if ne $class "" }}
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3A{{ $class }}%2F{{ $shortName }}%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3A{{ $class }}%2F{{ $shortName }}) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3A{{ $class }}%2F{{ $shortName }}%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3A{{ $class }}%2F{{ $shortName }}) |
-{{- end }}
-{{- if .Status.Codeowners }}
-{{- $codeowners := userLinks .Status.Codeowners.Active }}
-{{- $emeritus := userLinks .Status.Codeowners.Emeritus }}
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | {{ stringsJoin $codeowners ", " }} |
-{{- if $emeritus }}
-| Emeritus | {{ stringsJoin $emeritus ", " }} |
-{{- end }}
-{{- end }}
-{{range $stability, $val := .Status.Stability}}
-[{{ $stability }}]: https://github.com/open-telemetry/opentelemetry-collector#{{ $stability }}
-{{- end }}
-{{- range .Status.SortedDistributions }}
-[{{.}}]: {{ distroURL . }}
-{{- end }}
-{{- if eq $class "connector"}}
-
-## Supported Pipeline Types
-
-| [Exporter Pipeline Type] | [Receiver Pipeline Type] | [Stability Level] |
-| ------------------------ | ------------------------ | ----------------- |
-{{- range $stability, $pipelines := .Status.Stability }}
-{{- range $pipeline := $pipelines }}
-{{- $parts := stringsSplit $pipeline "_to_" }}
-| {{index $parts 0}} | {{index $parts 1}} | [{{$stability}}] |
-{{- end }}
-{{- end }}
-
-[Exporter Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#exporter-pipeline-type
-[Receiver Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#receiver-pipeline-type
-[Stability Level]: https://github.com/open-telemetry/opentelemetry-collector#stability-levels
-{{- end }}
-{{- end }}
-
\ No newline at end of file
diff --git a/cmd/mdatagen/templates/resource.go.tmpl b/cmd/mdatagen/templates/resource.go.tmpl
deleted file mode 100644
index aa6b8e8b685b..000000000000
--- a/cmd/mdatagen/templates/resource.go.tmpl
+++ /dev/null
@@ -1,51 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package {{ .Package }}
-
-import (
- "go.opentelemetry.io/collector/pdata/pcommon"
-)
-
-// ResourceBuilder is a helper struct to build resources predefined in metadata.yaml.
-// The ResourceBuilder is not thread-safe and must not to be used in multiple goroutines.
-type ResourceBuilder struct {
- config ResourceAttributesConfig
- res pcommon.Resource
-}
-
-// NewResourceBuilder creates a new ResourceBuilder. This method should be called on the start of the application.
-func NewResourceBuilder(rac ResourceAttributesConfig) *ResourceBuilder {
- return &ResourceBuilder{
- config: rac,
- res: pcommon.NewResource(),
- }
-}
-
-{{- range $name, $attr := .ResourceAttributes }}
-{{- range $attr.Enum }}
-// Set{{ $name.Render }}{{ . | publicVar }} sets "{{ $name }}={{ . }}" attribute.
-func (rb *ResourceBuilder) Set{{ $name.Render }}{{ . | publicVar }}() {
- if rb.config.{{ $name.Render }}.Enabled {
- rb.res.Attributes().PutStr("{{ $name }}", "{{ . }}")
- }
-}
-{{- else }}
-// Set{{ $name.Render }} sets provided value as "{{ $name }}" attribute.
-func (rb *ResourceBuilder) Set{{ $name.Render }}(val {{ $attr.Type.Primitive }}) {
- if rb.config.{{ $name.Render }}.Enabled {
- {{- if or (eq $attr.Type.String "Bytes") (eq $attr.Type.String "Slice") (eq $attr.Type.String "Map") }}
- rb.res.Attributes().PutEmpty{{ $attr.Type }}("{{ $name }}").FromRaw(val)
- {{- else }}
- rb.res.Attributes().Put{{ $attr.Type }}("{{ $name }}", val)
- {{- end }}
- }
-}
-{{- end }}
-{{ end }}
-
-// Emit returns the built resource and resets the internal builder state.
-func (rb *ResourceBuilder) Emit() pcommon.Resource {
- r := rb.res
- rb.res = pcommon.NewResource()
- return r
-}
diff --git a/cmd/mdatagen/templates/resource_test.go.tmpl b/cmd/mdatagen/templates/resource_test.go.tmpl
deleted file mode 100644
index 7c1422e3d3bf..000000000000
--- a/cmd/mdatagen/templates/resource_test.go.tmpl
+++ /dev/null
@@ -1,65 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package {{ .Package }}
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
-)
-
-{{- $enabledAttrCount := 0 }}
-{{- range $_, $attr := .ResourceAttributes }}
-{{- if $attr.Enabled }}
-{{- $enabledAttrCount = inc $enabledAttrCount }}
-{{- end }}
-{{- end }}
-
-func TestResourceBuilder(t *testing.T) {
- for _, test := range []string{"default", "all_set", "none_set"} {
- t.Run(test, func(t *testing.T) {
- cfg := loadResourceAttributesConfig(t, test)
- rb := NewResourceBuilder(cfg)
- {{- range $name, $attr := .ResourceAttributes }}
- {{- if $attr.Enum }}
- rb.Set{{ $name.Render }}{{ index $attr.Enum 0 | publicVar }}()
- {{- else }}
- rb.Set{{ $name.Render }}({{ $attr.TestValue }})
- {{- end }}
- {{- end }}
-
- res := rb.Emit()
- assert.Equal(t, 0, rb.Emit().Attributes().Len()) // Second call should return empty Resource
-
- switch test {
- case "default":
- assert.Equal(t, {{ $enabledAttrCount }}, res.Attributes().Len())
- case "all_set":
- assert.Equal(t, {{ len .ResourceAttributes }}, res.Attributes().Len())
- case "none_set":
- assert.Equal(t, 0, res.Attributes().Len())
- return
- default:
- assert.Failf(t, "unexpected test case: %s", test)
- }
-
- {{ $assignSign := ":=" }}
- {{- range $name, $attr := .ResourceAttributes }}
- val, ok {{ $assignSign }} res.Attributes().Get("{{ $name }}")
- {{- if $attr.Enabled }}
- assert.True(t, ok)
- {{- else }}
- assert.Equal(t, test == "all_set", ok)
- {{- end }}
- if ok {
- assert.EqualValues(t, {{ $attr.TestValue }}, val.{{ $attr.Type }}()
- {{- if or (eq $attr.Type.String "Bytes") (eq $attr.Type.String "Slice") (eq $attr.Type.String "Map") -}}
- .AsRaw()
- {{- end -}}
- )
- }
- {{- $assignSign = "=" }}
- {{- end }}
- })
- }
-}
diff --git a/cmd/mdatagen/templates/status.go.tmpl b/cmd/mdatagen/templates/status.go.tmpl
deleted file mode 100644
index b9384570b8e6..000000000000
--- a/cmd/mdatagen/templates/status.go.tmpl
+++ /dev/null
@@ -1,18 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package {{ .Package }}
-
-{{- if .Status.Stability }}
-import (
- "go.opentelemetry.io/collector/component"
-)
-{{- end }}
-
-const (
- Type = "{{ .Type }}"
- {{- range $stability, $signals := .Status.Stability }}
- {{- range $signal := $signals }}
- {{ toCamelCase $signal }}Stability = component.StabilityLevel{{ casesTitle $stability }}
- {{- end }}
- {{- end }}
-)
\ No newline at end of file
diff --git a/cmd/mdatagen/templates/testdata/config.yaml.tmpl b/cmd/mdatagen/templates/testdata/config.yaml.tmpl
deleted file mode 100644
index 8b32773ec45e..000000000000
--- a/cmd/mdatagen/templates/testdata/config.yaml.tmpl
+++ /dev/null
@@ -1,31 +0,0 @@
-default:
-all_set:
- {{- if .Metrics }}
- metrics:
- {{- range $name, $_ := .Metrics }}
- {{ $name }}:
- enabled: true
- {{- end }}
- {{- end }}
- {{- if .ResourceAttributes }}
- resource_attributes:
- {{- range $name, $_ := .ResourceAttributes }}
- {{ $name }}:
- enabled: true
- {{- end }}
- {{- end }}
-none_set:
- {{- if .Metrics }}
- metrics:
- {{- range $name, $_ := .Metrics }}
- {{ $name }}:
- enabled: false
- {{- end }}
- {{- end }}
- {{- if .ResourceAttributes }}
- resource_attributes:
- {{- range $name, $_ := .ResourceAttributes }}
- {{ $name }}:
- enabled: false
- {{- end }}
- {{- end }}
diff --git a/cmd/mdatagen/testdata/invalid.yaml b/cmd/mdatagen/testdata/invalid.yaml
deleted file mode 100644
index e466dcbd8e8f..000000000000
--- a/cmd/mdatagen/testdata/invalid.yaml
+++ /dev/null
@@ -1 +0,0 @@
-invalid
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/invalid_aggregation.yaml b/cmd/mdatagen/testdata/invalid_aggregation.yaml
deleted file mode 100644
index 3165d1a71012..000000000000
--- a/cmd/mdatagen/testdata/invalid_aggregation.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-metrics:
- default.metric:
- enabled: true
- description: Monotonic cumulative sum int metric enabled by default.
- extended_documentation: The metric will be become optional soon.
- unit: s
- sum:
- value_type: int
- monotonic: true
- aggregation_temporality: invalidaggregation
diff --git a/cmd/mdatagen/testdata/invalid_class.yaml b/cmd/mdatagen/testdata/invalid_class.yaml
deleted file mode 100644
index 6fcd9b9d7e76..000000000000
--- a/cmd/mdatagen/testdata/invalid_class.yaml
+++ /dev/null
@@ -1,8 +0,0 @@
-type: test
-
-status:
- class: incorrectclass
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/invalid_input_type.yaml b/cmd/mdatagen/testdata/invalid_input_type.yaml
deleted file mode 100644
index 9e28b42120d0..000000000000
--- a/cmd/mdatagen/testdata/invalid_input_type.yaml
+++ /dev/null
@@ -1,20 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-metrics:
- system.cpu.time:
- enabled: true
- description: Total CPU seconds broken down by different states.
- unit: s
- sum:
- value_type: double
- monotonic: true
- aggregation_temporality: cumulative
- input_type: double
- attributes:
diff --git a/cmd/mdatagen/testdata/invalid_stability.yaml b/cmd/mdatagen/testdata/invalid_stability.yaml
deleted file mode 100644
index 259aade2445a..000000000000
--- a/cmd/mdatagen/testdata/invalid_stability.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-type: file
-status:
- class: receiver
- stability:
- incorrectstability: [logs]
- beta: [traces]
- stable: [metrics]
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/invalid_stability_component.yaml b/cmd/mdatagen/testdata/invalid_stability_component.yaml
deleted file mode 100644
index 5aa538865fa4..000000000000
--- a/cmd/mdatagen/testdata/invalid_stability_component.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-type: file
-status:
- class: receiver
- stability:
- development: [incorrectcomponent]
- beta: [traces]
- stable: [metrics]
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/invalid_type_attr.yaml b/cmd/mdatagen/testdata/invalid_type_attr.yaml
deleted file mode 100644
index ed951be6d6db..000000000000
--- a/cmd/mdatagen/testdata/invalid_type_attr.yaml
+++ /dev/null
@@ -1,24 +0,0 @@
-type: metricreceiver
-
-sem_conv_version: 1.9.0
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-attributes:
- used_attr:
- description: Used attribute.
- type: invalidtype
-
-metrics:
- metric:
- enabled: true
- description: Metric.
- unit: 1
- gauge:
- value_type: double
- attributes: [used_attr]
diff --git a/cmd/mdatagen/testdata/invalid_type_rattr.yaml b/cmd/mdatagen/testdata/invalid_type_rattr.yaml
deleted file mode 100644
index 90e9c33dae3e..000000000000
--- a/cmd/mdatagen/testdata/invalid_type_rattr.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-type: file
-
-sem_conv_version: 1.9.0
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-resource_attributes:
- string.resource.attr:
- description: Resource attribute with any string value.
- type: invalidtype
- enabled: true
diff --git a/cmd/mdatagen/testdata/metrics_and_type.yaml b/cmd/mdatagen/testdata/metrics_and_type.yaml
deleted file mode 100644
index 81d66bde9c13..000000000000
--- a/cmd/mdatagen/testdata/metrics_and_type.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-metrics:
- metric:
- enabled: true
- description: Description.
- unit: s
- gauge:
- value_type: double
diff --git a/cmd/mdatagen/testdata/no_aggregation.yaml b/cmd/mdatagen/testdata/no_aggregation.yaml
deleted file mode 100644
index 02c14b6b1e70..000000000000
--- a/cmd/mdatagen/testdata/no_aggregation.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-type: file
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-
-metrics:
- default.metric:
- enabled: true
- description: Monotonic cumulative sum int metric enabled by default.
- extended_documentation: The metric will be become optional soon.
- unit: s
- sum:
- value_type: int
- monotonic: false
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/no_class.yaml b/cmd/mdatagen/testdata/no_class.yaml
deleted file mode 100644
index 8d33f9c019a1..000000000000
--- a/cmd/mdatagen/testdata/no_class.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-type: test
-
-status:
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/no_description_attr.yaml b/cmd/mdatagen/testdata/no_description_attr.yaml
deleted file mode 100644
index 1942f74e1110..000000000000
--- a/cmd/mdatagen/testdata/no_description_attr.yaml
+++ /dev/null
@@ -1,33 +0,0 @@
-# Sample metric metadata file with all available configurations.
-
-type: file
-
-sem_conv_version: 1.9.0
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-attributes:
- string_attr:
- type: string
-
-metrics:
- default.metric:
- enabled: true
- description: Monotonic cumulative sum int metric enabled by default.
- extended_documentation: The metric will be become optional soon.
- unit: s
- sum:
- value_type: int
- monotonic: true
- aggregation_temporality: cumulative
- attributes: [string_attr]
- warnings:
- if_enabled_not_set: This metric will be disabled by default soon.
diff --git a/cmd/mdatagen/testdata/no_description_rattr.yaml b/cmd/mdatagen/testdata/no_description_rattr.yaml
deleted file mode 100644
index d489eaa7cb68..000000000000
--- a/cmd/mdatagen/testdata/no_description_rattr.yaml
+++ /dev/null
@@ -1,12 +0,0 @@
-type: file
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-resource_attributes:
- string.resource.attr:
- type: string
- enabled: true
diff --git a/cmd/mdatagen/testdata/no_enabled.yaml b/cmd/mdatagen/testdata/no_enabled.yaml
deleted file mode 100644
index ab1dfafed32e..000000000000
--- a/cmd/mdatagen/testdata/no_enabled.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-metrics:
- system.cpu.time:
- description: Total CPU seconds broken down by different states.
- unit: s
- sum:
- value_type: double
- monotonic: true
- aggregation_temporality: cumulative
- attributes:
diff --git a/cmd/mdatagen/testdata/no_metric_description.yaml b/cmd/mdatagen/testdata/no_metric_description.yaml
deleted file mode 100644
index de9cbd420872..000000000000
--- a/cmd/mdatagen/testdata/no_metric_description.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-type: file
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-
-metrics:
- default.metric:
- enabled: true
- extended_documentation: The metric will be become optional soon.
- unit: s
- sum:
- value_type: int
- monotonic: true
- aggregation_temporality: cumulative
diff --git a/cmd/mdatagen/testdata/no_metric_type.yaml b/cmd/mdatagen/testdata/no_metric_type.yaml
deleted file mode 100644
index 1f0e0283f2a1..000000000000
--- a/cmd/mdatagen/testdata/no_metric_type.yaml
+++ /dev/null
@@ -1,13 +0,0 @@
-type: metricreceiver
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-metrics:
- system.cpu.time:
- enabled: true
- description: Total CPU seconds broken down by different states.
- unit: s
- attributes:
diff --git a/cmd/mdatagen/testdata/no_metric_unit.yaml b/cmd/mdatagen/testdata/no_metric_unit.yaml
deleted file mode 100644
index cc5c49a7c9a2..000000000000
--- a/cmd/mdatagen/testdata/no_metric_unit.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-type: file
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-
-metrics:
- default.metric:
- enabled: true
- description: Monotonic cumulative sum int metric enabled by default.
- extended_documentation: The metric will be become optional soon.
- sum:
- value_type: int
- monotonic: true
- aggregation_temporality: cumulative
diff --git a/cmd/mdatagen/testdata/no_monotonic.yaml b/cmd/mdatagen/testdata/no_monotonic.yaml
deleted file mode 100644
index 2f99cecab58a..000000000000
--- a/cmd/mdatagen/testdata/no_monotonic.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-type: file
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-
-metrics:
- default.metric:
- enabled: true
- description: Monotonic cumulative sum int metric enabled by default.
- extended_documentation: The metric will be become optional soon.
- unit: s
- sum:
- value_type: int
- aggregation_temporality: cumulative
diff --git a/cmd/mdatagen/testdata/no_stability.yaml b/cmd/mdatagen/testdata/no_stability.yaml
deleted file mode 100644
index 29b00be6ffa6..000000000000
--- a/cmd/mdatagen/testdata/no_stability.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-type: test
-
-status:
- class: receiver
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/no_stability_component.yaml b/cmd/mdatagen/testdata/no_stability_component.yaml
deleted file mode 100644
index 9c0631e8bec4..000000000000
--- a/cmd/mdatagen/testdata/no_stability_component.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-type: file
-status:
- class: receiver
- stability:
- beta:
- stable: [metrics]
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/no_status.yaml b/cmd/mdatagen/testdata/no_status.yaml
deleted file mode 100644
index 75db25c3b05d..000000000000
--- a/cmd/mdatagen/testdata/no_status.yaml
+++ /dev/null
@@ -1 +0,0 @@
-type: test
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/no_type.yaml b/cmd/mdatagen/testdata/no_type.yaml
deleted file mode 100644
index 72d92e5dee84..000000000000
--- a/cmd/mdatagen/testdata/no_type.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/no_type_attr.yaml b/cmd/mdatagen/testdata/no_type_attr.yaml
deleted file mode 100644
index 914a9820bdaa..000000000000
--- a/cmd/mdatagen/testdata/no_type_attr.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-type: metricreceiver
-
-sem_conv_version: 1.9.0
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-attributes:
- used_attr:
- description: Used attribute.
-
-metrics:
- metric:
- enabled: true
- description: Metric.
- unit: 1
- gauge:
- value_type: double
- attributes: [used_attr]
diff --git a/cmd/mdatagen/testdata/no_type_rattr.yaml b/cmd/mdatagen/testdata/no_type_rattr.yaml
deleted file mode 100644
index e6961b1801e7..000000000000
--- a/cmd/mdatagen/testdata/no_type_rattr.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-type: file
-
-sem_conv_version: 1.9.0
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-resource_attributes:
- string.resource.attr:
- description: Resource attribute with any string value.
- enabled: true
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/no_value_type.yaml b/cmd/mdatagen/testdata/no_value_type.yaml
deleted file mode 100644
index 046f457b510b..000000000000
--- a/cmd/mdatagen/testdata/no_value_type.yaml
+++ /dev/null
@@ -1,22 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-
-metrics:
- system.cpu.time:
- enabled: true
- description: Total CPU seconds broken down by different states.
- unit: s
- sum:
- monotonic: true
- aggregation_temporality: cumulative
- attributes:
diff --git a/cmd/mdatagen/testdata/parent.yaml b/cmd/mdatagen/testdata/parent.yaml
deleted file mode 100644
index 1f8fc15ba176..000000000000
--- a/cmd/mdatagen/testdata/parent.yaml
+++ /dev/null
@@ -1,3 +0,0 @@
-type: subcomponent
-
-parent: parentComponent
\ No newline at end of file
diff --git a/cmd/mdatagen/testdata/readme_with_cmd_class.md b/cmd/mdatagen/testdata/readme_with_cmd_class.md
deleted file mode 100644
index 71a8ad7598c6..000000000000
--- a/cmd/mdatagen/testdata/readme_with_cmd_class.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Some component
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [alpha]: logs |
-| | [beta]: metrics |
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Acmd%2Ffoo%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Acmd%2Ffoo) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Acmd%2Ffoo%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Acmd%2Ffoo) |
-
-[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-
-
-Some info about a component
diff --git a/cmd/mdatagen/testdata/readme_with_multiple_signals.md b/cmd/mdatagen/testdata/readme_with_multiple_signals.md
deleted file mode 100644
index 8de1ed6221af..000000000000
--- a/cmd/mdatagen/testdata/readme_with_multiple_signals.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Some component
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [alpha]: logs |
-| | [beta]: metrics |
-| Distributions | [contrib] |
-
-[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-
-
-Some info about a component
diff --git a/cmd/mdatagen/testdata/readme_with_status.md b/cmd/mdatagen/testdata/readme_with_status.md
deleted file mode 100644
index 92e0b1f42580..000000000000
--- a/cmd/mdatagen/testdata/readme_with_status.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Some component
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [beta]: metrics |
-| Distributions | [contrib] |
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Ffoo%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Ffoo) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Ffoo%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Ffoo) |
-
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-
-
-Some info about a component
diff --git a/cmd/mdatagen/testdata/readme_with_status_codeowners.md b/cmd/mdatagen/testdata/readme_with_status_codeowners.md
deleted file mode 100644
index f350b5933603..000000000000
--- a/cmd/mdatagen/testdata/readme_with_status_codeowners.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# Some component
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [beta]: metrics |
-| Distributions | [contrib] |
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Ffoo%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Ffoo) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Ffoo%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Ffoo) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@foo](https://www.github.com/foo) |
-
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-
-
-Some info about a component
diff --git a/cmd/mdatagen/testdata/readme_with_status_codeowners_and_emeritus.md b/cmd/mdatagen/testdata/readme_with_status_codeowners_and_emeritus.md
deleted file mode 100644
index 203de2f3dd0c..000000000000
--- a/cmd/mdatagen/testdata/readme_with_status_codeowners_and_emeritus.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Some component
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [beta]: metrics |
-| Distributions | [contrib] |
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Areceiver%2Ffoo%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Areceiver%2Ffoo) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Areceiver%2Ffoo%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Areceiver%2Ffoo) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@foo](https://www.github.com/foo) |
-| Emeritus | [@bar](https://www.github.com/bar) |
-
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-
-
-Some info about a component
diff --git a/cmd/mdatagen/testdata/readme_with_status_extension.md b/cmd/mdatagen/testdata/readme_with_status_extension.md
deleted file mode 100644
index 1c454afe9a93..000000000000
--- a/cmd/mdatagen/testdata/readme_with_status_extension.md
+++ /dev/null
@@ -1,14 +0,0 @@
-# Some component
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [beta] |
-| Distributions | [contrib] |
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aextension%2Ffoo%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aextension%2Ffoo) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aextension%2Ffoo%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aextension%2Ffoo) |
-
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-
-
-Some info about a component
diff --git a/cmd/mdatagen/testdata/readme_with_warnings.md b/cmd/mdatagen/testdata/readme_with_warnings.md
deleted file mode 100644
index 6cf1afa3866c..000000000000
--- a/cmd/mdatagen/testdata/readme_with_warnings.md
+++ /dev/null
@@ -1,16 +0,0 @@
-# Some component
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [beta]: metrics |
-| Distributions | [contrib] |
-| Warnings | [warning1](#warnings) |
-
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-
-
-Some info about a component
-### warnings
-Some warning there.
diff --git a/cmd/mdatagen/testdata/readme_without_status.md b/cmd/mdatagen/testdata/readme_without_status.md
deleted file mode 100644
index be610f8c087f..000000000000
--- a/cmd/mdatagen/testdata/readme_without_status.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# Some component
-
-Some info about a component
diff --git a/cmd/mdatagen/testdata/resource_attributes_only.yaml b/cmd/mdatagen/testdata/resource_attributes_only.yaml
deleted file mode 100644
index 05e031bcf455..000000000000
--- a/cmd/mdatagen/testdata/resource_attributes_only.yaml
+++ /dev/null
@@ -1,17 +0,0 @@
-type: test
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
- distributions: [contrib]
- warnings:
- - Any additional information that should be brought to the consumer's attention
-
-resource_attributes:
- res.attr1:
- description: Resource attribute 1.
- type: string
- enabled: true
diff --git a/cmd/mdatagen/testdata/status_only.yaml b/cmd/mdatagen/testdata/status_only.yaml
deleted file mode 100644
index 2365b43f1d95..000000000000
--- a/cmd/mdatagen/testdata/status_only.yaml
+++ /dev/null
@@ -1,6 +0,0 @@
-type: metricreceiver
-status:
- class: exporter
- stability:
- beta: [traces, metrics, logs]
- distributions: [contrib]
diff --git a/cmd/mdatagen/testdata/two_metric_types.yaml b/cmd/mdatagen/testdata/two_metric_types.yaml
deleted file mode 100644
index 572eab2f3bcb..000000000000
--- a/cmd/mdatagen/testdata/two_metric_types.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-metrics:
- system.cpu.time:
- enabled: true
- description: Total CPU seconds broken down by different states.
- unit: s
- gauge:
- value_type: double
- sum:
- value_type: double
- monotonic: true
- aggregation_temporality: cumulative
- attributes:
diff --git a/cmd/mdatagen/testdata/unknown_metric_attribute.yaml b/cmd/mdatagen/testdata/unknown_metric_attribute.yaml
deleted file mode 100644
index d86b5afe4011..000000000000
--- a/cmd/mdatagen/testdata/unknown_metric_attribute.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-metrics:
- system.cpu.time:
- enabled: true
- description: Total CPU seconds broken down by different states.
- unit: s
- sum:
- value_type: double
- monotonic: true
- aggregation_temporality: cumulative
- attributes: [missing]
diff --git a/cmd/mdatagen/testdata/unknown_value_type.yaml b/cmd/mdatagen/testdata/unknown_value_type.yaml
deleted file mode 100644
index 1a4890045d8e..000000000000
--- a/cmd/mdatagen/testdata/unknown_value_type.yaml
+++ /dev/null
@@ -1,18 +0,0 @@
-type: metricreceiver
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-metrics:
- system.cpu.time:
- enabled: true
- description: Total CPU seconds broken down by different states.
- unit: s
- sum:
- value_type: unknown
- monotonic: true
- aggregation_temporality: cumulative
diff --git a/cmd/mdatagen/testdata/unused_attribute.yaml b/cmd/mdatagen/testdata/unused_attribute.yaml
deleted file mode 100644
index cc0eb08f7671..000000000000
--- a/cmd/mdatagen/testdata/unused_attribute.yaml
+++ /dev/null
@@ -1,29 +0,0 @@
-type: metricreceiver
-
-sem_conv_version: 1.9.0
-
-status:
- class: receiver
- stability:
- development: [logs]
- beta: [traces]
- stable: [metrics]
-
-attributes:
- used_attr:
- description: Used attribute.
- type: string
-
- unused_attr:
- name_override: state
- description: Unused attribute.
- type: string
-
-metrics:
- metric:
- enabled: true
- description: Metric.
- unit: 1
- gauge:
- value_type: double
- attributes: [used_attr]
diff --git a/cmd/mdatagen/third_party/golint/LICENSE b/cmd/mdatagen/third_party/golint/LICENSE
deleted file mode 100644
index 65d761bc9f28..000000000000
--- a/cmd/mdatagen/third_party/golint/LICENSE
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2013 The Go Authors. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-
- * Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above
-copyright notice, this list of conditions and the following disclaimer
-in the documentation and/or other materials provided with the
-distribution.
- * Neither the name of Google Inc. nor the names of its
-contributors may be used to endorse or promote products derived from
-this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/cmd/mdatagen/third_party/golint/golint.go b/cmd/mdatagen/third_party/golint/golint.go
deleted file mode 100644
index f4898aaebd5b..000000000000
--- a/cmd/mdatagen/third_party/golint/golint.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (c) 2013 The Go Authors. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file or at
-// https://developers.google.com/open-source/licenses/bsd.
-
-package golint
-
-// See https://github.com/golang/lint/blob/d0100b6bd8b389f0385611eb39152c4d7c3a7905/lint.go#L771
-
-// Acronyms is a list of known acronyms that should not be formatted when linting.
-var Acronyms = map[string]bool{
- "ACL": true,
- "API": true,
- "ASCII": true,
- "CPU": true,
- "CSS": true,
- "DNS": true,
- "EOF": true,
- "GUID": true,
- "HTML": true,
- "HTTP": true,
- "HTTPS": true,
- "ID": true,
- "IP": true,
- "JSON": true,
- "LHS": true,
- "QPS": true,
- "RAM": true,
- "RHS": true,
- "RPC": true,
- "SLA": true,
- "SMTP": true,
- "SQL": true,
- "SSH": true,
- "TCP": true,
- "TLS": true,
- "TTL": true,
- "UDP": true,
- "UI": true,
- "UID": true,
- "UUID": true,
- "URI": true,
- "URL": true,
- "UTF8": true,
- "VM": true,
- "XML": true,
- "XMPP": true,
- "XSRF": true,
- "XSS": true,
-}
diff --git a/cmd/mdatagen/validate.go b/cmd/mdatagen/validate.go
deleted file mode 100644
index 75c61f730406..000000000000
--- a/cmd/mdatagen/validate.go
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "errors"
- "fmt"
-
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.uber.org/multierr"
-)
-
-func (md *metadata) Validate() error {
- var errs error
- if err := md.validateType(); err != nil {
- errs = multierr.Append(errs, err)
- }
- if err := md.validateStatus(); err != nil {
- errs = multierr.Append(errs, err)
- }
- if err := md.validateResourceAttributes(); err != nil {
- errs = multierr.Append(errs, err)
- }
- if err := md.validateMetrics(); err != nil {
- errs = multierr.Append(errs, err)
- }
- return errs
-}
-
-func (md *metadata) validateType() error {
- if md.Type == "" {
- return errors.New("missing type")
- }
- return nil
-}
-
-func (md *metadata) validateStatus() error {
- if md.Parent != "" && md.Status == nil {
- // status is not required for subcomponents.
- return nil
- }
-
- var errs error
- if md.Status == nil {
- return errors.New("missing status")
- }
- if err := md.Status.validateClass(); err != nil {
- errs = multierr.Append(errs, err)
- }
- if md.Parent == "" {
- if err := md.Status.validateStability(); err != nil {
- errs = multierr.Append(errs, err)
- }
- }
- return errs
-}
-
-func (s *Status) validateClass() error {
- if s.Class == "" {
- return errors.New("missing class")
- }
- if s.Class != "receiver" && s.Class != "processor" && s.Class != "exporter" && s.Class != "connector" && s.Class != "extension" && s.Class != "cmd" && s.Class != "pkg" {
- return fmt.Errorf("invalid class: %v", s.Class)
- }
- return nil
-}
-
-func (s *Status) validateStability() error {
- var errs error
- if len(s.Stability) == 0 {
- return errors.New("missing stability")
- }
- for stability, component := range s.Stability {
- if stability != "development" && stability != "alpha" && stability != "beta" && stability != "stable" && stability != "deprecated" && stability != "unmaintained" {
- errs = multierr.Append(errs, fmt.Errorf("invalid stability: %v", stability))
- }
- if component == nil {
- errs = multierr.Append(errs, fmt.Errorf("missing component for stability: %v", stability))
- }
- for _, c := range component {
- if c != "metrics" &&
- c != "traces" &&
- c != "logs" &&
- c != "traces_to_traces" &&
- c != "traces_to_metrics" &&
- c != "traces_to_logs" &&
- c != "metrics_to_traces" &&
- c != "metrics_to_metrics" &&
- c != "metrics_to_logs" &&
- c != "logs_to_traces" &&
- c != "logs_to_metrics" &&
- c != "logs_to_logs" &&
- c != "extension" {
- errs = multierr.Append(errs, fmt.Errorf("invalid component: %v", c))
- }
- }
- }
- return errs
-}
-
-func (md *metadata) validateResourceAttributes() error {
- var errs error
- for name, attr := range md.ResourceAttributes {
- if attr.Description == "" {
- errs = multierr.Append(errs, fmt.Errorf("empty description for resource attribute: %v", name))
- }
- empty := ValueType{ValueType: pcommon.ValueTypeEmpty}
- if attr.Type == empty {
- errs = multierr.Append(errs, fmt.Errorf("empty type for resource attribute: %v", name))
- }
- }
- return errs
-}
-
-func (md *metadata) validateMetrics() error {
- var errs error
- usedAttrs := map[attributeName]bool{}
- for mn, m := range md.Metrics {
- if m.Sum == nil && m.Gauge == nil {
- errs = multierr.Append(errs, fmt.Errorf("metric %v doesn't have a metric type key, "+
- "one of the following has to be specified: sum, gauge", mn))
- continue
- }
- if m.Sum != nil && m.Gauge != nil {
- errs = multierr.Append(errs, fmt.Errorf("metric %v has more than one metric type keys, "+
- "only one of the following has to be specified: sum, gauge", mn))
- continue
- }
- if err := m.validate(); err != nil {
- errs = multierr.Append(errs, fmt.Errorf(`metric "%v": %w`, mn, err))
- continue
- }
- unknownAttrs := make([]attributeName, 0, len(m.Attributes))
- for _, attr := range m.Attributes {
- if _, ok := md.Attributes[attr]; ok {
- usedAttrs[attr] = true
- } else {
- unknownAttrs = append(unknownAttrs, attr)
- }
- }
- if len(unknownAttrs) > 0 {
- errs = multierr.Append(errs, fmt.Errorf(`metric "%v" refers to undefined attributes: %v`, mn, unknownAttrs))
- }
- }
- errs = multierr.Append(errs, md.validateAttributes(usedAttrs))
- return errs
-}
-
-func (m *metric) validate() error {
- var errs error
- if m.Description == "" {
- errs = multierr.Append(errs, errors.New(`missing metric description`))
- }
- if m.Unit == nil {
- errs = multierr.Append(errs, errors.New(`missing metric unit`))
- }
- if m.Sum != nil {
- errs = multierr.Append(errs, m.Sum.Validate())
- }
- if m.Gauge != nil {
- errs = multierr.Append(errs, m.Gauge.Validate())
- }
- return errs
-}
-
-func (mit MetricInputType) Validate() error {
- if mit.InputType != "" && mit.InputType != "string" {
- return fmt.Errorf("invalid `input_type` value \"%v\", must be \"\" or \"string\"", mit.InputType)
- }
- return nil
-}
-
-func (md *metadata) validateAttributes(usedAttrs map[attributeName]bool) error {
- var errs error
- unusedAttrs := make([]attributeName, 0, len(md.Attributes))
- for attrName, attr := range md.Attributes {
- if attr.Description == "" {
- errs = multierr.Append(errs, fmt.Errorf(`missing attribute description for: %v`, attrName))
- }
- empty := ValueType{ValueType: pcommon.ValueTypeEmpty}
- if attr.Type == empty {
- errs = multierr.Append(errs, fmt.Errorf("empty type for attribute: %v", attrName))
- }
- if !usedAttrs[attrName] {
- unusedAttrs = append(unusedAttrs, attrName)
- }
- }
- if len(unusedAttrs) > 0 {
- errs = multierr.Append(errs, fmt.Errorf("unused attributes: %v", unusedAttrs))
- }
- return errs
-}
diff --git a/cmd/mdatagen/validate_test.go b/cmd/mdatagen/validate_test.go
deleted file mode 100644
index 12871a4ab8c5..000000000000
--- a/cmd/mdatagen/validate_test.go
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package main
-
-import (
- "fmt"
- "io/fs"
- "path/filepath"
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
-)
-
-func TestValidate(t *testing.T) {
- tests := []struct {
- name string
- wantErr string
- }{
- {
- name: "testdata/no_type.yaml",
- wantErr: "missing type",
- },
- {
- name: "testdata/no_status.yaml",
- wantErr: "missing status",
- },
- {
- name: "testdata/no_class.yaml",
- wantErr: "missing class",
- },
- {
- name: "testdata/invalid_class.yaml",
- wantErr: "invalid class: incorrectclass",
- },
- {
- name: "testdata/no_stability.yaml",
- wantErr: "missing stability",
- },
- {
- name: "testdata/invalid_stability.yaml",
- wantErr: "invalid stability: incorrectstability",
- },
- {
- name: "testdata/no_stability_component.yaml",
- wantErr: "missing component for stability: beta",
- },
- {
- name: "testdata/invalid_stability_component.yaml",
- wantErr: "invalid component: incorrectcomponent",
- },
- {
- name: "testdata/no_description_rattr.yaml",
- wantErr: "empty description for resource attribute: string.resource.attr",
- },
- {
- name: "testdata/no_type_rattr.yaml",
- wantErr: "empty type for resource attribute: string.resource.attr",
- },
- {
- name: "testdata/no_metric_description.yaml",
- wantErr: "metric \"default.metric\": missing metric description",
- },
- {
- name: "testdata/no_metric_unit.yaml",
- wantErr: "metric \"default.metric\": missing metric unit",
- },
- {
- name: "testdata/no_metric_type.yaml",
- wantErr: "metric system.cpu.time doesn't have a metric type key, " +
- "one of the following has to be specified: sum, gauge",
- },
- {
- name: "testdata/two_metric_types.yaml",
- wantErr: "metric system.cpu.time has more than one metric type keys, " +
- "only one of the following has to be specified: sum, gauge",
- },
- {
- name: "testdata/invalid_input_type.yaml",
- wantErr: "metric \"system.cpu.time\": invalid `input_type` value \"double\", must be \"\" or \"string\"",
- },
- {
- name: "testdata/unknown_metric_attribute.yaml",
- wantErr: "metric \"system.cpu.time\" refers to undefined attributes: [missing]",
- },
- {
- name: "testdata/unused_attribute.yaml",
- wantErr: "unused attributes: [unused_attr]",
- },
- {
- name: "testdata/no_description_attr.yaml",
- wantErr: "missing attribute description for: string_attr",
- },
- {
- name: "testdata/no_type_attr.yaml",
- wantErr: "empty type for attribute: used_attr",
- },
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- _, err := loadMetadata(tt.name)
- require.Error(t, err)
- require.EqualError(t, err, tt.wantErr)
- })
- }
-}
-
-func TestValidateMetricDuplicates(t *testing.T) {
- allowedMetrics := map[string][]string{
- "container.cpu.utilization": {"docker_stats", "kubeletstats"},
- "container.memory.rss": {"docker_stats", "kubeletstats"},
- "container.uptime": {"docker_stats", "kubeletstats"},
- }
- allMetrics := map[string][]string{}
- err := filepath.Walk("../../receiver", func(path string, info fs.FileInfo, err error) error {
- if info.Name() == "metadata.yaml" {
- md, err := loadMetadata(path)
- require.NoError(t, err)
- if len(md.Metrics) > 0 {
- for metricName := range md.Metrics {
- allMetrics[md.Type] = append(allMetrics[md.Type], string(metricName))
- }
- }
- }
- return nil
- })
- require.NoError(t, err)
-
- seen := make(map[string]string)
- for receiver, metrics := range allMetrics {
- for _, metricName := range metrics {
- if val, exists := seen[metricName]; exists {
- receivers, allowed := allowedMetrics[metricName]
- assert.True(
- t,
- allowed && contains(receiver, receivers) && contains(val, receivers),
- fmt.Sprintf("Duplicate metric %v in receivers %v and %v. Please validate that this is intentional by adding the metric name and receiver types in the allowedMetrics map in this test\n", metricName, receiver, val),
- )
- }
- seen[metricName] = receiver
- }
- }
-}
-
-func contains(r string, rs []string) bool {
- for _, s := range rs {
- if s == r {
- return true
- }
- }
- return false
-}
diff --git a/cmd/opampsupervisor/Makefile b/cmd/opampsupervisor/Makefile
index ded7a36092dc..fea4c327e6cc 100644
--- a/cmd/opampsupervisor/Makefile
+++ b/cmd/opampsupervisor/Makefile
@@ -1 +1,5 @@
include ../../Makefile.Common
+
+e2e-test:
+ make -C ../../ otelcontribcol
+ go test -v --tags=e2e .
diff --git a/cmd/opampsupervisor/README.md b/cmd/opampsupervisor/README.md
index fcdeb091672f..136e36153971 100644
--- a/cmd/opampsupervisor/README.md
+++ b/cmd/opampsupervisor/README.md
@@ -18,7 +18,7 @@ The supervisor is currently undergoing heavy development and is not ready for an
3. Run the supervisor, substituting `` for your platform:
```shell
- go run . --config testdata/supervisor_.yaml
+ go run . --config examples/supervisor_.yaml
```
4. The supervisor should connect to the OpAMP server and start a Collector instance.
diff --git a/cmd/opampsupervisor/e2e_test.go b/cmd/opampsupervisor/e2e_test.go
new file mode 100644
index 000000000000..6119ed1c5490
--- /dev/null
+++ b/cmd/opampsupervisor/e2e_test.go
@@ -0,0 +1,520 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+//go:build e2e
+
+package main
+
+import (
+ "bytes"
+ "context"
+ "crypto/sha256"
+ "io"
+ "log"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "os/exec"
+ "path"
+ "runtime"
+ "strings"
+ "sync/atomic"
+ "testing"
+ "text/template"
+ "time"
+
+ "github.com/knadh/koanf/parsers/yaml"
+ "github.com/knadh/koanf/providers/file"
+ "github.com/knadh/koanf/providers/rawbytes"
+ "github.com/knadh/koanf/v2"
+ clientTypes "github.com/open-telemetry/opamp-go/client/types"
+ "github.com/open-telemetry/opamp-go/protobufs"
+ "github.com/open-telemetry/opamp-go/server"
+ "github.com/open-telemetry/opamp-go/server/types"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ semconv "go.opentelemetry.io/collector/semconv/v1.21.0"
+ "go.uber.org/zap"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/opampsupervisor/supervisor"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/opampsupervisor/supervisor/config"
+)
+
+var _ clientTypes.Logger = testLogger{}
+
+type testLogger struct {
+ t *testing.T
+}
+
+func (tl testLogger) Debugf(_ context.Context, format string, args ...any) {
+ tl.t.Logf(format, args...)
+}
+
+func (tl testLogger) Errorf(_ context.Context, format string, args ...any) {
+ tl.t.Logf(format, args...)
+}
+
+func defaultConnectingHandler(connectionCallbacks server.ConnectionCallbacksStruct) func(request *http.Request) types.ConnectionResponse {
+ return func(request *http.Request) types.ConnectionResponse {
+ return types.ConnectionResponse{
+ Accept: true,
+ ConnectionCallbacks: connectionCallbacks,
+ }
+ }
+}
+
+// onConnectingFuncFactory is a function that will be given to server.CallbacksStruct as
+// OnConnectingFunc. This allows changing the ConnectionCallbacks both from the newOpAMPServer
+// caller and inside of newOpAMP Server, and for custom implementations of the value for `Accept`
+// in types.ConnectionResponse.
+type onConnectingFuncFactory func(connectionCallbacks server.ConnectionCallbacksStruct) func(request *http.Request) types.ConnectionResponse
+
+type testingOpAMPServer struct {
+ addr string
+ supervisorConnected chan bool
+ sendToSupervisor func(*protobufs.ServerToAgent)
+}
+
+func newOpAMPServer(t *testing.T, connectingCallback onConnectingFuncFactory, callbacks server.ConnectionCallbacksStruct) *testingOpAMPServer {
+ var agentConn atomic.Value
+ var isAgentConnected atomic.Bool
+ connectedChan := make(chan bool)
+ s := server.New(testLogger{t: t})
+ onConnectedFunc := callbacks.OnConnectedFunc
+ callbacks.OnConnectedFunc = func(ctx context.Context, conn types.Connection) {
+ if onConnectedFunc != nil {
+ onConnectedFunc(ctx, conn)
+ }
+ agentConn.Store(conn)
+ isAgentConnected.Store(true)
+ connectedChan <- true
+ }
+ onConnectionCloseFunc := callbacks.OnConnectionCloseFunc
+ callbacks.OnConnectionCloseFunc = func(conn types.Connection) {
+ isAgentConnected.Store(false)
+ connectedChan <- false
+ if onConnectionCloseFunc != nil {
+ onConnectionCloseFunc(conn)
+ }
+ }
+ handler, _, err := s.Attach(server.Settings{
+ Callbacks: server.CallbacksStruct{
+ OnConnectingFunc: connectingCallback(callbacks),
+ },
+ })
+ require.NoError(t, err)
+ mux := http.NewServeMux()
+ mux.HandleFunc("/v1/opamp", handler)
+ httpSrv := httptest.NewServer(mux)
+
+ shutdown := func() {
+ t.Log("Shutting down")
+ err := s.Stop(context.Background())
+ assert.NoError(t, err)
+ httpSrv.Close()
+ }
+ send := func(msg *protobufs.ServerToAgent) {
+ if !isAgentConnected.Load() {
+ require.Fail(t, "Agent connection has not been established")
+ }
+
+ agentConn.Load().(types.Connection).Send(context.Background(), msg)
+ }
+ t.Cleanup(func() {
+ waitForSupervisorConnection(connectedChan, false)
+ shutdown()
+ })
+ return &testingOpAMPServer{
+ addr: httpSrv.Listener.Addr().String(),
+ supervisorConnected: connectedChan,
+ sendToSupervisor: send,
+ }
+}
+
+func newSupervisor(t *testing.T, configType string, extraConfigData map[string]string) *supervisor.Supervisor {
+ cfgFile := getSupervisorConfig(t, configType, extraConfigData)
+ s, err := supervisor.NewSupervisor(zap.NewNop(), cfgFile.Name())
+ require.NoError(t, err)
+
+ return s
+}
+
+func getSupervisorConfig(t *testing.T, configType string, extraConfigData map[string]string) *os.File {
+ tpl, err := os.ReadFile(path.Join("testdata", "supervisor", "supervisor_"+configType+".yaml"))
+ require.NoError(t, err)
+
+ templ, err := template.New("").Parse(string(tpl))
+ require.NoError(t, err)
+
+ var buf bytes.Buffer
+ var extension string
+ if runtime.GOOS == "windows" {
+ extension = ".exe"
+ }
+ configData := map[string]string{
+ "goos": runtime.GOOS,
+ "goarch": runtime.GOARCH,
+ "extension": extension,
+ }
+
+ for key, val := range extraConfigData {
+ configData[key] = val
+ }
+ err = templ.Execute(&buf, configData)
+ require.NoError(t, err)
+ cfgFile, _ := os.CreateTemp(t.TempDir(), "config_*.yaml")
+ _, err = cfgFile.Write(buf.Bytes())
+ require.NoError(t, err)
+
+ return cfgFile
+}
+
+func TestSupervisorStartsCollectorWithRemoteConfig(t *testing.T) {
+ var agentConfig atomic.Value
+ server := newOpAMPServer(
+ t,
+ defaultConnectingHandler,
+ server.ConnectionCallbacksStruct{
+ OnMessageFunc: func(_ context.Context, _ types.Connection, message *protobufs.AgentToServer) *protobufs.ServerToAgent {
+ if message.EffectiveConfig != nil {
+ config := message.EffectiveConfig.ConfigMap.ConfigMap[""]
+ if config != nil {
+ agentConfig.Store(string(config.Body))
+ }
+ }
+
+ return &protobufs.ServerToAgent{}
+ },
+ })
+
+ s := newSupervisor(t, "basic", map[string]string{"url": server.addr})
+ defer s.Shutdown()
+
+ waitForSupervisorConnection(server.supervisorConnected, true)
+
+ cfg, hash, inputFile, outputFile := createSimplePipelineCollectorConf(t)
+
+ server.sendToSupervisor(&protobufs.ServerToAgent{
+ RemoteConfig: &protobufs.AgentRemoteConfig{
+ Config: &protobufs.AgentConfigMap{
+ ConfigMap: map[string]*protobufs.AgentConfigFile{
+ "": {Body: cfg.Bytes()},
+ },
+ },
+ ConfigHash: hash,
+ },
+ })
+
+ require.Eventually(t, func() bool {
+ cfg, ok := agentConfig.Load().(string)
+ if ok {
+ // The effective config may be structurally different compared to what was sent,
+ // so just check that it includes some strings we know to be unique to the remote config.
+ return strings.Contains(cfg, inputFile.Name()) && strings.Contains(cfg, outputFile.Name())
+ }
+
+ return false
+ }, 5*time.Second, 500*time.Millisecond, "Collector was not started with remote config")
+
+ n, err := inputFile.WriteString("{\"body\":\"hello, world\"}\n")
+ require.NotZero(t, n, "Could not write to input file")
+ require.NoError(t, err)
+
+ require.Eventually(t, func() bool {
+ logRecord := make([]byte, 1024)
+ n, _ := outputFile.Read(logRecord)
+
+ return n != 0
+ }, 10*time.Second, 500*time.Millisecond, "Log never appeared in output")
+}
+
+func TestSupervisorRestartsCollectorAfterBadConfig(t *testing.T) {
+ var healthReport atomic.Value
+ var agentConfig atomic.Value
+ server := newOpAMPServer(
+ t,
+ defaultConnectingHandler,
+ server.ConnectionCallbacksStruct{
+ OnMessageFunc: func(_ context.Context, _ types.Connection, message *protobufs.AgentToServer) *protobufs.ServerToAgent {
+ if message.Health != nil {
+ healthReport.Store(message.Health)
+ }
+ if message.EffectiveConfig != nil {
+ config := message.EffectiveConfig.ConfigMap.ConfigMap[""]
+ if config != nil {
+ agentConfig.Store(string(config.Body))
+ }
+ }
+
+ return &protobufs.ServerToAgent{}
+ },
+ })
+
+ s := newSupervisor(t, "basic", map[string]string{"url": server.addr})
+ defer s.Shutdown()
+
+ waitForSupervisorConnection(server.supervisorConnected, true)
+
+ cfg, hash := createBadCollectorConf(t)
+
+ server.sendToSupervisor(&protobufs.ServerToAgent{
+ RemoteConfig: &protobufs.AgentRemoteConfig{
+ Config: &protobufs.AgentConfigMap{
+ ConfigMap: map[string]*protobufs.AgentConfigFile{
+ "": {Body: cfg.Bytes()},
+ },
+ },
+ ConfigHash: hash,
+ },
+ })
+
+ require.Eventually(t, func() bool {
+ cfg, ok := agentConfig.Load().(string)
+ if ok {
+ // The effective config may be structurally different compared to what was sent,
+ // so just check that it includes some strings we know to be unique to the remote config.
+ return strings.Contains(cfg, "doesntexist")
+ }
+
+ return false
+ }, 5*time.Second, 500*time.Millisecond, "Collector was not started with remote config")
+
+ require.Eventually(t, func() bool {
+ health := healthReport.Load().(*protobufs.ComponentHealth)
+
+ if health != nil {
+ return !health.Healthy && health.LastError != ""
+ }
+
+ return false
+ }, 5*time.Second, 250*time.Millisecond, "Supervisor never reported that the Collector was unhealthy")
+
+ cfg, hash, _, _ = createSimplePipelineCollectorConf(t)
+
+ server.sendToSupervisor(&protobufs.ServerToAgent{
+ RemoteConfig: &protobufs.AgentRemoteConfig{
+ Config: &protobufs.AgentConfigMap{
+ ConfigMap: map[string]*protobufs.AgentConfigFile{
+ "": {Body: cfg.Bytes()},
+ },
+ },
+ ConfigHash: hash,
+ },
+ })
+
+ require.Eventually(t, func() bool {
+ health := healthReport.Load().(*protobufs.ComponentHealth)
+
+ if health != nil {
+ return health.Healthy && health.LastError == ""
+ }
+
+ return false
+ }, 5*time.Second, 250*time.Millisecond, "Supervisor never reported that the Collector became healthy")
+}
+
+func TestSupervisorConfiguresCapabilities(t *testing.T) {
+ var capabilities atomic.Uint64
+ server := newOpAMPServer(
+ t,
+ defaultConnectingHandler,
+ server.ConnectionCallbacksStruct{
+ OnMessageFunc: func(_ context.Context, _ types.Connection, message *protobufs.AgentToServer) *protobufs.ServerToAgent {
+ capabilities.Store(message.Capabilities)
+
+ return &protobufs.ServerToAgent{}
+ },
+ })
+
+ s := newSupervisor(t, "nocap", map[string]string{"url": server.addr})
+ defer s.Shutdown()
+
+ waitForSupervisorConnection(server.supervisorConnected, true)
+
+ require.Eventually(t, func() bool {
+ cap := capabilities.Load()
+
+ return cap == uint64(protobufs.AgentCapabilities_AgentCapabilities_ReportsStatus)
+ }, 5*time.Second, 250*time.Millisecond)
+}
+
+func TestSupervisorBootstrapsCollector(t *testing.T) {
+ agentDescription := atomic.Value{}
+
+ // Load the Supervisor config so we can get the location of
+ // the Collector that will be run.
+ var cfg config.Supervisor
+ cfgFile := getSupervisorConfig(t, "nocap", map[string]string{})
+ k := koanf.New("::")
+ err := k.Load(file.Provider(cfgFile.Name()), yaml.Parser())
+ require.NoError(t, err)
+ err = k.UnmarshalWithConf("", &cfg, koanf.UnmarshalConf{
+ Tag: "mapstructure",
+ })
+ require.NoError(t, err)
+
+ // Get the binary name and version from the Collector binary
+ // using the `components` command that prints a YAML-encoded
+ // map of information about the Collector build. Some of this
+ // information will be used as defaults for the telemetry
+ // attributes.
+ agentPath := cfg.Agent.Executable
+ componentsInfo, err := exec.Command(agentPath, "components").Output()
+ require.NoError(t, err)
+ k = koanf.New("::")
+ err = k.Load(rawbytes.Provider(componentsInfo), yaml.Parser())
+ require.NoError(t, err)
+ buildinfo := k.StringMap("buildinfo")
+ command := buildinfo["command"]
+ version := buildinfo["version"]
+
+ server := newOpAMPServer(
+ t,
+ defaultConnectingHandler,
+ server.ConnectionCallbacksStruct{
+ OnMessageFunc: func(_ context.Context, _ types.Connection, message *protobufs.AgentToServer) *protobufs.ServerToAgent {
+ if message.AgentDescription != nil {
+ agentDescription.Store(message.AgentDescription)
+ }
+
+ return &protobufs.ServerToAgent{}
+ },
+ })
+
+ s := newSupervisor(t, "nocap", map[string]string{"url": server.addr})
+ defer s.Shutdown()
+
+ waitForSupervisorConnection(server.supervisorConnected, true)
+
+ require.Eventually(t, func() bool {
+ ad, ok := agentDescription.Load().(*protobufs.AgentDescription)
+ if !ok {
+ return false
+ }
+
+ var agentName, agentVersion string
+ identAttr := ad.IdentifyingAttributes
+ for _, attr := range identAttr {
+ switch attr.Key {
+ case semconv.AttributeServiceName:
+ agentName = attr.Value.GetStringValue()
+ case semconv.AttributeServiceVersion:
+ agentVersion = attr.Value.GetStringValue()
+ }
+ }
+
+ // By default the Collector should report its name and version
+ // from the component.BuildInfo struct built into the Collector
+ // binary.
+ return agentName == command && agentVersion == version
+ }, 5*time.Second, 250*time.Millisecond)
+}
+
+// Creates a Collector config that reads and writes logs to files and provides
+// file descriptors for I/O operations to those files. The files are placed
+// in a unique temp directory that is cleaned up after the test's completion.
+func createSimplePipelineCollectorConf(t *testing.T) (*bytes.Buffer, []byte, *os.File, *os.File) {
+ wd, err := os.Getwd()
+ require.NoError(t, err)
+
+ // Create input and output files so we can "communicate" with a Collector binary.
+ // The testing package will automatically clean these up after each test.
+ tempDir := t.TempDir()
+ inputFile, err := os.CreateTemp(tempDir, "input_*.yaml")
+ require.NoError(t, err)
+
+ outputFile, err := os.CreateTemp(tempDir, "output_*.yaml")
+ require.NoError(t, err)
+
+ colCfgTpl, err := os.ReadFile(path.Join(wd, "testdata", "collector", "simple_pipeline.yaml"))
+ require.NoError(t, err)
+
+ templ, err := template.New("").Parse(string(colCfgTpl))
+ require.NoError(t, err)
+
+ var confmapBuf bytes.Buffer
+ err = templ.Execute(
+ &confmapBuf,
+ map[string]string{
+ "inputLogFile": inputFile.Name(),
+ "outputLogFile": outputFile.Name(),
+ },
+ )
+ require.NoError(t, err)
+
+ h := sha256.New()
+ if _, err := io.Copy(h, bytes.NewBuffer(confmapBuf.Bytes())); err != nil {
+ log.Fatal(err)
+ }
+
+ return &confmapBuf, h.Sum(nil), inputFile, outputFile
+}
+
+func createBadCollectorConf(t *testing.T) (*bytes.Buffer, []byte) {
+ colCfg, err := os.ReadFile(path.Join("testdata", "collector", "bad_config.yaml"))
+ require.NoError(t, err)
+
+ h := sha256.New()
+ if _, err := io.Copy(h, bytes.NewBuffer(colCfg)); err != nil {
+ log.Fatal(err)
+ }
+
+ return bytes.NewBuffer(colCfg), h.Sum(nil)
+}
+
+// Wait for the Supervisor to connect to or disconnect from the OpAMP server
+func waitForSupervisorConnection(connection chan bool, connected bool) {
+ select {
+ case <-time.After(5 * time.Second):
+ break
+ case state := <-connection:
+ if state == connected {
+ break
+ }
+ }
+}
+
+func TestSupervisorOpAMPConnectionSettings(t *testing.T) {
+ var connectedToNewServer atomic.Bool
+ initialServer := newOpAMPServer(
+ t,
+ defaultConnectingHandler,
+ server.ConnectionCallbacksStruct{})
+
+ s := newSupervisor(t, "accepts_conn", map[string]string{"url": initialServer.addr})
+ defer s.Shutdown()
+
+ waitForSupervisorConnection(initialServer.supervisorConnected, true)
+
+ newServer := newOpAMPServer(
+ t,
+ defaultConnectingHandler,
+ server.ConnectionCallbacksStruct{
+ OnConnectedFunc: func(_ context.Context, _ types.Connection) {
+ connectedToNewServer.Store(true)
+ },
+ OnMessageFunc: func(_ context.Context, _ types.Connection, message *protobufs.AgentToServer) *protobufs.ServerToAgent {
+ return &protobufs.ServerToAgent{}
+ },
+ })
+
+ initialServer.sendToSupervisor(&protobufs.ServerToAgent{
+ ConnectionSettings: &protobufs.ConnectionSettingsOffers{
+ Opamp: &protobufs.OpAMPConnectionSettings{
+ DestinationEndpoint: "ws://" + newServer.addr + "/v1/opamp",
+ Headers: &protobufs.Headers{
+ Headers: []*protobufs.Header{
+ {
+ Key: "x-foo",
+ Value: "bar",
+ },
+ },
+ },
+ },
+ },
+ })
+
+ require.Eventually(t, func() bool {
+ return connectedToNewServer.Load() == true
+ }, 10*time.Second, 500*time.Millisecond, "Collector did not connect to new OpAMP server")
+}
diff --git a/cmd/opampsupervisor/testdata/supervisor_darwin.yaml b/cmd/opampsupervisor/examples/supervisor_darwin.yaml
similarity index 85%
rename from cmd/opampsupervisor/testdata/supervisor_darwin.yaml
rename to cmd/opampsupervisor/examples/supervisor_darwin.yaml
index 379792377882..80d5b8bb5755 100644
--- a/cmd/opampsupervisor/testdata/supervisor_darwin.yaml
+++ b/cmd/opampsupervisor/examples/supervisor_darwin.yaml
@@ -4,7 +4,7 @@ server:
# Disable verification to test locally.
# Don't do this in production.
insecure_skip_verify: true
- # For more TLS settings see config/configtls.TLSClientSetting
+ # For more TLS settings see config/configtls.ClientConfig
capabilities:
reports_effective_config: true
diff --git a/cmd/opampsupervisor/testdata/supervisor_linux.yaml b/cmd/opampsupervisor/examples/supervisor_linux.yaml
similarity index 85%
rename from cmd/opampsupervisor/testdata/supervisor_linux.yaml
rename to cmd/opampsupervisor/examples/supervisor_linux.yaml
index 0c2cf5ce8430..00021ece6b40 100644
--- a/cmd/opampsupervisor/testdata/supervisor_linux.yaml
+++ b/cmd/opampsupervisor/examples/supervisor_linux.yaml
@@ -4,7 +4,7 @@ server:
# Disable verification to test locally.
# Don't do this in production.
insecure_skip_verify: true
- # For more TLS settings see config/configtls.TLSClientSetting
+ # For more TLS settings see config/configtls.ClientConfig
capabilities:
reports_effective_config: true
diff --git a/cmd/opampsupervisor/testdata/supervisor_windows.yaml b/cmd/opampsupervisor/examples/supervisor_windows.yaml
similarity index 85%
rename from cmd/opampsupervisor/testdata/supervisor_windows.yaml
rename to cmd/opampsupervisor/examples/supervisor_windows.yaml
index 35c20b62ca21..13d0a911d78d 100644
--- a/cmd/opampsupervisor/testdata/supervisor_windows.yaml
+++ b/cmd/opampsupervisor/examples/supervisor_windows.yaml
@@ -4,7 +4,7 @@ server:
# Disable verification to test locally.
# Don't do this in production.
insecure_skip_verify: true
- # For more TLS settings see config/configtls.TLSClientSetting
+ # For more TLS settings see config/configtls.ClientConfig
capabilities:
reports_effective_config: true
diff --git a/cmd/opampsupervisor/go.mod b/cmd/opampsupervisor/go.mod
index b2124e6fab6f..064126743785 100644
--- a/cmd/opampsupervisor/go.mod
+++ b/cmd/opampsupervisor/go.mod
@@ -1,32 +1,36 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/opampsupervisor
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.0
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/knadh/koanf/parsers/yaml v0.1.0
github.com/knadh/koanf/providers/file v0.1.0
github.com/knadh/koanf/providers/rawbytes v0.1.0
- github.com/knadh/koanf/v2 v2.0.1
+ github.com/knadh/koanf/v2 v2.1.1
github.com/oklog/ulid/v2 v2.1.0
- github.com/open-telemetry/opamp-go v0.8.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opamp-go v0.14.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/gorilla/websocket v1.5.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/google/go-cmp v0.6.0 // indirect
+ github.com/gorilla/websocket v1.5.1 // indirect
github.com/knadh/koanf/maps v0.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/stretchr/testify v1.8.4 // indirect
- go.opentelemetry.io/collector/config/configopaque v0.89.0 // indirect
- go.uber.org/multierr v1.10.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/cmd/opampsupervisor/go.sum b/cmd/opampsupervisor/go.sum
index 6e739d2c16a8..7db6846856f3 100644
--- a/cmd/opampsupervisor/go.sum
+++ b/cmd/opampsupervisor/go.sum
@@ -1,59 +1,68 @@
-github.com/cenkalti/backoff/v4 v4.2.0 h1:HN5dHm3WBOgndBH6E8V0q2jIYIR3s9yglV8k/+MN3u4=
-github.com/cenkalti/backoff/v4 v4.2.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-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/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+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/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
-github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
-github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+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/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
+github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
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/parsers/yaml v0.1.0 h1:ZZ8/iGfRLvKSaMEECEBPM1HQslrZADk8fP1XFUxVI5w=
github.com/knadh/koanf/parsers/yaml v0.1.0/go.mod h1:cvbUDC7AL23pImuQP0oRw/hPuccrNBS2bps8asS0CwY=
+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/providers/file v0.1.0 h1:fs6U7nrV58d3CFAFh8VTde8TM262ObYf3ODrc//Lp+c=
github.com/knadh/koanf/providers/file v0.1.0/go.mod h1:rjJ/nHQl64iYCtAW2QQnF0eSmDEX/YZ/eNFj5yR6BvA=
github.com/knadh/koanf/providers/rawbytes v0.1.0 h1:dpzgu2KO6uf6oCb4aP05KDmKmAmI51k5pe8RYKQ0qME=
github.com/knadh/koanf/providers/rawbytes v0.1.0/go.mod h1:mMTB1/IcJ/yE++A2iEZbY1MLygX7vttU+C+S/YmPu9c=
-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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
-github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU=
github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
-github.com/open-telemetry/opamp-go v0.8.0 h1:ub2j96T3GzxCD5R+VDtN6iPUv4k2jgdyISi1d1BZ89I=
-github.com/open-telemetry/opamp-go v0.8.0/go.mod h1:IMdeuHGVc5CjKSu5/oNV0o+UmiXuahoHvoZ4GOmAI9M=
+github.com/open-telemetry/opamp-go v0.14.0 h1:KoziIK+wsFojhUXNTkCSTnCPf0eCMqFAaccOs0HrWIY=
+github.com/open-telemetry/opamp-go v0.14.0/go.mod h1:XOGCigljsLSTZ8FfLwvat0M1QDj3conIIgRa77BWrKs=
github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
-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/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/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-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/configtls v0.89.0 h1:XDeUaTU7LYwnEXz/CSdjbCStJa7n0YR1q0QpK0Vtw9w=
-go.opentelemetry.io/collector/config/configtls v0.89.0/go.mod h1:NlE4elqXoyFfzQvYfzgH6uOU1zNVa+5tt6EIq52TJ9Y=
-go.uber.org/goleak v1.2.0 h1:xqgm/S+aQvhWFTtR0XK3Jvg7z8kGV8P4X14IzwN3Eqk=
-go.uber.org/multierr v1.10.0 h1:S0h4aNzvfcFsC3dRF1jLoaov7oRaKqRGC/pUEJ2yvPQ=
-go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
-golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/cmd/opampsupervisor/specification/README.md b/cmd/opampsupervisor/specification/README.md
index 5ca8f9f62889..0fef754e446a 100644
--- a/cmd/opampsupervisor/specification/README.md
+++ b/cmd/opampsupervisor/specification/README.md
@@ -84,33 +84,33 @@ server:
# If enabled the Supervisor will also report RemoteConfig status
# to the Server.
capabilities:
- AcceptsRemoteConfig: # false if unspecified
+ accepts_remote_config: # false if unspecified
# The Supervisor will report EffectiveConfig to the Server.
- ReportsEffectiveConfig: # true if unspecified
+ reports_effective_config: # true if unspecified
# The Supervisor can accept Collector executable package updates.
# If enabled the Supervisor will also report package status to the
# Server.
- AcceptsPackages: # false if unspecified
+ accepts_packages: # false if unspecified
# The Collector will report own metrics to the destination specified by
# the Server.
- ReportsOwnMetrics: # true if unspecified
+ reports_own_metrics: # true if unspecified
# The Collector will report own logs to the destination specified by
# the Server.
- ReportsOwnLogs: # true if unspecified
+ reports_own_logs: # true if unspecified
# The Collector will accept connections settings for exporters
# from the Server.
- AcceptsOtherConnectionSettings: # false if unspecified
+ accepts_other_connection_settings: # false if unspecified
# The Supervisor will accept restart requests.
- AcceptsRestartCommand: # true if unspecified
+ accepts_restart_command: # true if unspecified
# The Collector will report Health.
- ReportsHealth: # true if unspecified
+ reports_health: # true if unspecified
storage:
# A writable directory where the Supervisor can store data
@@ -220,8 +220,8 @@ configuration.
To overcome this problem the Supervisor starts the Collector with an
"noop" configuration that collects nothing but allows the opamp
extension to be started. The "noop" configuration is a single pipeline
-with a filelog receiver that points to a non-existing file and a logging
-exporter and the opamp extension. The purpose of the "noop"
+with an OTLP receiver that listens on a random port and a debug
+exporter, and the opamp extension. The purpose of the "noop"
configuration is to make sure the Collector starts and the opamp
extension communicates with the Supervisor.
@@ -411,7 +411,7 @@ extensions:
opamp:
# OpAMP server URL. Supports WS or plain http transport,
# based on the scheme of the URL (ws,wss,http,https).
- # Any other settings defined in HTTPClientSettings, squashed. This
+ # Any other settings defined in ClientConfig, squashed. This
# includes ability to specify an "auth" setting that refers
# to an extension that implements the Authentication interface.
endpoint:
diff --git a/cmd/opampsupervisor/supervisor/commander/commander.go b/cmd/opampsupervisor/supervisor/commander/commander.go
index 23ef147343b6..90901e0e7103 100644
--- a/cmd/opampsupervisor/supervisor/commander/commander.go
+++ b/cmd/opampsupervisor/supervisor/commander/commander.go
@@ -138,7 +138,8 @@ func (c *Commander) Stop(ctx context.Context) error {
return nil
}
- c.logger.Debug("Stopping agent process", zap.Int("pid", c.cmd.Process.Pid))
+ pid := c.cmd.Process.Pid
+ c.logger.Debug("Stopping agent process", zap.Int("pid", pid))
// Gracefully signal process to stop.
if err := c.cmd.Process.Signal(syscall.SIGTERM); err != nil {
@@ -154,14 +155,14 @@ func (c *Commander) Stop(ctx context.Context) error {
<-waitCtx.Done()
if !errors.Is(waitCtx.Err(), context.DeadlineExceeded) {
- c.logger.Debug("Agent process successfully stopped.", zap.Int("pid", c.cmd.Process.Pid))
+ c.logger.Debug("Agent process successfully stopped.", zap.Int("pid", pid))
return
}
// Time is out. Kill the process.
c.logger.Debug(
- "Agent process is not responding to SIGTERM. Sending SIGKILL to kill forcedly.",
- zap.Int("pid", c.cmd.Process.Pid))
+ "Agent process is not responding to SIGTERM. Sending SIGKILL to kill forcibly.",
+ zap.Int("pid", pid))
if innerErr = c.cmd.Process.Signal(syscall.SIGKILL); innerErr != nil {
return
}
diff --git a/cmd/opampsupervisor/supervisor/config/config.go b/cmd/opampsupervisor/supervisor/config/config.go
index ccbd523d4e6f..1948b42a0701 100644
--- a/cmd/opampsupervisor/supervisor/config/config.go
+++ b/cmd/opampsupervisor/supervisor/config/config.go
@@ -4,6 +4,8 @@
package config
import (
+ "net/http"
+
"go.opentelemetry.io/collector/config/configtls"
)
@@ -16,16 +18,18 @@ type Supervisor struct {
// Capabilities is the set of capabilities that the Supervisor supports.
type Capabilities struct {
- AcceptsRemoteConfig *bool `mapstructure:"accepts_remote_config"`
- ReportsEffectiveConfig *bool `mapstructure:"reports_effective_config"`
- ReportsOwnMetrics *bool `mapstructure:"reports_own_metrics"`
- ReportsHealth *bool `mapstructure:"reports_health"`
- ReportsRemoteConfig *bool `mapstructure:"reports_remote_config"`
+ AcceptsRemoteConfig *bool `mapstructure:"accepts_remote_config"`
+ AcceptsOpAMPConnectionSettings *bool `mapstructure:"accepts_opamp_connection_settings"`
+ ReportsEffectiveConfig *bool `mapstructure:"reports_effective_config"`
+ ReportsOwnMetrics *bool `mapstructure:"reports_own_metrics"`
+ ReportsHealth *bool `mapstructure:"reports_health"`
+ ReportsRemoteConfig *bool `mapstructure:"reports_remote_config"`
}
type OpAMPServer struct {
Endpoint string
- TLSSetting configtls.TLSClientSetting `mapstructure:"tls,omitempty"`
+ Headers http.Header
+ TLSSetting configtls.ClientConfig `mapstructure:"tls,omitempty"`
}
type Agent struct {
diff --git a/cmd/opampsupervisor/supervisor/logger.go b/cmd/opampsupervisor/supervisor/logger.go
new file mode 100644
index 000000000000..11811d539372
--- /dev/null
+++ b/cmd/opampsupervisor/supervisor/logger.go
@@ -0,0 +1,33 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package supervisor
+
+import (
+ "context"
+
+ "github.com/open-telemetry/opamp-go/client/types"
+ "go.uber.org/zap"
+)
+
+var _ types.Logger = &opAMPLogger{}
+
+type opAMPLogger struct {
+ l *zap.SugaredLogger
+}
+
+// Debugf implements types.Logger.
+func (o *opAMPLogger) Debugf(_ context.Context, format string, v ...any) {
+ o.l.Debugf(format, v...)
+}
+
+// Errorf implements types.Logger.
+func (o *opAMPLogger) Errorf(_ context.Context, format string, v ...any) {
+ o.l.Errorf(format, v...)
+}
+
+func newLoggerFromZap(l *zap.Logger) types.Logger {
+ return &opAMPLogger{
+ l: l.Sugar(),
+ }
+}
diff --git a/cmd/opampsupervisor/supervisor/package_test.go b/cmd/opampsupervisor/supervisor/package_test.go
new file mode 100644
index 000000000000..c2046befd419
--- /dev/null
+++ b/cmd/opampsupervisor/supervisor/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package supervisor
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/cmd/opampsupervisor/supervisor/server.go b/cmd/opampsupervisor/supervisor/server.go
new file mode 100644
index 000000000000..6e4c00697097
--- /dev/null
+++ b/cmd/opampsupervisor/supervisor/server.go
@@ -0,0 +1,46 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package supervisor
+
+import (
+ "context"
+ "net/http"
+
+ "github.com/open-telemetry/opamp-go/protobufs"
+ "github.com/open-telemetry/opamp-go/server"
+ serverTypes "github.com/open-telemetry/opamp-go/server/types"
+)
+
+type flattenedSettings struct {
+ onMessageFunc func(conn serverTypes.Connection, message *protobufs.AgentToServer)
+ onConnectingFunc func(request *http.Request)
+ endpoint string
+}
+
+func newServerSettings(fs flattenedSettings) server.StartSettings {
+ return server.StartSettings{
+ Settings: server.Settings{
+ Callbacks: server.CallbacksStruct{
+ OnConnectingFunc: func(request *http.Request) serverTypes.ConnectionResponse {
+ if fs.onConnectingFunc != nil {
+ fs.onConnectingFunc(request)
+ }
+ return serverTypes.ConnectionResponse{
+ Accept: true,
+ ConnectionCallbacks: server.ConnectionCallbacksStruct{
+ OnMessageFunc: func(_ context.Context, conn serverTypes.Connection, message *protobufs.AgentToServer) *protobufs.ServerToAgent {
+ if fs.onMessageFunc != nil {
+ fs.onMessageFunc(conn, message)
+ }
+
+ return &protobufs.ServerToAgent{}
+ },
+ },
+ }
+ },
+ },
+ },
+ ListenEndpoint: fs.endpoint,
+ }
+}
diff --git a/cmd/opampsupervisor/supervisor/supervisor.go b/cmd/opampsupervisor/supervisor/supervisor.go
index 626f61ac3de1..2c4d132fc88f 100644
--- a/cmd/opampsupervisor/supervisor/supervisor.go
+++ b/cmd/opampsupervisor/supervisor/supervisor.go
@@ -4,15 +4,19 @@
package supervisor
import (
+ "bytes"
"context"
+ _ "embed"
"errors"
"fmt"
"math/rand"
"net"
+ "net/http"
"os"
- "runtime"
"sort"
+ "sync"
"sync/atomic"
+ "text/template"
"time"
"github.com/cenkalti/backoff/v4"
@@ -24,6 +28,11 @@ import (
"github.com/open-telemetry/opamp-go/client"
"github.com/open-telemetry/opamp-go/client/types"
"github.com/open-telemetry/opamp-go/protobufs"
+ "github.com/open-telemetry/opamp-go/server"
+ serverTypes "github.com/open-telemetry/opamp-go/server/types"
+ "go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configtls"
+ semconv "go.opentelemetry.io/collector/semconv/v1.21.0"
"go.uber.org/zap"
"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/opampsupervisor/supervisor/commander"
@@ -31,8 +40,16 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/opampsupervisor/supervisor/healthchecker"
)
-// This Supervisor is developed specifically for the OpenTelemetry Collector.
-const agentType = "io.opentelemetry.collector"
+var (
+ //go:embed templates/bootstrap.yaml
+ bootstrapConfTpl string
+
+ //go:embed templates/extraconfig.yaml
+ extraConfigTpl string
+
+ //go:embed templates/owntelemetry.yaml
+ ownTelemetryTpl string
+)
// Supervisor implements supervising of OpenTelemetry Collector and uses OpAMPClient
// to work with an OpAMP Server.
@@ -51,11 +68,14 @@ type Supervisor struct {
// Supervisor's own config.
config config.Supervisor
+ agentDescription *protobufs.AgentDescription
+
// Agent's instance id.
instanceID ulid.ULID
- // The version of the agent.
- agentVersion string
+ bootstrapTemplate *template.Template
+ extraConfigTemplate *template.Template
+ ownTelemetryTemplate *template.Template
// A config section to be added to the Collector's config to fetch its own metrics.
// TODO: store this persistently so that when starting we can compose the effective
@@ -83,9 +103,12 @@ type Supervisor struct {
opampClient client.OpAMPClient
shuttingDown bool
+ supervisorWG sync.WaitGroup
agentHasStarted bool
agentStartHealthCheckAttempts int
+
+ connectedToOpAMPServer chan struct{}
}
func NewSupervisor(logger *zap.Logger, configFile string) (*Supervisor, error) {
@@ -95,34 +118,38 @@ func NewSupervisor(logger *zap.Logger, configFile string) (*Supervisor, error) {
effectiveConfigFilePath: "effective.yaml",
agentConfigOwnMetricsSection: &atomic.Value{},
effectiveConfig: &atomic.Value{},
+ connectedToOpAMPServer: make(chan struct{}),
+ }
+
+ if err := s.createTemplates(); err != nil {
+ return nil, err
}
if err := s.loadConfig(configFile); err != nil {
return nil, fmt.Errorf("error loading config: %w", err)
}
- if err := s.getBootstrapInfo(); err != nil {
- s.logger.Error("Couldn't get agent version", zap.Error(err))
+ id, err := s.createInstanceID()
+ if err != nil {
+ return nil, err
}
- port, err := s.findRandomPort()
+ s.instanceID = id
- if err != nil {
- return nil, fmt.Errorf("could not find port for health check: %w", err)
+ if err = s.getBootstrapInfo(); err != nil {
+ return nil, fmt.Errorf("could not get bootstrap info from the Collector: %w", err)
}
- s.agentHealthCheckEndpoint = fmt.Sprintf("localhost:%d", port)
-
- id, err := s.createInstanceID()
+ port, err := s.findRandomPort()
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("could not find port for health check: %w", err)
}
- s.instanceID = id
+ s.agentHealthCheckEndpoint = fmt.Sprintf("localhost:%d", port)
logger.Debug("Supervisor starting",
- zap.String("id", s.instanceID.String()), zap.String("type", agentType), zap.String("version", s.agentVersion))
+ zap.String("id", s.instanceID.String()))
s.loadAgentEffectiveConfig()
@@ -130,6 +157,10 @@ func NewSupervisor(logger *zap.Logger, configFile string) (*Supervisor, error) {
return nil, fmt.Errorf("cannot start OpAMP client: %w", err)
}
+ if connErr := s.waitForOpAMPConnection(); connErr != nil {
+ return nil, fmt.Errorf("failed to connect to the OpAMP server: %w", err)
+ }
+
s.commander, err = commander.NewCommander(
s.logger,
s.config.Agent,
@@ -140,11 +171,32 @@ func NewSupervisor(logger *zap.Logger, configFile string) (*Supervisor, error) {
}
s.startHealthCheckTicker()
- go s.runAgentProcess()
+
+ s.supervisorWG.Add(1)
+ go func() {
+ defer s.supervisorWG.Done()
+ s.runAgentProcess()
+ }()
return s, nil
}
+func (s *Supervisor) createTemplates() error {
+ var err error
+
+ if s.bootstrapTemplate, err = template.New("bootstrap").Parse(bootstrapConfTpl); err != nil {
+ return err
+ }
+ if s.extraConfigTemplate, err = template.New("extraconfig").Parse(extraConfigTpl); err != nil {
+ return err
+ }
+ if s.ownTelemetryTemplate, err = template.New("owntelemetry").Parse(ownTelemetryTpl); err != nil {
+ return err
+ }
+
+ return nil
+}
+
func (s *Supervisor) loadConfig(configFile string) error {
if configFile == "" {
return errors.New("path to config file cannot be empty")
@@ -166,10 +218,109 @@ func (s *Supervisor) loadConfig(configFile string) error {
return nil
}
-// TODO: Implement bootstrapping https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/21071
-// nolint: unparam
func (s *Supervisor) getBootstrapInfo() (err error) {
- s.agentVersion = "1.0.0"
+ port, err := s.findRandomPort()
+ if err != nil {
+ return err
+ }
+
+ supervisorPort, err := s.findRandomPort()
+ if err != nil {
+ return err
+ }
+
+ var cfg bytes.Buffer
+
+ err = s.bootstrapTemplate.Execute(&cfg, map[string]any{
+ "EndpointPort": port,
+ "InstanceUid": s.instanceID.String(),
+ "SupervisorPort": supervisorPort,
+ })
+ if err != nil {
+ return err
+ }
+
+ s.writeEffectiveConfigToFile(cfg.String(), s.effectiveConfigFilePath)
+
+ srv := server.New(newLoggerFromZap(s.logger))
+
+ done := make(chan error, 1)
+ var connected atomic.Bool
+
+ err = srv.Start(newServerSettings(flattenedSettings{
+ endpoint: fmt.Sprintf("localhost:%d", supervisorPort),
+ onConnectingFunc: func(_ *http.Request) {
+ connected.Store(true)
+
+ },
+ onMessageFunc: func(_ serverTypes.Connection, message *protobufs.AgentToServer) {
+ if message.AgentDescription != nil {
+ instanceIDSeen := false
+ s.agentDescription = message.AgentDescription
+ identAttr := s.agentDescription.IdentifyingAttributes
+
+ for _, attr := range identAttr {
+ if attr.Key == semconv.AttributeServiceInstanceID {
+ // TODO: Consider whether to attempt restarting the Collector.
+ // https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/29864
+ if attr.Value.GetStringValue() != s.instanceID.String() {
+ done <- fmt.Errorf(
+ "the Collector's instance ID (%s) does not match with the instance ID set by the Supervisor (%s)",
+ attr.Value.GetStringValue(),
+ s.instanceID.String())
+ return
+ }
+ instanceIDSeen = true
+ }
+ }
+
+ if !instanceIDSeen {
+ done <- errors.New("the Collector did not specify an instance ID in its AgentDescription message")
+ return
+ }
+
+ done <- nil
+ }
+ },
+ }))
+ if err != nil {
+ return err
+ }
+
+ cmd, err := commander.NewCommander(
+ s.logger,
+ s.config.Agent,
+ "--config", s.effectiveConfigFilePath,
+ )
+ if err != nil {
+ return err
+ }
+
+ if err = cmd.Start(context.Background()); err != nil {
+ return err
+ }
+
+ select {
+ // TODO make timeout configurable
+ case <-time.After(3 * time.Second):
+ if connected.Load() {
+ return errors.New("collector connected but never responded with an AgentDescription message")
+ } else {
+ return errors.New("collector's OpAMP client never connected to the Supervisor")
+ }
+ case err = <-done:
+ if err != nil {
+ return err
+ }
+ }
+
+ if err = cmd.Stop(context.Background()); err != nil {
+ return err
+ }
+
+ if err = srv.Stop(context.Background()); err != nil {
+ return err
+ }
return nil
}
@@ -199,43 +350,46 @@ func (s *Supervisor) Capabilities() protobufs.AgentCapabilities {
if c.ReportsRemoteConfig != nil && *c.ReportsRemoteConfig {
supportedCapabilities |= protobufs.AgentCapabilities_AgentCapabilities_ReportsRemoteConfig
}
+
+ if c.AcceptsOpAMPConnectionSettings != nil && *c.AcceptsOpAMPConnectionSettings {
+ supportedCapabilities |= protobufs.AgentCapabilities_AgentCapabilities_AcceptsOpAMPConnectionSettings
+ }
}
return supportedCapabilities
}
func (s *Supervisor) startOpAMP() error {
- s.opampClient = client.NewWebSocket(s.logger.Sugar())
+ s.opampClient = client.NewWebSocket(newLoggerFromZap(s.logger))
tlsConfig, err := s.config.Server.TLSSetting.LoadTLSConfig()
if err != nil {
return err
}
+ s.logger.Debug("Connecting to OpAMP server...", zap.String("endpoint", s.config.Server.Endpoint), zap.Any("headers", s.config.Server.Headers))
settings := types.StartSettings{
OpAMPServerURL: s.config.Server.Endpoint,
+ Header: s.config.Server.Headers,
TLSConfig: tlsConfig,
InstanceUid: s.instanceID.String(),
Callbacks: types.CallbacksStruct{
- OnConnectFunc: func() {
+ OnConnectFunc: func(_ context.Context) {
+ s.connectedToOpAMPServer <- struct{}{}
s.logger.Debug("Connected to the server.")
},
- OnConnectFailedFunc: func(err error) {
+ OnConnectFailedFunc: func(_ context.Context, err error) {
s.logger.Error("Failed to connect to the server", zap.Error(err))
},
- OnErrorFunc: func(err *protobufs.ServerErrorResponse) {
+ OnErrorFunc: func(_ context.Context, err *protobufs.ServerErrorResponse) {
s.logger.Error("Server returned an error response", zap.String("message", err.ErrorMessage))
},
OnMessageFunc: s.onMessage,
OnOpampConnectionSettingsFunc: func(ctx context.Context, settings *protobufs.OpAMPConnectionSettings) error {
- // TODO: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/21043
- s.logger.Debug("Received ConnectionSettings request")
+ //nolint:errcheck
+ go s.onOpampConnectionSettings(ctx, settings)
return nil
},
- OnOpampConnectionSettingsAcceptedFunc: func(settings *protobufs.OpAMPConnectionSettings) {
- // TODO: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/21043
- s.logger.Debug("ConnectionSettings accepted")
- },
- OnCommandFunc: func(command *protobufs.ServerToAgentCommand) error {
+ OnCommandFunc: func(_ context.Context, command *protobufs.ServerToAgentCommand) error {
cmdType := command.GetType()
if *cmdType.Enum() == protobufs.CommandType_CommandType_Restart {
// TODO: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/21077
@@ -243,21 +397,21 @@ func (s *Supervisor) startOpAMP() error {
}
return nil
},
- SaveRemoteConfigStatusFunc: func(ctx context.Context, status *protobufs.RemoteConfigStatus) {
+ SaveRemoteConfigStatusFunc: func(_ context.Context, _ *protobufs.RemoteConfigStatus) {
// TODO: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/21079
},
- GetEffectiveConfigFunc: func(ctx context.Context) (*protobufs.EffectiveConfig, error) {
+ GetEffectiveConfigFunc: func(_ context.Context) (*protobufs.EffectiveConfig, error) {
return s.createEffectiveConfigMsg(), nil
},
},
Capabilities: s.Capabilities(),
}
- err = s.opampClient.SetAgentDescription(s.createAgentDescription())
+ err = s.opampClient.SetAgentDescription(s.agentDescription)
if err != nil {
return err
}
- err = s.opampClient.SetHealth(&protobufs.AgentHealth{Healthy: false})
+ err = s.opampClient.SetHealth(&protobufs.ComponentHealth{Healthy: false})
if err != nil {
return err
}
@@ -274,6 +428,88 @@ func (s *Supervisor) startOpAMP() error {
return nil
}
+func (s *Supervisor) stopOpAMP() error {
+ s.logger.Debug("Stopping OpAMP client...")
+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+ defer cancel()
+ err := s.opampClient.Stop(ctx)
+ // TODO(srikanthccv): remove context.DeadlineExceeded after https://github.com/open-telemetry/opamp-go/pull/213
+ if err != nil && !errors.Is(err, context.DeadlineExceeded) {
+ return err
+ }
+ s.logger.Debug("OpAMP client stopped.")
+ return nil
+}
+
+func (s *Supervisor) getHeadersFromSettings(protoHeaders *protobufs.Headers) http.Header {
+ headers := make(http.Header)
+ for _, header := range protoHeaders.Headers {
+ headers.Add(header.Key, header.Value)
+ }
+ return headers
+}
+
+func (s *Supervisor) onOpampConnectionSettings(_ context.Context, settings *protobufs.OpAMPConnectionSettings) error {
+ if settings == nil {
+ s.logger.Debug("Received ConnectionSettings request with nil settings")
+ return nil
+ }
+
+ newServerConfig := &config.OpAMPServer{}
+
+ if settings.DestinationEndpoint != "" {
+ newServerConfig.Endpoint = settings.DestinationEndpoint
+ }
+ if settings.Headers != nil {
+ newServerConfig.Headers = s.getHeadersFromSettings(settings.Headers)
+ }
+ if settings.Certificate != nil {
+ if len(settings.Certificate.CaPublicKey) != 0 {
+ newServerConfig.TLSSetting.CAPem = configopaque.String(settings.Certificate.CaPublicKey)
+ }
+ if len(settings.Certificate.PublicKey) != 0 {
+ newServerConfig.TLSSetting.CertPem = configopaque.String(settings.Certificate.PublicKey)
+ }
+ if len(settings.Certificate.PrivateKey) != 0 {
+ newServerConfig.TLSSetting.KeyPem = configopaque.String(settings.Certificate.PrivateKey)
+ }
+ } else {
+ newServerConfig.TLSSetting = configtls.ClientConfig{Insecure: true}
+ }
+
+ if err := s.stopOpAMP(); err != nil {
+ s.logger.Error("Cannot stop the OpAMP client", zap.Error(err))
+ return err
+ }
+
+ // take a copy of the current OpAMP server config
+ oldServerConfig := s.config.Server
+ // update the OpAMP server config
+ s.config.Server = newServerConfig
+
+ if err := s.startOpAMP(); err != nil {
+ s.logger.Error("Cannot connect to the OpAMP server using the new settings", zap.Error(err))
+ // revert the OpAMP server config
+ s.config.Server = oldServerConfig
+ // start the OpAMP client with the old settings
+ if err := s.startOpAMP(); err != nil {
+ s.logger.Error("Cannot reconnect to the OpAMP server after restoring old settings", zap.Error(err))
+ return err
+ }
+ }
+ return s.waitForOpAMPConnection()
+}
+
+func (s *Supervisor) waitForOpAMPConnection() error {
+ // wait for the OpAMP client to connect to the server or timeout
+ select {
+ case <-s.connectedToOpAMPServer:
+ return nil
+ case <-time.After(10 * time.Second):
+ return errors.New("timed out waiting for the server to connect")
+ }
+}
+
// TODO: Persist instance ID. https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/21073
func (s *Supervisor) createInstanceID() (ulid.ULID, error) {
entropy := ulid.Monotonic(rand.New(rand.NewSource(0)), 0)
@@ -287,57 +523,29 @@ func (s *Supervisor) createInstanceID() (ulid.ULID, error) {
}
-func keyVal(key, val string) *protobufs.KeyValue {
- return &protobufs.KeyValue{
- Key: key,
- Value: &protobufs.AnyValue{
- Value: &protobufs.AnyValue_StringValue{StringValue: val},
- },
+func (s *Supervisor) composeExtraLocalConfig() []byte {
+ var cfg bytes.Buffer
+ resourceAttrs := map[string]string{}
+ for _, attr := range s.agentDescription.IdentifyingAttributes {
+ resourceAttrs[attr.Key] = attr.Value.GetStringValue()
}
-}
-
-func (s *Supervisor) createAgentDescription() *protobufs.AgentDescription {
- hostname, _ := os.Hostname()
-
- return &protobufs.AgentDescription{
- IdentifyingAttributes: []*protobufs.KeyValue{
- keyVal("service.name", agentType),
- keyVal("service.version", s.agentVersion),
- keyVal("service.instance.id", s.instanceID.String()),
- },
- NonIdentifyingAttributes: []*protobufs.KeyValue{
- keyVal("os.family", runtime.GOOS),
- keyVal("host.name", hostname),
- },
+ for _, attr := range s.agentDescription.NonIdentifyingAttributes {
+ resourceAttrs[attr.Key] = attr.Value.GetStringValue()
}
-}
-
-func (s *Supervisor) composeExtraLocalConfig() string {
- return fmt.Sprintf(`
-service:
- telemetry:
- logs:
- # Enables JSON log output for the Agent.
- encoding: json
- resource:
- # Set resource attributes required by OpAMP spec.
- # See https://github.com/open-telemetry/opamp-spec/blob/main/specification.md#agentdescriptionidentifying_attributes
- service.name: %s
- service.version: %s
- service.instance.id: %s
-
- # Enable extension to allow the Supervisor to check health.
- extensions: [health_check]
-
-extensions:
- health_check:
- endpoint: %s
-`,
- agentType,
- s.agentVersion,
- s.instanceID.String(),
- s.agentHealthCheckEndpoint,
+ tplVars := map[string]any{
+ "Healthcheck": s.agentHealthCheckEndpoint,
+ "ResourceAttributes": resourceAttrs,
+ }
+ err := s.extraConfigTemplate.Execute(
+ &cfg,
+ tplVars,
)
+ if err != nil {
+ s.logger.Error("Could not compose local config", zap.Error(err))
+ return nil
+ }
+
+ return cfg.Bytes()
}
func (s *Supervisor) loadAgentEffectiveConfig() {
@@ -349,7 +557,7 @@ func (s *Supervisor) loadAgentEffectiveConfig() {
effectiveConfigBytes = effFromFile
} else {
// No effective config file, just use the initial config.
- effectiveConfigBytes = []byte(s.composeExtraLocalConfig())
+ effectiveConfigBytes = s.composeExtraLocalConfig()
}
s.effectiveConfig.Store(string(effectiveConfigBytes))
@@ -375,11 +583,10 @@ func (s *Supervisor) createEffectiveConfigMsg() *protobufs.EffectiveConfig {
}
func (s *Supervisor) setupOwnMetrics(_ context.Context, settings *protobufs.TelemetryConnectionSettings) (configChanged bool) {
- var cfg string
+ var cfg bytes.Buffer
if settings.DestinationEndpoint == "" {
// No destination. Disable metric collection.
s.logger.Debug("Disabling own metrics pipeline in the config")
- cfg = ""
} else {
s.logger.Debug("Enabling own metrics pipeline in the config")
@@ -390,37 +597,20 @@ func (s *Supervisor) setupOwnMetrics(_ context.Context, settings *protobufs.Tele
return
}
- cfg = fmt.Sprintf(
- `
-receivers:
- # Collect own metrics
- prometheus/own_metrics:
- config:
- scrape_configs:
- - job_name: 'otel-collector'
- scrape_interval: 10s
- static_configs:
- - targets: ['0.0.0.0:%d']
-exporters:
- otlphttp/own_metrics:
- metrics_endpoint: %s
-
-service:
- telemetry:
- metrics:
- address: :%d
- pipelines:
- metrics/own_metrics:
- receivers: [prometheus/own_metrics]
- exporters: [otlphttp/own_metrics]
-`,
- port,
- settings.DestinationEndpoint,
- port,
+ err = s.ownTelemetryTemplate.Execute(
+ &cfg,
+ map[string]any{
+ "PrometheusPort": port,
+ "MetricsEndpoint": settings.DestinationEndpoint,
+ },
)
- }
+ if err != nil {
+ s.logger.Error("Could not setup own metrics", zap.Error(err))
+ return
+ }
- s.agentConfigOwnMetricsSection.Store(cfg)
+ }
+ s.agentConfigOwnMetricsSection.Store(cfg.String())
// Need to recalculate the Agent config so that the metric config is included in it.
configChanged, err := s.recalcEffectiveConfig()
@@ -481,7 +671,7 @@ func (s *Supervisor) composeEffectiveConfig(config *protobufs.AgentRemoteConfig)
}
// Merge local config last since it has the highest precedence.
- if err = k.Load(rawbytes.Provider([]byte(s.composeExtraLocalConfig())), yaml.Parser()); err != nil {
+ if err = k.Load(rawbytes.Provider(s.composeExtraLocalConfig()), yaml.Parser()); err != nil {
return false, err
}
@@ -519,7 +709,7 @@ func (s *Supervisor) startAgent() {
err := s.commander.Start(context.Background())
if err != nil {
s.logger.Error("Cannot start the agent", zap.Error(err))
- err = s.opampClient.SetHealth(&protobufs.AgentHealth{Healthy: false, LastError: fmt.Sprintf("Cannot start the agent: %v", err)})
+ err = s.opampClient.SetHealth(&protobufs.ComponentHealth{Healthy: false, LastError: fmt.Sprintf("Cannot start the agent: %v", err)})
if err != nil {
s.logger.Error("Failed to report OpAMP client health", zap.Error(err))
@@ -563,7 +753,7 @@ func (s *Supervisor) healthCheck() {
}
// Prepare OpAMP health report.
- health := &protobufs.AgentHealth{
+ health := &protobufs.ComponentHealth{
StartTimeUnixNano: uint64(s.startedAt.UnixNano()),
}
@@ -609,7 +799,7 @@ func (s *Supervisor) runAgentProcess() {
case <-s.commander.Done():
if s.shuttingDown {
- break
+ return
}
s.logger.Debug("Agent process exited unexpectedly. Will restart in a bit...", zap.Int("pid", s.commander.Pid()), zap.Int("exit_code", s.commander.ExitCode()))
@@ -617,7 +807,7 @@ func (s *Supervisor) runAgentProcess() {
"Agent process PID=%d exited unexpectedly, exit code=%d. Will restart in a bit...",
s.commander.Pid(), s.commander.ExitCode(),
)
- err := s.opampClient.SetHealth(&protobufs.AgentHealth{Healthy: false, LastError: errMsg})
+ err := s.opampClient.SetHealth(&protobufs.ComponentHealth{Healthy: false, LastError: errMsg})
if err != nil {
s.logger.Error("Could not report health to OpAMP server", zap.Error(err))
@@ -678,7 +868,7 @@ func (s *Supervisor) Shutdown() {
if s.opampClient != nil {
err := s.opampClient.SetHealth(
- &protobufs.AgentHealth{
+ &protobufs.ComponentHealth{
Healthy: false, LastError: "Supervisor is shutdown",
},
)
@@ -687,12 +877,18 @@ func (s *Supervisor) Shutdown() {
s.logger.Error("Could not report health to OpAMP server", zap.Error(err))
}
- err = s.opampClient.Stop(context.Background())
+ err = s.stopOpAMP()
if err != nil {
s.logger.Error("Could not stop the OpAMP client", zap.Error(err))
}
}
+
+ if s.healthCheckTicker != nil {
+ s.healthCheckTicker.Stop()
+ }
+
+ s.supervisorWG.Wait()
}
func (s *Supervisor) onMessage(ctx context.Context, msg *types.MessageData) {
@@ -737,7 +933,7 @@ func (s *Supervisor) onMessage(ctx context.Context, msg *types.MessageData) {
zap.String("old_id", s.instanceID.String()),
zap.String("new_id", newInstanceID.String()))
s.instanceID = newInstanceID
- err = s.opampClient.SetAgentDescription(s.createAgentDescription())
+ err = s.opampClient.SetAgentDescription(s.agentDescription)
if err != nil {
s.logger.Error("Failed to send agent description to OpAMP server")
}
diff --git a/cmd/opampsupervisor/supervisor/supervisor_test.go b/cmd/opampsupervisor/supervisor/supervisor_test.go
new file mode 100644
index 000000000000..f247b169907a
--- /dev/null
+++ b/cmd/opampsupervisor/supervisor/supervisor_test.go
@@ -0,0 +1,60 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package supervisor
+
+import (
+ "bytes"
+ "os"
+ "sync/atomic"
+ "testing"
+
+ "github.com/open-telemetry/opamp-go/protobufs"
+ "github.com/stretchr/testify/require"
+ "go.uber.org/zap"
+)
+
+func Test_composeEffectiveConfig(t *testing.T) {
+ s := Supervisor{
+ logger: zap.NewNop(),
+ hasNewConfig: make(chan struct{}, 1),
+ effectiveConfigFilePath: "effective.yaml",
+ agentConfigOwnMetricsSection: &atomic.Value{},
+ effectiveConfig: &atomic.Value{},
+ agentHealthCheckEndpoint: "localhost:8000",
+ }
+
+ s.agentDescription = &protobufs.AgentDescription{
+ IdentifyingAttributes: []*protobufs.KeyValue{
+ {
+ Key: "service.name",
+ Value: &protobufs.AnyValue{
+ Value: &protobufs.AnyValue_StringValue{
+ StringValue: "otelcol",
+ },
+ },
+ },
+ },
+ }
+
+ require.NoError(t, s.createTemplates())
+ s.loadAgentEffectiveConfig()
+
+ configChanged, err := s.composeEffectiveConfig(&protobufs.AgentRemoteConfig{
+ Config: &protobufs.AgentConfigMap{
+ ConfigMap: map[string]*protobufs.AgentConfigFile{
+ "": {
+ Body: []byte(""),
+ },
+ },
+ },
+ })
+ require.NoError(t, err)
+
+ expectedConfig, err := os.ReadFile("../testdata/collector/effective_config.yaml")
+ require.NoError(t, err)
+ expectedConfig = bytes.ReplaceAll(expectedConfig, []byte("\r\n"), []byte("\n"))
+
+ require.True(t, configChanged)
+ require.Equal(t, string(expectedConfig), s.effectiveConfig.Load().(string))
+}
diff --git a/cmd/opampsupervisor/supervisor/templates/bootstrap.yaml b/cmd/opampsupervisor/supervisor/templates/bootstrap.yaml
new file mode 100644
index 000000000000..983b62c4af59
--- /dev/null
+++ b/cmd/opampsupervisor/supervisor/templates/bootstrap.yaml
@@ -0,0 +1,24 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:{{.EndpointPort}}"
+exporters:
+ debug:
+ verbosity: basic
+
+extensions:
+ opamp:
+ instance_uid: "{{.InstanceUid}}"
+ server:
+ ws:
+ endpoint: "ws://localhost:{{.SupervisorPort}}/v1/opamp"
+ tls:
+ insecure: true
+
+service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ exporters: [debug]
+ extensions: [opamp]
diff --git a/cmd/opampsupervisor/supervisor/templates/extraconfig.yaml b/cmd/opampsupervisor/supervisor/templates/extraconfig.yaml
new file mode 100644
index 000000000000..910403f3ba44
--- /dev/null
+++ b/cmd/opampsupervisor/supervisor/templates/extraconfig.yaml
@@ -0,0 +1,16 @@
+service:
+ telemetry:
+ logs:
+ # Enables JSON log output for the Agent.
+ encoding: json
+ resource:
+ # Set resource attributes suggested by the OpAMP spec.
+ # See https://github.com/open-telemetry/opamp-spec/blob/main/specification.md#agentdescription-message
+ {{range $k, $v := .ResourceAttributes}}{{$k}}: "{{$v}}"
+ {{end}}
+ # Enable extension to allow the Supervisor to check health.
+ extensions: [health_check]
+
+extensions:
+ health_check:
+ endpoint: "{{.Healthcheck}}"
diff --git a/cmd/opampsupervisor/supervisor/templates/owntelemetry.yaml b/cmd/opampsupervisor/supervisor/templates/owntelemetry.yaml
new file mode 100644
index 000000000000..f46851298780
--- /dev/null
+++ b/cmd/opampsupervisor/supervisor/templates/owntelemetry.yaml
@@ -0,0 +1,21 @@
+receivers:
+ # Collect own metrics
+ prometheus/own_metrics:
+ config:
+ scrape_configs:
+ - job_name: 'otel-collector'
+ scrape_interval: 10s
+ static_configs:
+ - targets: ['0.0.0.0:{{.PrometheusPort}}']
+exporters:
+ otlphttp/own_metrics:
+ metrics_endpoint: "{{.MetricsEndpoint}}"
+
+service:
+ telemetry:
+ metrics:
+ address: ":{{.PrometheusPort}}"
+ pipelines:
+ metrics/own_metrics:
+ receivers: [prometheus/own_metrics]
+ exporters: [otlphttp/own_metrics]
diff --git a/cmd/opampsupervisor/testdata/collector/bad_config.yaml b/cmd/opampsupervisor/testdata/collector/bad_config.yaml
new file mode 100644
index 000000000000..f9a17d198368
--- /dev/null
+++ b/cmd/opampsupervisor/testdata/collector/bad_config.yaml
@@ -0,0 +1,11 @@
+receivers:
+ doesntexist:
+
+exporters:
+ doesntexist:
+
+service:
+ pipelines:
+ traces:
+ receivers: [doesntexist]
+ exporters: [doesntexist]
diff --git a/cmd/opampsupervisor/testdata/collector/effective_config.yaml b/cmd/opampsupervisor/testdata/collector/effective_config.yaml
new file mode 100644
index 000000000000..58d6940011b6
--- /dev/null
+++ b/cmd/opampsupervisor/testdata/collector/effective_config.yaml
@@ -0,0 +1,11 @@
+extensions:
+ health_check:
+ endpoint: localhost:8000
+service:
+ extensions:
+ - health_check
+ telemetry:
+ logs:
+ encoding: json
+ resource:
+ service.name: otelcol
diff --git a/cmd/opampsupervisor/testdata/collector/simple_pipeline.yaml b/cmd/opampsupervisor/testdata/collector/simple_pipeline.yaml
new file mode 100644
index 000000000000..e78c379f7ba6
--- /dev/null
+++ b/cmd/opampsupervisor/testdata/collector/simple_pipeline.yaml
@@ -0,0 +1,14 @@
+receivers:
+ filelog:
+ include: [{{.inputLogFile}}]
+ start_at: "beginning"
+
+exporters:
+ file:
+ path: {{.outputLogFile}}
+
+service:
+ pipelines:
+ logs:
+ receivers: [filelog]
+ exporters: [file]
diff --git a/cmd/opampsupervisor/testdata/supervisor/supervisor_accepts_conn.yaml b/cmd/opampsupervisor/testdata/supervisor/supervisor_accepts_conn.yaml
new file mode 100644
index 000000000000..0282577b252a
--- /dev/null
+++ b/cmd/opampsupervisor/testdata/supervisor/supervisor_accepts_conn.yaml
@@ -0,0 +1,15 @@
+server:
+ endpoint: ws://{{.url}}/v1/opamp
+ tls:
+ insecure: true
+
+capabilities:
+ reports_effective_config: true
+ reports_own_metrics: true
+ reports_health: true
+ accepts_remote_config: true
+ reports_remote_config: true
+ accepts_opamp_connection_settings: true
+
+agent:
+ executable: ../../bin/otelcontribcol_{{.goos}}_{{.goarch}}{{.extension}}
diff --git a/cmd/opampsupervisor/testdata/supervisor/supervisor_basic.yaml b/cmd/opampsupervisor/testdata/supervisor/supervisor_basic.yaml
new file mode 100644
index 000000000000..b5ef4c5db720
--- /dev/null
+++ b/cmd/opampsupervisor/testdata/supervisor/supervisor_basic.yaml
@@ -0,0 +1,14 @@
+server:
+ endpoint: ws://{{.url}}/v1/opamp
+ tls:
+ insecure: true
+
+capabilities:
+ reports_effective_config: true
+ reports_own_metrics: true
+ reports_health: true
+ accepts_remote_config: true
+ reports_remote_config: true
+
+agent:
+ executable: ../../bin/otelcontribcol_{{.goos}}_{{.goarch}}{{.extension}}
diff --git a/cmd/opampsupervisor/testdata/supervisor/supervisor_nocap.yaml b/cmd/opampsupervisor/testdata/supervisor/supervisor_nocap.yaml
new file mode 100644
index 000000000000..5b61ad4b1b68
--- /dev/null
+++ b/cmd/opampsupervisor/testdata/supervisor/supervisor_nocap.yaml
@@ -0,0 +1,14 @@
+server:
+ endpoint: ws://{{.url}}/v1/opamp
+ tls:
+ insecure: true
+
+capabilities:
+ reports_effective_config: false
+ reports_own_metrics: false
+ reports_health: false
+ accepts_remote_config: false
+ reports_remote_config: false
+
+agent:
+ executable: ../../bin/otelcontribcol_{{.goos}}_{{.goarch}}{{.extension}}
diff --git a/cmd/opampsupervisor/testdata/supervisor/supervisor_test.yaml b/cmd/opampsupervisor/testdata/supervisor/supervisor_test.yaml
new file mode 100644
index 000000000000..bdcdc2e72c93
--- /dev/null
+++ b/cmd/opampsupervisor/testdata/supervisor/supervisor_test.yaml
@@ -0,0 +1,14 @@
+server:
+ endpoint: wss://127.0.0.1:4320/v1/opamp
+ tls:
+ insecure_skip_verify: true
+
+capabilities:
+ reports_effective_config: true
+ reports_own_metrics: true
+ reports_health: true
+ accepts_remote_config: true
+ reports_remote_config: true
+
+agent:
+ executable: ../../bin/otelcontribcol_darwin_arm64
diff --git a/cmd/otelcontribcol/Makefile b/cmd/otelcontribcol/Makefile
index ded7a36092dc..1994cf483835 100644
--- a/cmd/otelcontribcol/Makefile
+++ b/cmd/otelcontribcol/Makefile
@@ -1 +1,4 @@
include ../../Makefile.Common
+
+lint: checklicense misspell
+ @echo "skipping lint: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/29449"
diff --git a/cmd/otelcontribcol/builder-config.yaml b/cmd/otelcontribcol/builder-config.yaml
index 4edb91745c62..f85d4e11d8f2 100644
--- a/cmd/otelcontribcol/builder-config.yaml
+++ b/cmd/otelcontribcol/builder-config.yaml
@@ -2,212 +2,226 @@ dist:
module: github.com/open-telemetry/opentelemetry-collector-contrib/cmd/otelcontribcol
name: otelcontribcol
description: Local OpenTelemetry Collector Contrib binary, testing only.
- version: 0.89.0-dev
- otelcol_version: 0.89.0
+ version: 0.98.0-dev
+ otelcol_version: 0.97.0
extensions:
- - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.89.0
- - gomod: go.opentelemetry.io/collector/extension/ballastextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.89.0
- import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.89.0
- import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage
+ - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.98.0
+ - gomod: go.opentelemetry.io/collector/extension/ballastextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/solarwindsapmsettingsextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.98.0
+ import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension v0.98.0
+ import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension v0.98.0
+ import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension v0.98.0
+ import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension v0.98.0
+ import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension
exporters:
- - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.89.0
- - gomod: go.opentelemetry.io/collector/exporter/loggingexporter v0.89.0
- - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.89.0
- - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.89.0
+ - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.98.0
+ - gomod: go.opentelemetry.io/collector/exporter/nopexporter v0.98.0
+ - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0
+ - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.98.0
processors:
- - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.89.0
- - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/sumologicprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor v0.89.0
+ - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.98.0
+ - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/sumologicprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor v0.98.0
receivers:
- - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudflarereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.89.0
+ - gomod: go.opentelemetry.io/collector/receiver/nopreceiver v0.98.0
+ - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudflarereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.98.0
connectors:
- - gomod: go.opentelemetry.io/collector/connector/forwardconnector v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.89.0
+ - gomod: go.opentelemetry.io/collector/connector/forwardconnector v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.98.0
replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage => ../../extension/storage/dbstorage
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage => ../../extension/storage/filestorage
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal => ../../pkg/batchpersignal
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs => ../../internal/aws/cwlogs
- - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter => ../../exporter/f5cloudexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver => ../../receiver/awsxrayreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver => ../../receiver/azureblobreceiver
@@ -234,7 +248,6 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy => ../../extension/awsproxy
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin => ../../pkg/translator/zipkin
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor => ../../processor/groupbyattrsprocessor
- - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter => ../../exporter/tanzuobservabilityexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter => ../../exporter/skywalkingexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter => ../../exporter/mezmoexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter => ../../exporter/clickhouseexporter
@@ -256,6 +269,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter => ../../exporter/googlemanagedprometheusexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver => ../../receiver/aerospikereceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor => ../../processor/cumulativetodeltaprocessor
+ - github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor => ../../processor/intervalprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver => ../../receiver/sapmreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver => ../../receiver/zipkinreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver => ../../receiver/jaegerreceiver
@@ -267,7 +281,6 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver => ../../receiver/vcenterreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver => ../../receiver/statsdreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter => ../../exporter/prometheusremotewriteexporter
- - github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor => ../../processor/servicegraphprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor => ../../processor/groupbytraceprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter => ../../exporter/tencentcloudlogserviceexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter => ../../exporter/loadbalancingexporter
@@ -300,6 +313,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver => ../../receiver/redisreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension => ../../extension/basicauthextension
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter => ../../exporter/influxdbexporter
+ - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter => ../../exporter/alertmanagerexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter => ../../exporter/alibabacloudlogserviceexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger => ../../pkg/translator/jaeger
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker => ../../internal/docker
@@ -336,7 +350,6 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver => ../../receiver/cloudfoundryreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter => ../../internal/filter
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver => ../../receiver/activedirectorydsreceiver
- - github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor => ../../processor/spanmetricsprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor => ../../processor/routingprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor => ../../processor/deltatorateprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter => ../../exporter/datadogexporter
@@ -348,7 +361,6 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver => ../../receiver/mongodbreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite => ../../pkg/translator/prometheusremotewrite
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver => ../../receiver/filelogreceiver
- - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filereceiver => ../../receiver/filereceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter => ../../exporter/signalfxexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver => ../../receiver/solacereceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver => ../../receiver/iisreceiver
@@ -358,6 +370,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry => ../../pkg/resourcetotelemetry
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../pkg/golden
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter => ../../exporter/opencensusexporter
+ - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter => ../../exporter/opensearchexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders => ../../internal/metadataproviders
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy => ../../internal/aws/proxy
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver => ../../receiver/snmpreceiver
@@ -368,7 +381,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver => ../../receiver/expvarreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver => ../../receiver/apachereceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver => ../../receiver/apachesparkreceiver
- - github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder => ../../extension/httpforwarder
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension => ../../extension/httpforwarderextension
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter => ../../exporter/elasticsearchexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter => ../../exporter/awscloudwatchlogsexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver => ../../receiver/googlecloudspannerreceiver
@@ -389,10 +402,10 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver => ../../receiver/googlecloudpubsubreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter => ../../exporter/sumologicexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter => ../../exporter/instanaexporter
+ - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter => ../../exporter/honeycombmarkerexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver => ../../receiver/otlpjsonfilereceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor => ../../processor/redactionprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling => ../../extension/jaegerremotesampling
- - github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogprocessor => ../../processor/datadogprocessor
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver => ../../receiver/sshcheckreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver => ../../receiver/datadogreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver => ../../receiver/chronyreceiver
@@ -416,6 +429,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector => ../../connector/countconnector
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector => ../../connector/datadogconnector
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector => ../../connector/exceptionsconnector
+ - github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector => ../../connector/grafanacloudconnector
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector => ../../connector/routingconnector
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector => ../../connector/servicegraphconnector
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector => ../../connector/spanmetricsconnector
@@ -430,3 +444,15 @@ replaces:
- github.com/go-kit/kit => github.com/go-kit/kit v0.12.0
# see https://github.com/mongodb/mongo-go-driver/pull/1485 (v1.13.0 was retracted)
- go.mongodb.org/mongo-driver => go.mongodb.org/mongo-driver v1.12.1
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding => ../../extension/encoding
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension => ../../extension/encoding/otlpencodingextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension => ../../extension/encoding/zipkinencodingextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension => ../../extension/encoding/jsonlogencodingextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension => ../../extension/encoding/textencodingextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension => ../../extension/encoding/jaegerencodingextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension => ../../extension/remotetapextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension => ../../extension/opampextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/solarwindsapmsettingsextension => ../../extension/solarwindsapmsettingsextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension => ../../extension/sumologicextension
+ - github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver => ../../receiver/namedpipereceiver
+ - github.com/open-telemetry/opentelemetry-collector-contrib/internal/sqlquery => ../../internal/sqlquery
diff --git a/cmd/otelcontribcol/components.go b/cmd/otelcontribcol/components.go
index 449cd50ad7e3..62cb58b6d5a4 100644
--- a/cmd/otelcontribcol/components.go
+++ b/cmd/otelcontribcol/components.go
@@ -7,7 +7,7 @@ import (
forwardconnector "go.opentelemetry.io/collector/connector/forwardconnector"
"go.opentelemetry.io/collector/exporter"
debugexporter "go.opentelemetry.io/collector/exporter/debugexporter"
- loggingexporter "go.opentelemetry.io/collector/exporter/loggingexporter"
+ nopexporter "go.opentelemetry.io/collector/exporter/nopexporter"
otlpexporter "go.opentelemetry.io/collector/exporter/otlpexporter"
otlphttpexporter "go.opentelemetry.io/collector/exporter/otlphttpexporter"
"go.opentelemetry.io/collector/extension"
@@ -18,14 +18,17 @@ import (
batchprocessor "go.opentelemetry.io/collector/processor/batchprocessor"
memorylimiterprocessor "go.opentelemetry.io/collector/processor/memorylimiterprocessor"
"go.opentelemetry.io/collector/receiver"
+ nopreceiver "go.opentelemetry.io/collector/receiver/nopreceiver"
otlpreceiver "go.opentelemetry.io/collector/receiver/otlpreceiver"
countconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector"
datadogconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector"
exceptionsconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector"
+ grafanacloudconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector"
routingconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector"
servicegraphconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector"
spanmetricsconnector "github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector"
+ alertmanagerexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter"
alibabacloudlogserviceexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter"
awscloudwatchlogsexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter"
awsemfexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter"
@@ -42,11 +45,11 @@ import (
datasetexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter"
dynatraceexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter"
elasticsearchexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter"
- f5cloudexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter"
fileexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter"
googlecloudexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter"
googlecloudpubsubexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter"
googlemanagedprometheusexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter"
+ honeycombmarkerexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter"
influxdbexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter"
instanaexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter"
kafkaexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter"
@@ -56,6 +59,7 @@ import (
lokiexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter"
mezmoexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter"
opencensusexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter"
+ opensearchexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter"
prometheusexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter"
prometheusremotewriteexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter"
pulsarexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter"
@@ -66,16 +70,20 @@ import (
splunkhecexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter"
sumologicexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter"
syslogexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter"
- tanzuobservabilityexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter"
tencentcloudlogserviceexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter"
zipkinexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter"
asapauthextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension"
awsproxy "github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy"
basicauthextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension"
bearertokenauthextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension"
+ jaegerencodingextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension"
+ jsonlogencodingextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension"
+ otlpencodingextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension"
+ textencodingextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension"
+ zipkinencodingextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension"
headerssetterextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension"
healthcheckextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension"
- httpforwarder "github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder"
+ httpforwarderextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension"
jaegerremotesampling "github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling"
oauth2clientauthextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension"
dockerobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver"
@@ -84,17 +92,21 @@ import (
hostobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver"
k8sobserver "github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver"
oidcauthextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension"
+ opampextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension"
pprofextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension"
+ remotetapextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension"
sigv4authextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension"
+ solarwindsapmsettingsextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/solarwindsapmsettingsextension"
dbstorage "github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage"
filestorage "github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage"
+ sumologicextension "github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension"
attributesprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor"
cumulativetodeltaprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor"
- datadogprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogprocessor"
deltatorateprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor"
filterprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor"
groupbyattrsprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor"
groupbytraceprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor"
+ intervalprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor"
k8sattributesprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor"
metricsgenerationprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor"
metricstransformprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor"
@@ -104,8 +116,6 @@ import (
resourcedetectionprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor"
resourceprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor"
routingprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor"
- servicegraphprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor"
- spanmetricsprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor"
spanprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor"
sumologicprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/sumologicprocessor"
tailsamplingprocessor "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor"
@@ -134,7 +144,6 @@ import (
elasticsearchreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver"
expvarreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver"
filelogreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver"
- filereceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filereceiver"
filestatsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver"
flinkmetricsreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver"
fluentforwardreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver"
@@ -159,6 +168,7 @@ import (
mongodbatlasreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver"
mongodbreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver"
mysqlreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver"
+ namedpipereceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver"
nginxreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver"
nsxtreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver"
opencensusreceiver "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver"
@@ -211,7 +221,7 @@ func components() (otelcol.Factories, error) {
bearertokenauthextension.NewFactory(),
headerssetterextension.NewFactory(),
healthcheckextension.NewFactory(),
- httpforwarder.NewFactory(),
+ httpforwarderextension.NewFactory(),
jaegerremotesampling.NewFactory(),
oauth2clientauthextension.NewFactory(),
ecsobserver.NewFactory(),
@@ -220,16 +230,26 @@ func components() (otelcol.Factories, error) {
k8sobserver.NewFactory(),
dockerobserver.NewFactory(),
oidcauthextension.NewFactory(),
+ opampextension.NewFactory(),
pprofextension.NewFactory(),
+ remotetapextension.NewFactory(),
sigv4authextension.NewFactory(),
- filestorage.NewFactory(),
+ solarwindsapmsettingsextension.NewFactory(),
dbstorage.NewFactory(),
+ filestorage.NewFactory(),
+ sumologicextension.NewFactory(),
+ otlpencodingextension.NewFactory(),
+ jaegerencodingextension.NewFactory(),
+ jsonlogencodingextension.NewFactory(),
+ textencodingextension.NewFactory(),
+ zipkinencodingextension.NewFactory(),
)
if err != nil {
return otelcol.Factories{}, err
}
factories.Receivers, err = receiver.MakeFactoryMap(
+ nopreceiver.NewFactory(),
otlpreceiver.NewFactory(),
activedirectorydsreceiver.NewFactory(),
aerospikereceiver.NewFactory(),
@@ -256,7 +276,6 @@ func components() (otelcol.Factories, error) {
expvarreceiver.NewFactory(),
filelogreceiver.NewFactory(),
filestatsreceiver.NewFactory(),
- filereceiver.NewFactory(),
flinkmetricsreceiver.NewFactory(),
fluentforwardreceiver.NewFactory(),
googlecloudpubsubreceiver.NewFactory(),
@@ -280,6 +299,7 @@ func components() (otelcol.Factories, error) {
mongodbatlasreceiver.NewFactory(),
mongodbreceiver.NewFactory(),
mysqlreceiver.NewFactory(),
+ namedpipereceiver.NewFactory(),
nginxreceiver.NewFactory(),
nsxtreceiver.NewFactory(),
opencensusreceiver.NewFactory(),
@@ -324,9 +344,10 @@ func components() (otelcol.Factories, error) {
factories.Exporters, err = exporter.MakeFactoryMap(
debugexporter.NewFactory(),
- loggingexporter.NewFactory(),
+ nopexporter.NewFactory(),
otlpexporter.NewFactory(),
otlphttpexporter.NewFactory(),
+ alertmanagerexporter.NewFactory(),
alibabacloudlogserviceexporter.NewFactory(),
awscloudwatchlogsexporter.NewFactory(),
awsemfexporter.NewFactory(),
@@ -343,11 +364,11 @@ func components() (otelcol.Factories, error) {
datasetexporter.NewFactory(),
dynatraceexporter.NewFactory(),
elasticsearchexporter.NewFactory(),
- f5cloudexporter.NewFactory(),
fileexporter.NewFactory(),
googlecloudexporter.NewFactory(),
googlecloudpubsubexporter.NewFactory(),
googlemanagedprometheusexporter.NewFactory(),
+ honeycombmarkerexporter.NewFactory(),
influxdbexporter.NewFactory(),
instanaexporter.NewFactory(),
kafkaexporter.NewFactory(),
@@ -357,6 +378,7 @@ func components() (otelcol.Factories, error) {
lokiexporter.NewFactory(),
mezmoexporter.NewFactory(),
opencensusexporter.NewFactory(),
+ opensearchexporter.NewFactory(),
prometheusexporter.NewFactory(),
prometheusremotewriteexporter.NewFactory(),
pulsarexporter.NewFactory(),
@@ -367,7 +389,6 @@ func components() (otelcol.Factories, error) {
splunkhecexporter.NewFactory(),
sumologicexporter.NewFactory(),
syslogexporter.NewFactory(),
- tanzuobservabilityexporter.NewFactory(),
tencentcloudlogserviceexporter.NewFactory(),
zipkinexporter.NewFactory(),
)
@@ -380,11 +401,11 @@ func components() (otelcol.Factories, error) {
memorylimiterprocessor.NewFactory(),
attributesprocessor.NewFactory(),
cumulativetodeltaprocessor.NewFactory(),
- datadogprocessor.NewFactory(),
deltatorateprocessor.NewFactory(),
filterprocessor.NewFactory(),
groupbyattrsprocessor.NewFactory(),
groupbytraceprocessor.NewFactory(),
+ intervalprocessor.NewFactory(),
k8sattributesprocessor.NewFactory(),
metricsgenerationprocessor.NewFactory(),
metricstransformprocessor.NewFactory(),
@@ -393,8 +414,6 @@ func components() (otelcol.Factories, error) {
resourcedetectionprocessor.NewFactory(),
resourceprocessor.NewFactory(),
routingprocessor.NewFactory(),
- servicegraphprocessor.NewFactory(),
- spanmetricsprocessor.NewFactory(),
sumologicprocessor.NewFactory(),
spanprocessor.NewFactory(),
tailsamplingprocessor.NewFactory(),
@@ -410,6 +429,7 @@ func components() (otelcol.Factories, error) {
countconnector.NewFactory(),
datadogconnector.NewFactory(),
exceptionsconnector.NewFactory(),
+ grafanacloudconnector.NewFactory(),
routingconnector.NewFactory(),
servicegraphconnector.NewFactory(),
spanmetricsconnector.NewFactory(),
diff --git a/cmd/otelcontribcol/distribution_metadata_test.go b/cmd/otelcontribcol/distribution_metadata_test.go
index fd0a4751bafa..6fcd865ec441 100644
--- a/cmd/otelcontribcol/distribution_metadata_test.go
+++ b/cmd/otelcontribcol/distribution_metadata_test.go
@@ -12,6 +12,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/provider/fileprovider"
)
@@ -35,46 +36,53 @@ func TestComponentsArePresent(t *testing.T) {
tt.Skip("no status present, skipping", metadataComponent)
return
}
- inDevelopment := true
- deprecated := true
+ inDevelopment := len(m.Status.Stability) == 0
+ deprecated := false
+ inUse := false
for stability, pipelines := range m.Status.Stability {
- if stability != "development" && len(pipelines) > 0 {
- inDevelopment = false
- break
- }
- if stability != "deprecated" && len(pipelines) > 0 {
- deprecated = false
- break
+ if len(pipelines) > 0 {
+ switch stability {
+ case "development":
+ inDevelopment = true
+ case "deprecated":
+ deprecated = true
+ case "unmaintained":
+ // consider not in use.
+ default: // alpha, beta, stable
+ inUse = true
+ }
}
}
- if inDevelopment {
+ if inDevelopment && !inUse {
tt.Skip("component in development, skipping", metadataComponent)
return
}
- if deprecated {
+ if deprecated && !inUse {
tt.Skip("component deprecated, skipping", metadataComponent)
return
}
+
+ cType := component.MustNewType(m.Type)
switch m.Status.Class {
case "connector":
- assert.NotNil(tt, components.Connectors[component.Type(m.Type)], "missing connector: %s", m.Type)
+ assert.NotNil(tt, components.Connectors[cType], "missing connector: %s", m.Type)
case "exporter":
- assert.NotNil(tt, components.Exporters[component.Type(m.Type)], "missing exporter: %s", m.Type)
+ assert.NotNil(tt, components.Exporters[cType], "missing exporter: %s", m.Type)
case "extension":
- assert.NotNil(tt, components.Extensions[component.Type(m.Type)], "missing extension: %s", m.Type)
+ assert.NotNil(tt, components.Extensions[cType], "missing extension: %s", m.Type)
case "processor":
- assert.NotNil(tt, components.Processors[component.Type(m.Type)], "missing processor: %s", m.Type)
+ assert.NotNil(tt, components.Processors[cType], "missing processor: %s", m.Type)
case "receiver":
- assert.NotNil(tt, components.Receivers[component.Type(m.Type)], "missing receiver: %s", m.Type)
+ assert.NotNil(tt, components.Receivers[cType], "missing receiver: %s", m.Type)
}
})
}
}
func loadMetadata(filePath string) (metadata, error) {
- cp, err := fileprovider.New().Retrieve(context.Background(), "file:"+filePath, nil)
+ cp, err := fileprovider.NewWithSettings(confmap.ProviderSettings{}).Retrieve(context.Background(), "file:"+filePath, nil)
if err != nil {
return metadata{}, err
}
@@ -85,7 +93,7 @@ func loadMetadata(filePath string) (metadata, error) {
}
md := metadata{}
- if err := conf.Unmarshal(&md); err != nil {
+ if err := conf.Unmarshal(&md, confmap.WithIgnoreUnused()); err != nil {
return md, err
}
diff --git a/cmd/otelcontribcol/exporters_test.go b/cmd/otelcontribcol/exporters_test.go
index ea2443a4456f..6355a1e4d328 100644
--- a/cmd/otelcontribcol/exporters_test.go
+++ b/cmd/otelcontribcol/exporters_test.go
@@ -1,28 +1,32 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package main
import (
"context"
"errors"
"path/filepath"
+ "runtime"
"testing"
+ "time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/exporter/otlpexporter"
"go.opentelemetry.io/collector/exporter/otlphttpexporter"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter"
@@ -38,8 +42,8 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter"
dtconf "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter/config"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter"
- "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter"
@@ -49,6 +53,7 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter"
@@ -59,11 +64,9 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter"
- "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil"
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
)
func TestDefaultExporters(t *testing.T) {
@@ -88,7 +91,7 @@ func TestDefaultExporters(t *testing.T) {
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -101,9 +104,10 @@ func TestDefaultExporters(t *testing.T) {
exporter: "file",
getConfigFn: func() component.Config {
cfg := expFactories["file"].CreateDefaultConfig().(*fileexporter.Config)
- cfg.Path = filepath.Join(t.TempDir(), "random.file")
+ cfg.Path = filepath.Join(t.TempDir(), "file.exporter.random.file")
return cfg
},
+ skipLifecycle: runtime.GOOS == "windows", // On Windows not all handles are closed when the exporter is shutdown.
},
{
exporter: "kafka",
@@ -114,7 +118,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Metadata.Full = false
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -122,19 +126,27 @@ func TestDefaultExporters(t *testing.T) {
{
exporter: "debug",
},
- {
- exporter: "logging",
- },
{
exporter: "opencensus",
getConfigFn: func() component.Config {
cfg := expFactories["opencensus"].CreateDefaultConfig().(*opencensusexporter.Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: endpoint,
}
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
+ return cfg
+ },
+ expectConsumeErr: true,
+ },
+ {
+ exporter: "opensearch",
+ getConfigFn: func() component.Config {
+ cfg := expFactories["opensearch"].CreateDefaultConfig().(*opensearchexporter.Config)
+ cfg.ClientConfig = confighttp.ClientConfig{
+ Endpoint: "http://" + endpoint,
+ }
return cfg
},
expectConsumeErr: true,
@@ -143,12 +155,12 @@ func TestDefaultExporters(t *testing.T) {
exporter: "otlp",
getConfigFn: func() component.Config {
cfg := expFactories["otlp"].CreateDefaultConfig().(*otlpexporter.Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: endpoint,
}
// disable queue/retry to validate passing the test data synchronously
- cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.QueueConfig.Enabled = false
+ cfg.RetryConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -159,8 +171,8 @@ func TestDefaultExporters(t *testing.T) {
cfg := expFactories["otlphttp"].CreateDefaultConfig().(*otlphttpexporter.Config)
cfg.Endpoint = "http://" + endpoint
// disable queue/retry to validate passing the test data synchronously
- cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.QueueConfig.Enabled = false
+ cfg.RetryConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -179,7 +191,7 @@ func TestDefaultExporters(t *testing.T) {
cfg := expFactories["prometheusremotewrite"].CreateDefaultConfig().(*prometheusremotewriteexporter.Config)
// disable queue/retry to validate passing the test data synchronously
cfg.RemoteWriteQueue.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -200,7 +212,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -214,7 +226,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.APIURL = "http://" + endpoint
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -227,7 +239,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -239,7 +251,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = endpoint
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -253,6 +265,22 @@ func TestDefaultExporters(t *testing.T) {
},
skipLifecycle: true,
},
+ {
+ exporter: "alertmanager",
+ getConfigFn: func() component.Config {
+ cfg := expFactories["alertmanager"].CreateDefaultConfig().(*alertmanagerexporter.Config)
+ cfg.ClientConfig = confighttp.ClientConfig{
+ Endpoint: "http://" + endpoint,
+ }
+ cfg.GeneratorURL = "opentelemetry-collector"
+ cfg.DefaultSeverity = "info"
+ // disable queue/retry to validate passing the test data synchronously
+ cfg.QueueSettings.Enabled = false
+ cfg.BackoffConfig.Enabled = false
+ return cfg
+ },
+ expectConsumeErr: true,
+ },
{
exporter: "alibabacloud_logservice",
getConfigFn: func() component.Config {
@@ -341,7 +369,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Metrics.Endpoint = endpoint
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -353,7 +381,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.API.Key = "cutedogsgotoheaven"
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -366,7 +394,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.APIKey = "secret-key"
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -380,7 +408,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.APIToken = "dynamictracing"
// disable queue/retry to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -395,20 +423,6 @@ func TestDefaultExporters(t *testing.T) {
return cfg
},
},
- {
- exporter: "f5cloud",
- getConfigFn: func() component.Config {
- cfg := expFactories["f5cloud"].CreateDefaultConfig().(*f5cloudexporter.Config)
- cfg.Endpoint = "http://" + endpoint
- cfg.Source = "magic-source"
- cfg.AuthConfig.CredentialFile = filepath.Join(t.TempDir(), "random.file")
- // disable queue/retry to validate passing the test data synchronously
- cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
- return cfg
- },
- skipLifecycle: true,
- },
{
exporter: "googlecloud",
skipLifecycle: true, // Requires credentials to be able to successfully load the exporter
@@ -421,6 +435,18 @@ func TestDefaultExporters(t *testing.T) {
exporter: "googlecloudpubsub",
skipLifecycle: true,
},
+ {
+ exporter: "honeycombmarker",
+ getConfigFn: func() component.Config {
+ cfg := expFactories["honeycombmarker"].CreateDefaultConfig().(*honeycombmarkerexporter.Config)
+ cfg.Endpoint = "http://" + endpoint
+ // disable queue to validate passing the test data synchronously
+ cfg.QueueSettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
+ return cfg
+ },
+ expectConsumeErr: true,
+ },
{
exporter: "influxdb",
getConfigFn: func() component.Config {
@@ -428,7 +454,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
skipLifecycle: true,
@@ -458,7 +484,7 @@ func TestDefaultExporters(t *testing.T) {
cfg := expFactories["logicmonitor"].CreateDefaultConfig().(*logicmonitorexporter.Config)
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
skipLifecycle: true,
@@ -470,7 +496,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -482,7 +508,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -494,7 +520,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
},
@@ -512,7 +538,7 @@ func TestDefaultExporters(t *testing.T) {
cfg := expFactories["skywalking"].CreateDefaultConfig().(*skywalkingexporter.Config)
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
skipLifecycle: true,
@@ -524,7 +550,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -536,20 +562,7 @@ func TestDefaultExporters(t *testing.T) {
cfg.Endpoint = "http://" + endpoint
// disable queue to validate passing the test data synchronously
cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
- return cfg
- },
- expectConsumeErr: true,
- },
- {
- exporter: "tanzuobservability",
- getConfigFn: func() component.Config {
- cfg := expFactories["tanzuobservability"].CreateDefaultConfig().(*tanzuobservabilityexporter.Config)
- cfg.Traces.Endpoint = "http://" + endpoint
- cfg.Metrics.Endpoint = "http://" + endpoint
- // disable queue to validate passing the test data synchronously
- cfg.QueueSettings.Enabled = false
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
return cfg
},
expectConsumeErr: true,
@@ -622,19 +635,19 @@ func verifyExporterLifecycle(t *testing.T, factory exporter.Factory, getConfigFn
assert.NotPanics(t, func() {
switch e := exp.(type) {
case exporter.Logs:
- logs := testdata.GenerateLogsManyLogRecordsSameResource(2)
+ logs := generateTestLogs()
if !e.Capabilities().MutatesData {
logs.MarkReadOnly()
}
err = e.ConsumeLogs(ctx, logs)
case exporter.Metrics:
- metrics := testdata.GenerateMetricsTwoMetrics()
+ metrics := generateTestMetrics()
if !e.Capabilities().MutatesData {
metrics.MarkReadOnly()
}
err = e.ConsumeMetrics(ctx, metrics)
case exporter.Traces:
- traces := testdata.GenerateTracesTwoSpansSameResource()
+ traces := generateTestTraces()
if !e.Capabilities().MutatesData {
traces.MarkReadOnly()
}
@@ -649,6 +662,41 @@ func verifyExporterLifecycle(t *testing.T, factory exporter.Factory, getConfigFn
}
}
+func generateTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.Gauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
+
// verifyExporterShutdown is used to test if an exporter type can be shutdown without being started first.
func verifyExporterShutdown(tb testing.TB, factory exporter.Factory, getConfigFn getExporterConfigFn) {
ctx := context.Background()
diff --git a/cmd/otelcontribcol/extensions_test.go b/cmd/otelcontribcol/extensions_test.go
index b7b076be4db3..fc943100b82f 100644
--- a/cmd/otelcontribcol/extensions_test.go
+++ b/cmd/otelcontribcol/extensions_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package main
import (
@@ -29,12 +25,14 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension"
- "github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage"
"github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage"
@@ -151,7 +149,7 @@ func TestDefaultExtensions(t *testing.T) {
{
extension: "http_forwarder",
getConfigFn: func() component.Config {
- cfg := extFactories["http_forwarder"].CreateDefaultConfig().(*httpforwarder.Config)
+ cfg := extFactories["http_forwarder"].CreateDefaultConfig().(*httpforwarderextension.Config)
cfg.Egress.Endpoint = "http://" + endpoint
cfg.Ingress.Endpoint = testutil.GetAvailableLocalAddress(t)
return cfg
@@ -217,6 +215,39 @@ func TestDefaultExtensions(t *testing.T) {
return extFactories["jaegerremotesampling"].CreateDefaultConfig().(*jaegerremotesampling.Config)
},
},
+ {
+ extension: "otlp_encoding",
+ },
+ {
+ extension: "text_encoding",
+ },
+ {
+ extension: "jaeger_encoding",
+ },
+ {
+ extension: "json_log_encoding",
+ },
+ {
+ extension: "zipkin_encoding",
+ },
+ {
+ extension: "remotetap",
+ getConfigFn: func() component.Config {
+ return extFactories["remotetap"].CreateDefaultConfig().(*remotetapextension.Config)
+ },
+ },
+ {
+ extension: "opamp",
+ getConfigFn: func() component.Config {
+ cfg := extFactories["opamp"].CreateDefaultConfig().(*opampextension.Config)
+ cfg.Server.WS.Endpoint = "wss://" + endpoint
+ return cfg
+ },
+ },
+ {
+ extension: "solarwindsapmsettings",
+ skipLifecycle: true, // Requires Solarwinds APM endpoint and token
+ },
}
extensionCount := 0
@@ -261,8 +292,11 @@ type getExtensionConfigFn func() component.Config
// the test can't be done with the default configuration for the component.
func verifyExtensionLifecycle(t *testing.T, factory extension.Factory, getConfigFn getExtensionConfigFn) {
ctx := context.Background()
- host := newAssertNoErrorHost(t)
+ host := componenttest.NewNopHost()
extCreateSet := extensiontest.NewNopCreateSettings()
+ extCreateSet.ReportStatus = func(event *component.StatusEvent) {
+ require.NoError(t, event.Err())
+ }
if getConfigFn == nil {
getConfigFn = factory.CreateDefaultConfig
@@ -300,23 +334,3 @@ func verifyExtensionShutdown(tb testing.TB, factory extension.Factory, getConfig
assert.NoError(tb, e.Shutdown(ctx))
})
}
-
-// assertNoErrorHost implements a component.Host that asserts that there were no errors.
-type assertNoErrorHost struct {
- component.Host
- *testing.T
-}
-
-var _ component.Host = (*assertNoErrorHost)(nil)
-
-// newAssertNoErrorHost returns a new instance of assertNoErrorHost.
-func newAssertNoErrorHost(t *testing.T) component.Host {
- return &assertNoErrorHost{
- componenttest.NewNopHost(),
- t,
- }
-}
-
-func (aneh *assertNoErrorHost) ReportFatalError(err error) {
- assert.NoError(aneh, err)
-}
diff --git a/cmd/otelcontribcol/go.mod b/cmd/otelcontribcol/go.mod
index 4e73936b1e97..f9fd461b8a32 100644
--- a/cmd/otelcontribcol/go.mod
+++ b/cmd/otelcontribcol/go.mod
@@ -2,248 +2,263 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/otelcontribcol
-go 1.20
+go 1.22.0
+
+toolchain go1.22.2
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/sumologicprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudflarereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.89.0
- github.com/prometheus/prometheus v0.48.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configgrpc v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap 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/debugexporter 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/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
- golang.org/x/sys v0.15.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/asapauthextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/awsproxy v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/basicauthextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/bearertokenauthextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/headerssetterextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/healthcheckextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/oauth2clientauthextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/dockerobserver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecsobserver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/ecstaskobserver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/hostobserver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer/k8sobserver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/oidcauthextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/sigv4authextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/solarwindsapmsettingsextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/filterprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricsgenerationprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/metricstransformprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/sumologicprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aerospikereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscloudwatchreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awscontainerinsightreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsecscontainermetricsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsfirehosereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureblobreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azureeventhubreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/azuremonitorreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/bigipreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/chronyreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudflarereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/collectdreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/couchdbreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/elasticsearchreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/expvarreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filestatsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/flinkmetricsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudpubsubreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/googlecloudspannerreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/haproxyreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/httpcheckreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/iisreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/influxdbreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/journaldreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sclusterreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8seventsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/k8sobjectsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkametricsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kafkareceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/kubeletstatsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/lokireceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/memcachedreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mysqlreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nginxreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/nsxtreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/oracledbreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/podmanreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/postgresqlreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/pulsarreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefareceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/purefbreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/rabbitmqreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/receivercreator v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/riakreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/simpleprometheusreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/skywalkingreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snmpreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/snowflakereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlqueryreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sqlserverreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/statsdreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/vcenterreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/wavefrontreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowsperfcountersreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zookeeperreceiver v0.98.0
+ github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/connector/forwardconnector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/exporter/debugexporter v0.98.0
+ go.opentelemetry.io/collector/exporter/nopexporter v0.98.0
+ go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0
+ go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0
+ go.opentelemetry.io/collector/extension v0.98.0
+ go.opentelemetry.io/collector/extension/ballastextension v0.98.0
+ go.opentelemetry.io/collector/extension/zpagesextension v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/processor v0.98.0
+ go.opentelemetry.io/collector/processor/batchprocessor v0.98.0
+ go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/collector/receiver/nopreceiver v0.98.0
+ go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ golang.org/x/sys v0.19.0
)
require (
- bitbucket.org/atlassian/go-asap/v2 v2.6.0 // indirect
- cloud.google.com/go v0.111.0 // indirect
- cloud.google.com/go/compute v1.23.2 // indirect
+ bitbucket.org/atlassian/go-asap/v2 v2.8.0 // indirect
+ cloud.google.com/go v0.112.2 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- cloud.google.com/go/iam v1.1.4 // indirect
- cloud.google.com/go/logging v1.8.1 // indirect
- cloud.google.com/go/longrunning v0.5.3 // indirect
- cloud.google.com/go/monitoring v1.16.2 // indirect
- cloud.google.com/go/pubsub v1.33.0 // indirect
- cloud.google.com/go/spanner v1.51.0 // indirect
- cloud.google.com/go/trace v1.10.3 // indirect
+ cloud.google.com/go/iam v1.1.6 // indirect
+ cloud.google.com/go/logging v1.9.0 // indirect
+ cloud.google.com/go/longrunning v0.5.5 // indirect
+ cloud.google.com/go/monitoring v1.18.0 // indirect
+ cloud.google.com/go/pubsub v1.37.0 // indirect
+ cloud.google.com/go/spanner v1.60.0 // indirect
+ cloud.google.com/go/trace v1.10.5 // indirect
code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c // indirect
code.cloudfoundry.org/go-diodes v0.0.0-20211115184647-b584dd5df32c // indirect
code.cloudfoundry.org/go-loggregator v7.4.0+incompatible // indirect
code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78 // indirect
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
+ filippo.io/edwards25519 v1.1.0 // indirect
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect
github.com/99designs/keyring v1.2.2 // indirect
github.com/AthenZ/athenz v1.10.39 // indirect
github.com/Azure/azure-amqp-common-go/v4 v4.2.0 // indirect
- github.com/Azure/azure-event-hubs-go/v3 v3.6.1 // indirect
- github.com/Azure/azure-kusto-go v0.13.1 // indirect
+ github.com/Azure/azure-event-hubs-go/v3 v3.6.2 // indirect
+ github.com/Azure/azure-kusto-go v0.15.2 // indirect
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.8.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 // indirect
- github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect
- github.com/Azure/go-amqp v1.0.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 // indirect
+ github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe // indirect
+ github.com/Azure/go-amqp v1.0.5 // indirect
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
github.com/Azure/go-autorest/autorest v0.11.29 // indirect
github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect
@@ -252,189 +267,189 @@ require (
github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect
github.com/Azure/go-autorest/logger v0.2.1 // indirect
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 // indirect
- github.com/ClickHouse/ch-go v0.58.2 // indirect
- github.com/ClickHouse/clickhouse-go/v2 v2.15.0 // indirect
- github.com/DataDog/agent-payload/v5 v5.0.89 // indirect
- github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-api-client-go/v2 v2.18.0 // indirect
- github.com/DataDog/datadog-go/v5 v5.1.1 // indirect
- github.com/DataDog/go-sqllexer v0.0.8 // indirect
+ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect
+ github.com/ClickHouse/ch-go v0.61.5 // indirect
+ github.com/ClickHouse/clickhouse-go/v2 v2.23.0 // indirect
+ github.com/Code-Hex/go-generics-cache v1.3.1 // indirect
+ github.com/DataDog/agent-payload/v5 v5.0.111 // indirect
+ github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-api-client-go/v2 v2.24.0 // indirect
+ github.com/DataDog/datadog-go/v5 v5.5.0 // indirect
+ github.com/DataDog/go-sqllexer v0.0.9 // indirect
github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect
- github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 // indirect
- github.com/DataDog/sketches-go v1.4.3 // indirect
+ github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 // indirect
+ github.com/DataDog/sketches-go v1.4.4 // indirect
github.com/DataDog/zstd v1.5.2 // indirect
github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0 // indirect
- github.com/IBM/sarama v1.42.1 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 // indirect
+ github.com/IBM/sarama v1.43.1 // indirect
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/Microsoft/hcsshim v0.11.4 // indirect
+ github.com/Microsoft/hcsshim v0.12.0-rc.3 // indirect
github.com/ReneKroon/ttlcache/v2 v2.11.0 // indirect
- github.com/SAP/go-hdb v1.6.2 // indirect
- github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2 // indirect
+ github.com/SAP/go-hdb v1.8.12 // indirect
+ github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc // indirect
github.com/Showmax/go-fqdn v1.0.0 // indirect
github.com/aerospike/aerospike-client-go/v6 v6.13.0 // indirect
- github.com/alecthomas/participle/v2 v2.1.0 // indirect
- github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
- github.com/aliyun/aliyun-log-go-sdk v0.1.63 // indirect
- github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-00010101000000-000000000000 // indirect
- github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-00010101000000-000000000000 // indirect
- github.com/andybalholm/brotli v1.0.6 // indirect
- github.com/antonmedv/expr v1.15.3 // indirect
- github.com/apache/arrow/go/v12 v12.0.1 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect
+ github.com/aliyun/aliyun-log-go-sdk v0.1.72 // indirect
+ github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-20240419190856-2f880467f335 // indirect
+ github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-20240415183253-230331014d2c // indirect
+ github.com/andybalholm/brotli v1.1.0 // indirect
+ github.com/apache/arrow/go/v15 v15.0.0 // indirect
github.com/apache/pulsar-client-go v0.8.1 // indirect
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e // indirect
- github.com/apache/thrift v0.19.0 // indirect
+ github.com/apache/thrift v0.20.0 // indirect
github.com/ardielle/ardielle-go v1.5.2 // indirect
github.com/armon/go-metrics v0.4.1 // indirect
- github.com/aws/aws-sdk-go v1.47.10 // indirect
- github.com/aws/aws-sdk-go-v2 v1.22.2 // indirect
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 // indirect
- github.com/aws/aws-sdk-go-v2/config v1.24.0 // indirect
- github.com/aws/aws-sdk-go-v2/credentials v1.15.2 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 // indirect
+ github.com/aws/aws-sdk-go v1.51.17 // indirect
+ github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect
+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
+ github.com/aws/aws-sdk-go-v2/config v1.27.11 // indirect
+ github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.59 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 // indirect
- github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1 // indirect
+ github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4 // indirect
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 // indirect
- github.com/aws/smithy-go v1.16.0 // indirect
+ github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect
+ github.com/aws/smithy-go v1.20.2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
github.com/buger/jsonparser v1.1.1 // indirect
- github.com/caio/go-tdigest/v4 v4.0.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/checkpoint-restore/go-criu/v5 v5.3.0 // indirect
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
- github.com/cilium/ebpf v0.9.1 // indirect
+ github.com/cilium/ebpf v0.11.0 // indirect
github.com/cloudfoundry-incubator/uaago v0.0.0-20190307164349-8136b7bbe76e // indirect
- github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe // indirect
- github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 // indirect
- github.com/containerd/cgroups v1.1.0 // indirect
- github.com/containerd/cgroups/v3 v3.0.2 // indirect
+ github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa // indirect
+ github.com/containerd/cgroups/v3 v3.0.3 // indirect
github.com/containerd/console v1.0.3 // indirect
- github.com/containerd/containerd v1.7.7 // indirect
+ github.com/containerd/errdefs v0.1.0 // indirect
github.com/containerd/ttrpc v1.2.2 // indirect
- github.com/coreos/go-oidc v2.2.1+incompatible // indirect
+ github.com/coreos/go-oidc/v3 v3.10.0 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/cskr/pubsub v1.0.2 // indirect
github.com/cyphar/filepath-securejoin v0.2.4 // indirect
github.com/danieljoos/wincred v1.1.2 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
- github.com/denisenkom/go-mssqldb v0.12.2 // indirect
github.com/dennwc/varint v1.0.0 // indirect
github.com/devigned/tab v0.1.1 // indirect
- github.com/digitalocean/godo v1.104.1 // indirect
- github.com/docker/distribution v2.8.2+incompatible // indirect
- github.com/docker/docker v24.0.7+incompatible // indirect
- github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11 // indirect
+ github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
+ github.com/digitalocean/godo v1.109.0 // indirect
+ github.com/distribution/reference v0.5.0 // indirect
+ github.com/docker/docker v25.0.5+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
- github.com/dvsekhvalnov/jose2go v1.5.0 // indirect
+ github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0 // indirect
- github.com/eapache/go-resiliency v1.4.0 // indirect
+ github.com/eapache/go-resiliency v1.6.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/go-elasticsearch/v7 v7.17.10 // indirect
github.com/elastic/go-structform v0.0.10 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
- github.com/envoyproxy/go-control-plane v0.11.1 // indirect
- github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect
+ github.com/envoyproxy/go-control-plane v0.12.0 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect
github.com/euank/go-kmsg-parser v2.0.0+incompatible // indirect
- github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 // indirect
+ github.com/expr-lang/expr v1.16.3 // indirect
+ github.com/facebook/time v0.0.0-20240109160331-d1456d1a6bac // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/form3tech-oss/jwt-go v3.2.5+incompatible // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
- github.com/getsentry/sentry-go v0.25.0 // indirect
+ github.com/getsentry/sentry-go v0.27.0 // indirect
github.com/go-faster/city v1.0.1 // indirect
- github.com/go-faster/errors v0.6.1 // indirect
- github.com/go-kit/kit v0.12.0 // indirect
+ github.com/go-faster/errors v0.7.1 // indirect
+ github.com/go-jose/go-jose/v4 v4.0.1 // indirect
+ github.com/go-kit/kit v0.13.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-openapi/jsonpointer v0.20.0 // indirect
- github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.4 // indirect
- github.com/go-redis/redis/v7 v7.4.1 // indirect
- github.com/go-resty/resty/v2 v2.7.0 // indirect
- github.com/go-sql-driver/mysql v1.7.1 // indirect
+ github.com/go-openapi/jsonpointer v0.20.2 // indirect
+ github.com/go-openapi/jsonreference v0.20.4 // indirect
+ github.com/go-openapi/swag v0.22.9 // indirect
+ github.com/go-resty/resty/v2 v2.11.0 // indirect
+ github.com/go-sql-driver/mysql v1.8.1 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/go-zookeeper/zk v1.0.3 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/goccy/go-json v0.10.2 // indirect
- github.com/gocql/gocql v1.3.2 // indirect
+ github.com/gocql/gocql v1.6.0 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/godbus/dbus/v5 v5.1.0 // indirect
- github.com/gofrs/uuid v4.2.0+incompatible // indirect
+ github.com/gofrs/uuid v4.4.0+incompatible // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
- github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
- github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe // indirect
+ github.com/golang-jwt/jwt/v5 v5.2.1 // indirect
+ github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect
github.com/golang-sql/sqlexp v0.1.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
- github.com/google/cadvisor v0.48.1 // indirect
- github.com/google/flatbuffers v23.1.21+incompatible // indirect
+ github.com/google/cadvisor v0.49.0 // indirect
+ github.com/google/flatbuffers v23.5.26+incompatible // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/s2a-go v0.1.7 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
- github.com/googleapis/gax-go/v2 v2.12.0 // indirect
- github.com/gophercloud/gophercloud v1.7.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.3 // indirect
+ github.com/gophercloud/gophercloud v1.8.0 // indirect
github.com/gorilla/mux v1.8.1 // indirect
- github.com/gorilla/websocket v1.5.0 // indirect
- github.com/gosnmp/gosnmp v1.35.0 // indirect
- github.com/grafana/loki/pkg/push v0.0.0-20230321110627-5c3d204ebf5d // indirect
+ github.com/gorilla/websocket v1.5.1 // indirect
+ github.com/gosnmp/gosnmp v1.37.0 // indirect
+ github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37 // indirect
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect
- github.com/grobie/gomemcache v0.0.0-20180201122607-1f779c573665 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
+ github.com/grobie/gomemcache v0.0.0-20230213081705-239240bbc445 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
- github.com/hashicorp/consul/api v1.25.1 // indirect
+ github.com/hashicorp/consul/api v1.28.2 // indirect
github.com/hashicorp/cronexpr v1.1.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
- github.com/hashicorp/go-hclog v1.5.0 // indirect
+ github.com/hashicorp/go-hclog v1.6.3 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.4 // indirect
@@ -442,181 +457,189 @@ require (
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/golang-lru/v2 v2.0.7 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
- github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c // indirect
+ github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 // indirect
github.com/hashicorp/serf v0.10.1 // indirect
- github.com/hetznercloud/hcloud-go/v2 v2.4.0 // indirect
+ github.com/hetznercloud/hcloud-go/v2 v2.6.0 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 // indirect
+ github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 // indirect
github.com/influxdata/influxdb-observability/common v0.5.8 // indirect
github.com/influxdata/influxdb-observability/influx2otel v0.5.8 // indirect
github.com/influxdata/influxdb-observability/otel2influx v0.5.8 // indirect
github.com/influxdata/line-protocol/v2 v2.2.1 // indirect
- github.com/ionos-cloud/sdk-go/v6 v6.1.9 // indirect
+ github.com/ionos-cloud/sdk-go/v6 v6.1.11 // indirect
github.com/jackc/chunkreader/v2 v2.0.1 // indirect
- github.com/jackc/pgconn v1.14.0 // indirect
+ github.com/jackc/pgconn v1.14.3 // indirect
github.com/jackc/pgio v1.0.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
- github.com/jackc/pgproto3/v2 v2.3.2 // indirect
+ github.com/jackc/pgproto3/v2 v2.3.3 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/pgtype v1.14.0 // indirect
- github.com/jackc/pgx/v4 v4.18.1 // indirect
- github.com/jaegertracing/jaeger v1.48.0 // indirect
+ github.com/jackc/pgx/v4 v4.18.3 // indirect
+ github.com/jaegertracing/jaeger v1.55.0 // indirect
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
github.com/jcmturner/gofork v1.7.6 // indirect
+ github.com/jcmturner/goidentity/v6 v6.0.1 // indirect
github.com/jcmturner/gokrb5/v8 v8.4.4 // indirect
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
- github.com/jellydator/ttlcache/v3 v3.1.0 // indirect
+ github.com/jellydator/ttlcache/v3 v3.2.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/karrick/godirwalk v1.17.0 // indirect
- github.com/klauspost/asmfmt v1.3.2 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
- github.com/klauspost/cpuid/v2 v2.2.3 // indirect
+ github.com/klauspost/compress v1.17.8 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.5 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect
github.com/kr/fs v0.1.0 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 // indirect
github.com/leoluk/perflib_exporter v0.2.1 // indirect
+ github.com/lestrrat-go/strftime v1.0.6 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/lightstep/go-expohisto v1.0.0 // indirect
github.com/linkedin/goavro/v2 v2.9.8 // indirect
- github.com/linode/linodego v1.23.0 // indirect
- github.com/logicmonitor/lm-data-sdk-go v1.0.0 // indirect
+ github.com/linode/linodego v1.30.0 // indirect
+ github.com/logicmonitor/lm-data-sdk-go v1.3.0 // indirect
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
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-ieproxy v0.0.1 // indirect
+ github.com/mattn/go-ieproxy v0.0.11 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
- github.com/mattn/go-sqlite3 v1.14.18 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
+ github.com/mattn/go-sqlite3 v1.14.22 // indirect
github.com/microsoft/ApplicationInsights-Go v0.4.4 // indirect
- github.com/miekg/dns v1.1.56 // indirect
- github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect
- github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
+ github.com/microsoft/go-mssqldb v1.7.0 // indirect
+ github.com/miekg/dns v1.1.58 // indirect
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
+ github.com/mitchellh/go-ps v1.0.0 // indirect
github.com/mitchellh/hashstructure v1.1.0 // indirect
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
+ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/moby/sys/mountinfo v0.6.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/mongodb-forks/digest v1.0.5 // indirect
+ github.com/mongodb-forks/digest v1.1.0 // indirect
github.com/montanaflynn/stats v0.7.0 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/mrunalp/fileutils v0.5.1 // indirect
github.com/mtibben/percent v0.2.1 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
- github.com/nginxinc/nginx-prometheus-exporter v0.8.1-0.20201110005315-f5a5f8086c19 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/containerinsight v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/k8s v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/metrics v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl 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/resourcetotelemetry v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/loki v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/skywalking v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/winperfcounters v0.89.0 // indirect
+ github.com/nginxinc/nginx-prometheus-exporter v0.11.0 // indirect
+ github.com/oklog/ulid/v2 v2.1.0 // indirect
+ github.com/open-telemetry/opamp-go v0.14.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/observer v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/containerinsight v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/k8s v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/metrics v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/collectd v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/kubelet v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/sqlquery v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/azure v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/loki v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/skywalking v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/winperfcounters v0.98.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/opencontainers/runc v1.1.12 // indirect
- github.com/opencontainers/runtime-spec v1.1.0-rc.3 // indirect
- github.com/opencontainers/selinux v1.11.0 // indirect
+ github.com/opencontainers/runtime-spec v1.1.0 // indirect
+ github.com/opencontainers/selinux v1.10.1 // indirect
+ github.com/opensearch-project/opensearch-go/v2 v2.3.0 // indirect
github.com/openshift/api v3.9.0+incompatible // indirect
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/openzipkin/zipkin-go v0.4.2 // indirect
github.com/outcaste-io/ristretto v0.2.1 // indirect
github.com/ovh/go-ovh v1.4.3 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
- github.com/paulmach/orb v0.10.0 // indirect
- github.com/pelletier/go-toml/v2 v2.0.8 // indirect
+ github.com/paulmach/orb v0.11.1 // indirect
+ github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/philhofer/fwd v1.1.2 // indirect
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
- github.com/pierrec/lz4/v4 v4.1.18 // indirect
- github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
+ github.com/pierrec/lz4/v4 v4.1.21 // indirect
+ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
- github.com/pkg/sftp v1.13.5 // indirect
+ github.com/pkg/sftp v1.13.6 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
github.com/pquerna/cachecontrol v0.1.0 // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.52.2 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
- github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
+ github.com/prometheus/procfs v0.13.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
- github.com/relvacode/iso8601 v1.3.0 // indirect
+ github.com/redis/go-redis/v9 v9.5.1 // indirect
+ github.com/relvacode/iso8601 v1.4.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- github.com/samber/lo v1.37.0 // indirect
- github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21 // indirect
- github.com/scalyr/dataset-go v0.14.0 // indirect
+ github.com/sagikazarmark/locafero v0.4.0 // indirect
+ github.com/sagikazarmark/slog-shim v0.1.0 // indirect
+ github.com/samber/lo v1.38.1 // indirect
+ github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 // indirect
+ github.com/scalyr/dataset-go v0.18.0 // indirect
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 // indirect
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
github.com/segmentio/asm v1.2.0 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3 // indirect
- github.com/signalfx/sapm-proto v0.13.0 // indirect
- github.com/sijms/go-ora/v2 v2.7.20 // indirect
+ github.com/signalfx/sapm-proto v0.14.0 // indirect
+ github.com/sijms/go-ora/v2 v2.8.11 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
- github.com/snowflakedb/gosnowflake v1.6.25 // indirect
+ github.com/snowflakedb/gosnowflake v1.9.0 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
+ github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
- github.com/spf13/afero v1.9.5 // indirect
- github.com/spf13/cast v1.5.1 // indirect
+ github.com/spf13/afero v1.11.0 // indirect
+ github.com/spf13/cast v1.6.0 // indirect
github.com/spf13/cobra v1.8.0 // indirect
- github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/spf13/viper v1.16.0 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
- github.com/subosito/gotenv v1.4.2 // indirect
+ github.com/spf13/viper v1.18.2 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
+ github.com/subosito/gotenv v1.6.0 // indirect
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
- github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.792 // indirect
- github.com/tg123/go-htpasswd v1.2.1 // indirect
- github.com/tidwall/gjson v1.10.2 // indirect
+ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.896 // indirect
+ github.com/tg123/go-htpasswd v1.2.2 // indirect
+ github.com/tidwall/gjson v1.14.2 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/tidwall/tinylru v1.1.0 // indirect
@@ -625,110 +648,113 @@ require (
github.com/tinylib/msgp v1.1.9 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
+ github.com/valyala/fastjson v1.6.4 // indirect
github.com/vincent-petithory/dataurl v1.0.0 // indirect
github.com/vishvananda/netlink v1.2.1-beta.2 // indirect
- github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f // indirect
- github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f // indirect
- github.com/vmware/govmomi v0.33.1 // indirect
+ github.com/vishvananda/netns v0.0.4 // indirect
+ github.com/vmware/go-vmware-nsxt v0.0.0-20230223012718-d31b8a1ca05e // indirect
+ github.com/vmware/govmomi v0.36.3 // indirect
github.com/vultr/govultr/v2 v2.17.2 // indirect
- github.com/wavefronthq/wavefront-sdk-go v0.15.0 // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.1.2 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
github.com/zeebo/xxh3 v1.0.2 // indirect
- go.etcd.io/bbolt v1.3.8 // indirect
- go.mongodb.org/atlas v0.35.0 // indirect
- go.mongodb.org/mongo-driver v1.13.0 // indirect
+ go.etcd.io/bbolt v1.3.9 // indirect
+ go.mongodb.org/atlas v0.36.0 // indirect
+ go.mongodb.org/mongo-driver v1.14.0 // indirect
go.opencensus.io v0.24.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/confighttp v0.89.0 // indirect
- go.opentelemetry.io/collector/config/confignet v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal 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/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.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 v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/contrib/zpages v0.50.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/trace v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/crypto v0.16.0 // indirect
- golang.org/x/exp v0.0.0-20231127185646-65229373498e // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.19.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sync v0.5.0 // indirect
- golang.org/x/term v0.15.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/crypto v0.22.0 // indirect
+ golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- golang.org/x/tools v0.16.0 // indirect
- golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/api v0.150.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.19.0 // indirect
+ golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/api v0.172.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.2 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
- gopkg.in/square/go-jose.v2 v2.5.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 // indirect
- k8s.io/api v0.28.4 // indirect
- k8s.io/apimachinery v0.28.4 // indirect
- k8s.io/client-go v0.28.4 // indirect
- k8s.io/klog v1.0.0 // indirect
- k8s.io/klog/v2 v2.100.1 // indirect
- k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
- k8s.io/kubelet v0.28.3 // indirect
- k8s.io/utils v0.0.0-20230711102312-30195339c3c7 // indirect
- sigs.k8s.io/controller-runtime v0.16.3 // indirect
+ k8s.io/api v0.30.0 // indirect
+ k8s.io/apimachinery v0.30.0 // indirect
+ k8s.io/client-go v0.30.0 // indirect
+ k8s.io/klog/v2 v2.120.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
+ k8s.io/kubelet v0.30.0 // indirect
+ k8s.io/utils v0.0.0-20240102154912-e7106e64919e // indirect
+ sigs.k8s.io/controller-runtime v0.17.3 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
- sigs.k8s.io/yaml v1.3.0 // indirect
- skywalking.apache.org/repo/goapi v0.0.0-20231026090926-09378dd56587 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
+ sigs.k8s.io/yaml v1.4.0 // indirect
+ skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4 // indirect
)
replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/dbstorage => ../../extension/storage/dbstorage
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage => ../../extension/storage/filestorage
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal => ../../pkg/batchpersignal
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs => ../../internal/aws/cwlogs
-replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter => ../../exporter/f5cloudexporter
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/awsxrayreceiver => ../../receiver/awsxrayreceiver
@@ -781,8 +807,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbyattrsprocessor => ../../processor/groupbyattrsprocessor
-replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter => ../../exporter/tanzuobservabilityexporter
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter => ../../exporter/skywalkingexporter
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter => ../../exporter/mezmoexporter
@@ -825,6 +849,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/aeros
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/cumulativetodeltaprocessor => ../../processor/cumulativetodeltaprocessor
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/intervalprocessor => ../../processor/intervalprocessor
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver => ../../receiver/sapmreceiver
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver => ../../receiver/zipkinreceiver
@@ -847,8 +873,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/stats
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter => ../../exporter/prometheusremotewriteexporter
-replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor => ../../processor/servicegraphprocessor
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/groupbytraceprocessor => ../../processor/groupbytraceprocessor
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tencentcloudlogserviceexporter => ../../exporter/tencentcloudlogserviceexporter
@@ -913,6 +937,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/basi
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter => ../../exporter/influxdbexporter
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter => ../../exporter/alertmanagerexporter
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter => ../../exporter/alibabacloudlogserviceexporter
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger => ../../pkg/translator/jaeger
@@ -985,8 +1011,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/filte
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/activedirectorydsreceiver => ../../receiver/activedirectorydsreceiver
-replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanmetricsprocessor => ../../processor/spanmetricsprocessor
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/routingprocessor => ../../processor/routingprocessor
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/deltatorateprocessor => ../../processor/deltatorateprocessor
@@ -1009,8 +1033,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver => ../../receiver/filelogreceiver
-replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filereceiver => ../../receiver/filereceiver
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter => ../../exporter/signalfxexporter
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/solacereceiver => ../../receiver/solacereceiver
@@ -1029,6 +1051,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden =>
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter => ../../exporter/opencensusexporter
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter => ../../exporter/opensearchexporter
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders => ../../internal/metadataproviders
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/proxy => ../../internal/aws/proxy
@@ -1049,7 +1073,7 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apach
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/apachesparkreceiver => ../../receiver/apachesparkreceiver
-replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarder => ../../extension/httpforwarder
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/httpforwarderextension => ../../extension/httpforwarderextension
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter => ../../exporter/elasticsearchexporter
@@ -1091,14 +1115,14 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumol
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter => ../../exporter/instanaexporter
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter => ../../exporter/honeycombmarkerexporter
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver => ../../receiver/otlpjsonfilereceiver
replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/redactionprocessor => ../../processor/redactionprocessor
replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/jaegerremotesampling => ../../extension/jaegerremotesampling
-replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/datadogprocessor => ../../processor/datadogprocessor
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sshcheckreceiver => ../../receiver/sshcheckreceiver
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/datadogreceiver => ../../receiver/datadogreceiver
@@ -1143,6 +1167,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/connector/data
replace github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector => ../../connector/exceptionsconnector
+replace github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector => ../../connector/grafanacloudconnector
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector => ../../connector/routingconnector
replace github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector => ../../connector/servicegraphconnector
@@ -1166,3 +1192,27 @@ replace github.com/amazon-contributing/opentelemetry-collector-contrib/override/
replace github.com/go-kit/kit => github.com/go-kit/kit v0.12.0
replace go.mongodb.org/mongo-driver => go.mongodb.org/mongo-driver v1.12.1
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding => ../../extension/encoding
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension => ../../extension/encoding/otlpencodingextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/zipkinencodingextension => ../../extension/encoding/zipkinencodingextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jsonlogencodingextension => ../../extension/encoding/jsonlogencodingextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/textencodingextension => ../../extension/encoding/textencodingextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/jaegerencodingextension => ../../extension/encoding/jaegerencodingextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/remotetapextension => ../../extension/remotetapextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/opampextension => ../../extension/opampextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/solarwindsapmsettingsextension => ../../extension/solarwindsapmsettingsextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/sumologicextension => ../../extension/sumologicextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver => ../../receiver/namedpipereceiver
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/sqlquery => ../../internal/sqlquery
diff --git a/cmd/otelcontribcol/go.sum b/cmd/otelcontribcol/go.sum
index 8446157298af..49c7d9aed063 100644
--- a/cmd/otelcontribcol/go.sum
+++ b/cmd/otelcontribcol/go.sum
@@ -1,11 +1,10 @@
-bitbucket.org/atlassian/go-asap/v2 v2.6.0 h1:KiLw3IgbzFLqNxCrVZoKUDJKMxUGoOd+NEOYXGEBhJ0=
-bitbucket.org/atlassian/go-asap/v2 v2.6.0/go.mod h1:cuRgWb7eeGtsocKmqY2kPlMMlwpkeNh+QOIkjAMlUBc=
+bitbucket.org/atlassian/go-asap/v2 v2.8.0 h1:JL4jktrZT3H8GHkkeJ1RCdhJ5YcOyVccA/2TJ4ae3I0=
+bitbucket.org/atlassian/go-asap/v2 v2.8.0/go.mod h1:cuRgWb7eeGtsocKmqY2kPlMMlwpkeNh+QOIkjAMlUBc=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
@@ -18,49 +17,47 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
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.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
-cloud.google.com/go v0.111.0 h1:YHLKNupSD1KqjDbQ3+LVdQ81h/UJbJyZG203cEfnQgM=
-cloud.google.com/go v0.111.0/go.mod h1:0mibmpKP1TyOOFYQY5izo0LnT+ecvOQ0Sg3OdmMiNRU=
+cloud.google.com/go v0.112.2 h1:ZaGT6LiG7dBzi6zNOvVZwacaXlmf3lRqnC4DQzqyRQw=
+cloud.google.com/go v0.112.2/go.mod h1:iEqjp//KquGIJV/m+Pk3xecgKNhV+ry+vVTsy4TbDms=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute v1.23.2 h1:nWEMDhgbBkBJjfpVySqU4jgWdc22PLR0o4vEexZHers=
-cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
-cloud.google.com/go/iam v1.1.4 h1:K6n/GZHFTtEoKT5aUG3l9diPi0VduZNQ1PfdnpkkIFk=
-cloud.google.com/go/iam v1.1.4/go.mod h1:l/rg8l1AaA+VFMho/HYx2Vv6xinPSLMF8qfhRPIZ0L8=
-cloud.google.com/go/logging v1.8.1 h1:26skQWPeYhvIasWKm48+Eq7oUqdcdbwsCVwz5Ys0FvU=
-cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI=
-cloud.google.com/go/longrunning v0.5.3 h1:maKa7O9YTzmVzwdlRKr981U1Ys2auup6rpeMt8y3+RU=
-cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y=
-cloud.google.com/go/monitoring v1.16.2 h1:gx7BDZcoRqX5DfuJzw9LdhVjEkqCLmDXScdnrmIy9ik=
-cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc=
+cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=
+cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=
+cloud.google.com/go/logging v1.9.0 h1:iEIOXFO9EmSiTjDmfpbRjOxECO7R8C7b8IXUGOj7xZw=
+cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE=
+cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg=
+cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s=
+cloud.google.com/go/monitoring v1.18.0 h1:NfkDLQDG2UR3WYZVQE8kwSbUIEyIqJUPl+aOQdFH1T4=
+cloud.google.com/go/monitoring v1.18.0/go.mod h1:c92vVBCeq/OB4Ioyo+NbN2U7tlg5ZH41PZcdvfc+Lcg=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/pubsub v1.33.0 h1:6SPCPvWav64tj0sVX/+npCBKhUi/UjJehy9op/V3p2g=
-cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc=
-cloud.google.com/go/spanner v1.51.0 h1:l3exhhsVMKsx1E7Xd1QajYSvHmI1KZoWPW5tRxIIdvQ=
-cloud.google.com/go/spanner v1.51.0/go.mod h1:c5KNo5LQ1X5tJwma9rSQZsXNBDNvj4/n8BVc3LNahq0=
+cloud.google.com/go/pubsub v1.37.0 h1:0uEEfaB1VIJzabPpwpZf44zWAKAme3zwKKxHk7vJQxQ=
+cloud.google.com/go/pubsub v1.37.0/go.mod h1:YQOQr1uiUM092EXwKs56OPT650nwnawc+8/IjoUeGzQ=
+cloud.google.com/go/spanner v1.60.0 h1:O9kf49dfaDRzPpKJNChHUJ+Bao02WPedZb8ZPyi02lI=
+cloud.google.com/go/spanner v1.60.0/go.mod h1:D2bOAeT/dC6zsZhXRIxbdYa5nQEYU3wYM/1KN3eg7Fs=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
-cloud.google.com/go/trace v1.10.3 h1:yiQ2EdegdiZDPwNPoUqGYAMd0wNValT/NRsC1XGyBJ0=
-cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY=
+cloud.google.com/go/trace v1.10.5 h1:0pr4lIKJ5XZFYD9GtxXEWr0KkVeigc3wlGpZco0X1oA=
+cloud.google.com/go/trace v1.10.5/go.mod h1:9hjCV1nGBCtXbAE4YK7OqJ8pmPYSxPA0I67JwRd5s3M=
code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c h1:5eeuG0BHx1+DHeT3AP+ISKZ2ht1UjGhm581ljqYpVeQ=
code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c/go.mod h1:QD9Lzhd/ux6eNQVUDVRJX/RKTigpewimNYBi7ivZKY8=
code.cloudfoundry.org/go-diodes v0.0.0-20211115184647-b584dd5df32c h1:N2GMlHc/SJQk7BkaME/kDHaciVTy4NuRmxVJLhnqKK8=
@@ -69,10 +66,11 @@ code.cloudfoundry.org/go-loggregator v7.4.0+incompatible h1:KqZYloMQWM5Zg/BQKunO
code.cloudfoundry.org/go-loggregator v7.4.0+incompatible/go.mod h1:KPBTRqj+y738Nhf1+g4JHFaBU8j7dedirR5ETNHvMXU=
code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78 h1:mrZQaZmuDIPhSp6b96b+CRKC2uH44ifa5cjDV2epKis=
code.cloudfoundry.org/rfc5424 v0.0.0-20201103192249-000122071b78/go.mod h1:tkZo8GtzBjySJ7USvxm4E36lNQw1D3xM6oKHGqdaAJ4=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
+filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs=
github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4=
github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU=
@@ -82,42 +80,47 @@ github.com/AthenZ/athenz v1.10.39 h1:mtwHTF/v62ewY2Z5KWhuZgVXftBej1/Tn80zx4DcawY
github.com/AthenZ/athenz v1.10.39/go.mod h1:3Tg8HLsiQZp81BJY58JBeU2BR6B/H4/0MQGfCwhHNEA=
github.com/Azure/azure-amqp-common-go/v4 v4.2.0 h1:q/jLx1KJ8xeI8XGfkOWMN9XrXzAfVTkyvCxPvHCjd2I=
github.com/Azure/azure-amqp-common-go/v4 v4.2.0/go.mod h1:GD3m/WPPma+621UaU6KNjKEo5Hl09z86viKwQjTpV0Q=
-github.com/Azure/azure-event-hubs-go/v3 v3.6.1 h1:vSiMmn3tOwgiLyfnmhT5K6Of/3QWRLaaNZPI0hFvZyU=
-github.com/Azure/azure-event-hubs-go/v3 v3.6.1/go.mod h1:i2NByb9Pr2na7y8wi/XefEVKkuA2CDUjCNoWQJtTsGo=
-github.com/Azure/azure-kusto-go v0.13.1 h1:0w4CmUTROT8qbLbKq921PhCb7mIfRFWeDu4iJxrNEOM=
-github.com/Azure/azure-kusto-go v0.13.1/go.mod h1:AyWTO0r50y7rAkxkTveLtn80njNyXpJP5WADvoSZ/P4=
+github.com/Azure/azure-event-hubs-go/v3 v3.6.2 h1:7rNj1/iqS/i3mUKokA2n2eMYO72TB7lO7OmpbKoakKY=
+github.com/Azure/azure-event-hubs-go/v3 v3.6.2/go.mod h1:n+ocYr9j2JCLYqUqz9eI+lx/TEAtL/g6rZzyTFSuIpc=
+github.com/Azure/azure-kusto-go v0.15.2 h1:OlABJilic9TythSgWW6i8Fd0SgNTg0t9jBu6WVsaixM=
+github.com/Azure/azure-kusto-go v0.15.2/go.mod h1:9F2zvXH8B6eWzgI1S4k1ZXAIufnBZ1bv1cW1kB1n3D0=
github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0 h1:9kDVnTz3vbfweTqAUmk/a/pH5pWFCHtvRpHYC0G/dcA=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.8.0/go.mod h1:3Ug6Qzto9anB6mGlEdgYMDF5zHQ+wwhEaYR4s17PHMw=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs=
-github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1 h1:UPeCRD+XY7QlaGQte2EVI2iOcWvUYA2XY8w5T/8v0NQ=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v4 v4.2.1/go.mod h1:oGV6NlB0cvi1ZbYRR2UN44QHxWFyGk+iylgD0qaMXjA=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal v1.1.2 h1:mLY+pNLjCUeKhgnAJWAKhEUQM+RJQo2H1fuGSw1Ky1E=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.8.0 h1:dKxKBzh+XIEoYNmx/c8HeiwghuRExXf61WmVotWESeA=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.8.0/go.mod h1:kzRLpzzlw6eBUXE7eBw3oqfmKR/kxaHOk4+h9sAe6Yo=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 h1:QM6sE5k2ZT/vI5BEe0r7mqjsUSnhVBFbOsVkEuaEfiA=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1 h1:bWh0Z2rOEDfB/ywv/l0iHN1JgyazE6kW/aIA89+CEK0=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v2 v2.2.1/go.mod h1:Bzf34hhAE9NSxailk8xVeLEZbUjOXcC+GnU1mMKdhLw=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0 h1:ECsQtyERDVz3NP3kvDOTLvbQhqWp/x9EsGKtb4ogUr8=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.0.0/go.mod h1:s1tW/At+xHqjNFvWU4G0c0Qv33KOhvbGNj0RCTQDV8s=
-github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8=
-github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY=
-github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4=
-github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo=
-github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8=
-github.com/Azure/go-amqp v1.0.2 h1:zHCHId+kKC7fO8IkwyZJnWMvtRXhYC0VJtD0GYkHc6M=
-github.com/Azure/go-amqp v1.0.2/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1 h1:E+OJmp2tPvt1W+amx48v1eqbjDYsgN+RzP4q16yV5eM=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.11.1/go.mod h1:a6xsAQUZg+VsS3TJ05SRp524Hs4pZ/AeFSr5ENf0Yjo=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2 h1:FDif4R1+UUR+00q6wquyX90K7A8dN+R5E8GEadoP7sU=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.2/go.mod h1:aiYBYui4BJ/BJCAIKs92XiPyQfTaBWqvHujDwKb6CBU=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0 h1:pPvTJ1dY0sA35JOeFq6TsY2xj6Z85Yo23Pj4wCCvu4o=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/managementgroups/armmanagementgroups v1.0.0/go.mod h1:mLfWfj8v3jfWKsL9G4eoBoXVcsqcIUTapmdKy7uGOp0=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0 h1:Ds0KRF8ggpEGg4Vo42oX1cIt/IfOhHWJBikksZbVxeg=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/monitor/armmonitor v0.11.0/go.mod h1:jj6P8ybImR+5topJ+eH6fgcemSFBmU6/6bFF8KkwuDI=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0 h1:AifHbc4mg0x9zW52WOpKbsHaDKuRhlI7TVl47thgQ70=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0/go.mod h1:T5RfihdXtBDxt1Ch2wobif3TvzTdumDy29kahv6AV9A=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1 h1:MyVTgWR8qd/Jw1Le0NZebGBUCLbtak3bJ3z1OlqZBpw=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azkeys v1.0.1/go.mod h1:GpPjLhVR9dnUoJMyHWSPy71xY9/lcmpzIPZXmF0FCVY=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0 h1:D3occbWoio4EBLkbkevetNMAVX197GkzbUMtqjGWn80=
+github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.0.0/go.mod h1:bTSOgj05NGRuHHhQwAdPnYr9TOdNmKlZTgGLL6nyAdI=
+github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2 h1:YUUxeiOWgdAQE3pXt2H7QXzZs0q8UBjgRbl56qo8GYM=
+github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.3.2/go.mod h1:dmXQgZuiSubAecswZE+Sm8jkvEa7kQgTPVRvwL/nd0E=
+github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe h1:HGuouUM1533rBXmMtR7qh5pYNSSjUZG90b/MgJAnb/A=
+github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8=
+github.com/Azure/go-amqp v1.0.5 h1:po5+ljlcNSU8xtapHTe8gIc8yHxCzC03E8afH2g1ftU=
+github.com/Azure/go-amqp v1.0.5/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
+github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
@@ -128,7 +131,9 @@ github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI
github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8=
github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c=
github.com/Azure/go-autorest/autorest/azure/auth v0.4.2 h1:iM6UAvjR97ZIeR93qTcwpKNMpV+/FTWjwEbuPD495Tk=
+github.com/Azure/go-autorest/autorest/azure/auth v0.4.2/go.mod h1:90gmfKdlmKgfjUpnCEpOJzsUEjrWDSLwHIG73tSXddM=
github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U=
+github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw=
github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
@@ -143,89 +148,93 @@ github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+Z
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 h1:XHOnouVk1mxXfQidrMEnLlPk9UMeRtyBTnEFtxkV0kU=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/ClickHouse/ch-go v0.58.2 h1:jSm2szHbT9MCAB1rJ3WuCJqmGLi5UTjlNu+f530UTS0=
-github.com/ClickHouse/ch-go v0.58.2/go.mod h1:Ap/0bEmiLa14gYjCiRkYGbXvbe8vwdrfTYWhsuQ99aw=
-github.com/ClickHouse/clickhouse-go/v2 v2.15.0 h1:G0hTKyO8fXXR1bGnZ0DY3vTG01xYfOGW76zgjg5tmC4=
-github.com/ClickHouse/clickhouse-go/v2 v2.15.0/go.mod h1:kXt1SRq0PIRa6aKZD7TnFnY9PQKmc2b13sHtOYcK6cQ=
-github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
-github.com/DataDog/agent-payload/v5 v5.0.89 h1:uuLWf/exyNYBnheG9OH2dOWZpCJvaEHX3W9CAd8KarU=
-github.com/DataDog/agent-payload/v5 v5.0.89/go.mod h1:oQZi1VZp1e3QvlSUX4iphZCpJaFepUxWq0hNXxihKBM=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 h1:W6IVI3zWwoJGcFagJ/kwltFL1IIErBZzcBy994PQsQE=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1/go.mod h1:A4nLJvxlg6BO/8/zg81til9yT0uRPuXDFMAzDMpmgn4=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1 h1:zDhs0MnT72cZOxxbPjkGI00NMYgsydOanBX3GZHuS1I=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1/go.mod h1:HvK26YCxg6MfYvPJgpHC7nSjw6DTpNhd75Wlb0GAvis=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 h1:EywptZStgHbDWLScnHfaCj6QNb698DY68pCnPEQrsts=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1 h1:A1uj4IMFs4rWp5LRalsqqnoC1f7QuYuN/b6/L7k4KCc=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1/go.mod h1:Q84EzSKpY/HtasusZM4ZPuYqbPQEbmIcAGzd7tXUX1I=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 h1:iJSVz+YsndcMA/yYNih/qmuvwD1AR7IYX0cXXePpeys=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1/go.mod h1:JUOECuM5XcoxjEPs30C568vGBWtqScjnsC2KXY1OQ7Y=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 h1:NK2kcRdv/r0WycAlGD2JFSmOcNvazzilPvZzk3l105g=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1/go.mod h1:RMBDVajNx78CpFHnbat0aIGcwVQZp8s+smRlcJkvZGg=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 h1:SgaCKuX9e3O5eLRIr+zqW1dlIw/TP3RDKQZUa2FfF8c=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1/go.mod h1:eTXti9mx7qhkoi+Qg3mMmvVY5McghUUgsf4Hrk9zY8k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 h1:aCDYC/AkDS/EOm4GV1bFmiev6pTt+Qjj1yGBJv8U7+k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1/go.mod h1:EOGgNrSPskIxY3+KgCl+yEggMjrGqrA2oL5va+/p2jM=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0 h1:QkX1vY1JtvDeF6N6EarPrJMHlerVGdTvGQOUWqfeVDs=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0/go.mod h1:lHlfhsNQ2qZclvpVQTfrGowUDIdIzAao38A05f9EQpc=
+github.com/ClickHouse/ch-go v0.61.5 h1:zwR8QbYI0tsMiEcze/uIMK+Tz1D3XZXLdNrlaOpeEI4=
+github.com/ClickHouse/ch-go v0.61.5/go.mod h1:s1LJW/F/LcFs5HJnuogFMta50kKDO0lf9zzfrbl0RQg=
+github.com/ClickHouse/clickhouse-go/v2 v2.23.0 h1:srmRrkS0BR8gEut87u8jpcZ7geOob6nGj9ifrb+aKmg=
+github.com/ClickHouse/clickhouse-go/v2 v2.23.0/go.mod h1:tBhdF3f3RdP7sS59+oBAtTyhWpy0024ZxDMhgxra0QE=
+github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g=
+github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
+github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU=
+github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU=
+github.com/DataDog/agent-payload/v5 v5.0.111 h1:mM+4OBkXF9tjKV0VjwnNO5As9aKcNAEsagvKDSBaTyc=
+github.com/DataDog/agent-payload/v5 v5.0.111/go.mod h1:COngtbYYCncpIPiE5D93QlXDH/3VAKk10jDNwGHcMRE=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae h1:aVo1Uh2WQ8TvgbjqlbDvfP5AcUtnqXUUrc9pVP8MvKc=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:AVPQWekk3h9AOC7+plBlNB68Sy6UIGFoMMVUDeSoNoI=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae h1:b6lU79trCyadhkxhb51jXiqmZaHs1Z0fwWlWKFVCqJ4=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:s6zD4ZvPBta68SBCsCnnbn3VJzoQk5wNd0VJOpB84Ug=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae h1:/vfuF60+5qeGM62IDG1F6Asfa1VGAohiQVivRo9TWoo=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:JhAilx32dkIgoDkFXquCTfaWDsAOfe+vfBaxbiZoPI0=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae h1:B1E9jVLpw+Hrcv9ggzCridX3YMeUmZBE3zHghdwfTSc=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:1FTu8gSg8Pd8DVgRfxlcPN4F+d8K7A3lbMCT84FX44Y=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae h1:GL9JPEUyKDH2brURt09llrqWBmExCuqbHeWucezZ6sY=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:OnkC+HYj+NU9dmowWVtFpmnA4wVVibejbzID7TNm7jA=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae h1:sUEteYos3JjJJB1+A9inYJ3uzM18t9cygjSs0cik8x4=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:z4lpju3fhDa8JcbXxU0Bc6A6ci8xoQMuxDXbBdf4gHw=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae h1:qveAzof7ZZXvm93FL7h5mRM8B4q9w14g2fx6wcZt88k=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:HgJEYNmnFTKIuBhWxYe1coqmzoJXMxQTfK+4wIG5G1Q=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae h1:YZz6I8ym9P4MLytAdAJlafF3tgItgAGZrDqe4otbVUk=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:EVETfdJCkqy0YEvSpQd9LZdcYQ7vrUomCm+bQ6h3lc4=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0 h1:7G+eyezFM8gHq5dOHcrQcGVxrXnwPqX2yYHxsLiq3iM=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0/go.mod h1:QKOu6vscsh87fMY1lHfLEmNSunyXImj8BUaUWJXOehc=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
-github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5TltWcLMU=
-github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E=
-github.com/DataDog/go-sqllexer v0.0.8 h1:vfC8R9PhmJfeOKcFYAX9UOd890A3wu3KrjU9Kr7nM0E=
-github.com/DataDog/go-sqllexer v0.0.8/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
+github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU=
+github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
+github.com/DataDog/go-sqllexer v0.0.9 h1:Cx2Cu1S0hfj4coCCA8hzjM9+UNFRkcu1avIV//RU5Qw=
+github.com/DataDog/go-sqllexer v0.0.9/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I=
github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc h1:gtlKB6B50/UEuFm1LeMn0R5a+tubx69OecPqxfXJDmU=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc/go.mod h1:oyPC4jWHHjVVNjslDAKp8EqfQBaSmODjHt4HCX+C+9Q=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1 h1:16YkGLmeJH830m3dG0owtdSMXDkmTZdRd1EWZ1XIO6M=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1/go.mod h1:re1FCVuKWovntr4bODIUe+iYT2Al0gbS0WK726XLz7w=
-github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.8.1 h1:0GyngySyxePf1RozAdm8p51uxT/kDsxqhzWPZGNrqVg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 h1:ly/egks++IqejMVPcp0OWV1fcL+Nsq4EHF48AAQPKu4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1/go.mod h1:8jOAAH5PrNN6zICpu65M7mNPAeOQsW5Wk/sq80txutA=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1 h1:UizDxaGWPDNzR2orQTE9poYyP09B2OhlaeiY5vdr+EU=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1/go.mod h1:2043mFAA2cD68ilZ93/5zZfL9BxWwj8z9sleaw3rtiY=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 h1:TbZDzUrW8iahevDY5Xw+j1EfrX8XZdeg/M6UYBl9mxg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1/go.mod h1:nVIKiAwP/Zd8IFxeHhEAiirJRH1kOOoZ315HQeSEkng=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 h1:4cyzwoXrnjElTIlsFbpyXQkAJs3+6ly9HExOu9lrup4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1/go.mod h1:3AEt8/uCtbpzjPOPPxIBDcR1qcUq2hBbrkrdE/qNfb0=
-github.com/DataDog/sketches-go v1.4.3 h1:ZB9nijteJRFUQixkQfatCqASartGNfiolIlMiEv3u/w=
-github.com/DataDog/sketches-go v1.4.3/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee h1:tXibLZk3G6HncIFJKaNItsdzcrk4YqILNDZlXPTNt4k=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee/go.mod h1:nTot/Iy0kW16bXgXr6blEc8gFeAS7vTqYlhAxh+dbc0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 h1:PTIZJAsfnr2XLB3V3duL+mSbZvYV8G3XQ9e57KyOuOA=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4/go.mod h1:5yS6i90MEZS3NG+o7PrQQ8i7OaEMzwQvn4bCZ9h9Rao=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4 h1:B2R7Wh791uphpltmorbvvdKk0rJOhoExwM4NnE7hXTg=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4/go.mod h1:Tk2wwdBgWeSvDPtrGGyym8CdVWSuphiToGc/tRvFoNQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 h1:10TPqpTlIkmDPFWVIEZ4ZX3rWrCrx3rEoeoAooZr6LM=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 h1:dU9oPMbAr/wYMNdzhu0pxIhAJOn1Btj1T3ZSyY6RvY0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4/go.mod h1:ud/Xr5TWUopcaGHdkh9RN8lhnCAFa95X16Rb5mrkE18=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 h1:ZuYc5Ql/GSyAEMgpKkbQiHOtIHkEpYujITW1wIVFgLE=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4/go.mod h1:YSntkplFoUM1mepnPeJFsoblqD0Wdi+Avg1/d1upgZQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 h1:t/Zh8ztLDBOMRMiuVNFthWMMG5F4POgc5M6+Y3DTX9g=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4/go.mod h1:JfdBBDreQfbIN5FYrAtZV3VmQMXnf9o4tMbaMxWqe40=
+github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8=
+github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962 h1:KeNholpO2xKjgaaSyd+DyQRrsQjhbSeS7qe4nEw8aQw=
github.com/GehirnInc/crypt v0.0.0-20200316065508-bb7000b8a962/go.mod h1:kC29dT1vFpj7py2OvG1khBdQpo3kInWP+6QipLbdngo=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0 h1:tk85AYGwOf6VNtoOQi8w/kVDi2vmPxp3/OU2FsUpdcA=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0/go.mod h1:Xx0VKh7GJ4si3rmElbh19Mejxz68ibWg/J30ZOMrqzU=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0 h1:jYuZ3VSmHtR/OE4ZNlhgaWefopMKh8kxHMITQ7hXB0s=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0/go.mod h1:b8EPYWl+yGWfPDP2P1slOiJkimNOQMD34szyZt1G0+s=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0 h1:Kim3EFONcbm78LF3B/EPFegmsKtFYBNcoJ89ubBPblw=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0/go.mod h1:wyhLy43DJk49NlzxNhoqF0ueRjS3oBMJc1bjTmyYxiQ=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0 h1:OEgjQy1rH4Fbn5IpuI9d0uhLl+j6DkDvh9Q2Ucd6GK8=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0/go.mod h1:EUfJ8lb3pjD8VasPPwqIvG2XVCE6DOT8tY5tcwbWA+A=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.45.0 h1:/BF7rO6PYcmFoyJrq6HA3LqQpFSQei9aNuO1fvV3OqU=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0 h1:o/Nf55GfyLwGDaHkVAkRGgBXeExce73L6N9w2PZTB3k=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0/go.mod h1:qkFPtMouQjW5ugdHIOthiTbweVHUTqbS0Qsu55KqXks=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 h1:PWcDbDjrcT/ZHLn4Bc/FuglaZZVPP8bWO/YRmJBbe38=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0/go.mod h1:XEK/YHYsi+Wk2Bk1+zi/he+gjRfDWtoIZEZwuwcYjhk=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0 h1:7jymiL7lvmjgG8hMfvZ6qqA39VuiGEmCmFLd0N0tMKY=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0/go.mod h1:w3gKj9vyvd9n8jh2jpOMVLGy87QqB/AxDek2CoRwpt0=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0 h1:kitScZTE4xINfkp7W3duwPe18Jp8OPjm14Ybxgjrp3E=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0/go.mod h1:r+z/vuDdIelQGGJHiVMvNPCW3NiRNpFaeA9OT4L/K/c=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 h1:xl4IRfBXPZxwu7dIza8n6wdX5zEJpi0boF5dX22MbYE=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0/go.mod h1:P69hhmQh4zwnU5iEdGVowFWg1DiP9x2KsCYBOIaP4us=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0 h1:vaXjFX09ygxNxAiHwByzPBVKltYFVZR8HN4U3TR4vn8=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0/go.mod h1:V28hx+cUCZC9e3qcqszMb+Sbt8cQZtHTiXOmyDzoDOg=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 h1:xlfPHZ5QFvHad9KmrVDoaPpJUT/XluwNDMNHn+k7z/s=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0/go.mod h1:mzI44HpPp75Z8/a1sJP1asdHdu7Wui7t10SZ9EEPPnM=
github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo=
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.42.1 h1:wugyWa15TDEHh2kvq2gAy1IHLjEjuYOYgXz/ruC/OSQ=
-github.com/IBM/sarama v1.42.1/go.mod h1:Xxho9HkHd4K/MDUo/T/sOqwtX/17D33++E9Wib6hUdQ=
+github.com/IBM/sarama v1.43.1 h1:Z5uz65Px7f4DhI/jQqEm/tV9t8aU+JUdTyW/K/fCXpA=
+github.com/IBM/sarama v1.43.1/go.mod h1:GG5q1RURtDNPz8xxJs3mgX6Ytak8Z9eLhAkJPObe2xE=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c h1:RGWPOewvKIROun94nF7v2cua9qP+thov/7M50KEoeSU=
github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0=
github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc=
github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs=
-github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
-github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
+github.com/Microsoft/hcsshim v0.12.0-rc.3 h1:5GNGrobGs/sN/0nFO21W9k4lFn+iXXZAE8fCZbmdRak=
+github.com/Microsoft/hcsshim v0.12.0-rc.3/go.mod h1:WuNfcaYNaw+KpCEsZCIM6HCEmu0c5HfXpi+dDSmveP0=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
github.com/Netflix/go-env v0.0.0-20220526054621-78278af1949d h1:wvStE9wLpws31NiWUx+38wny1msZ/tm+eL5xmm4Y7So=
github.com/Netflix/go-env v0.0.0-20220526054621-78278af1949d/go.mod h1:9XMFaCeRyW7fC9XJOWQ+NdAv8VLG7ys7l3x4ozEGLUQ=
@@ -234,10 +243,11 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
github.com/ReneKroon/ttlcache/v2 v2.11.0 h1:OvlcYFYi941SBN3v9dsDcC2N8vRxyHcCmJb3Vl4QMoM=
github.com/ReneKroon/ttlcache/v2 v2.11.0/go.mod h1:mBxvsNY+BT8qLLd6CuAJubbKo6r0jh3nb5et22bbfGY=
-github.com/SAP/go-hdb v1.6.2 h1:sC0OjTEfPnycIktkCDvS7GelaGOiRrhWE0GWUt05QP8=
-github.com/SAP/go-hdb v1.6.2/go.mod h1:xXsEywFErhpCuRVQ3HfjI7H7fPLYPMnMTWa9D5Enx0Q=
-github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2 h1:koK7z0nSsRiRiBWwa+E714Puh+DO+ZRdIyAXiXzL+lg=
+github.com/SAP/go-hdb v1.8.12 h1:F/bpSlPZG0CvVWlTxxiEHGnynA8uILCPoIRoG+iMmkE=
+github.com/SAP/go-hdb v1.8.12/go.mod h1:SNF6129HdtfK0ve8LQIeHEYwNu5CCJr7vXmhA4UbkNw=
github.com/SermoDigital/jose v0.9.2-0.20161205224733-f6df55f235c2/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA=
+github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc h1:MhBvG7RLaLqlyjxMR6of35vt6MVQ+eXMcgn9X/sy0FE=
+github.com/SermoDigital/jose v0.9.2-0.20180104203859-803625baeddc/go.mod h1:ARgCUhI1MHQH+ONky/PAtmVHQrP5JlGY0F3poXOp/fA=
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
github.com/Showmax/go-fqdn v1.0.0 h1:0rG5IbmVliNT5O19Mfuvna9LL7zlHyRfsSvBPZmF9tM=
@@ -249,16 +259,18 @@ github.com/aerospike/aerospike-client-go/v6 v6.13.0/go.mod h1:2Syy0n4FKdgJxn0ZCf
github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c=
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
-github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4=
-github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4 h1:iC9YFYKDGEy3n/FtqJnOkZsene9olVspKmkX5A2YBEo=
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.4/go.mod h1:sCavSAvdzOjul4cEqeVtvlSaSScfNsTQ+46HwlTL1hc=
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.2/go.mod h1:5JHVmnHvGzR2wNdgaW1zDLQG8kOC4Uec8ubkMogW7OQ=
@@ -286,24 +298,23 @@ github.com/alibabacloud-go/tea-utils/v2 v2.0.1 h1:K6kwgo+UiYx+/kr6CO0PN5ACZDzE3n
github.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M=
github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
-github.com/aliyun/aliyun-log-go-sdk v0.1.63 h1:XeKeHgQS0Aoo6BtzF7vB/PlhzqK1/xuPdLr7mLMOp9Y=
-github.com/aliyun/aliyun-log-go-sdk v0.1.63/go.mod h1:FSKcIjukUy+LeUKhRk13PCO+9gPMTfGsYhFBHQbDqmM=
+github.com/aliyun/aliyun-log-go-sdk v0.1.72 h1:8Gvg3ydMG4bbF7DkTb4m3odd5BRFXo0LmhNBv/xg7Mo=
+github.com/aliyun/aliyun-log-go-sdk v0.1.72/go.mod h1:FSKcIjukUy+LeUKhRk13PCO+9gPMTfGsYhFBHQbDqmM=
github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY=
github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
-github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI=
-github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
+github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/antonmedv/expr v1.15.3 h1:q3hOJZNvLvhqE8OHBs1cFRdbXFNKuA+bHmRaI+AmRmI=
-github.com/antonmedv/expr v1.15.3/go.mod h1:0E/6TxnOlRNp81GMzX9QfDPAmHo2Phg00y4JUv1ihsE=
-github.com/apache/arrow/go/v12 v12.0.1 h1:JsR2+hzYYjgSUkBSaahpqCetqZMr76djX80fF/DiJbg=
-github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw=
+github.com/apache/arrow/go/v15 v15.0.0 h1:1zZACWf85oEZY5/kd9dsQS7i+2G5zVQcbKTHgslqHNA=
+github.com/apache/arrow/go/v15 v15.0.0/go.mod h1:DGXsR3ajT524njufqf95822i+KTh+yea1jass9YXgjA=
github.com/apache/pulsar-client-go v0.8.1 h1:UZINLbH3I5YtNzqkju7g9vrl4CKrEgYSx2rbpvGufrE=
github.com/apache/pulsar-client-go v0.8.1/go.mod h1:yJNcvn/IurarFDxwmoZvb2Ieylg630ifxeO/iXpk27I=
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e h1:EqiJ0Xil8NmcXyupNqXV9oYDBeWntEIegxLahrTr8DY=
github.com/apache/pulsar-client-go/oauth2 v0.0.0-20220120090717-25e59572242e/go.mod h1:Xee4tgYLFpYcPMcTfBYWE1uKRzeciodGTSEDMzsR6i8=
-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/apache/thrift v0.20.0 h1:631+KvYbsBZxmuJjYwhezVsrfc/TbqtZV4QcxOX1fOI=
+github.com/apache/thrift v0.20.0/go.mod h1:hOk1BQqcp2OLzGsyVXdfMk7YFlMxK3aoEVhjD06QhB8=
github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ=
+github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk=
github.com/ardielle/ardielle-go v1.5.2 h1:TilHTpHIQJ27R1Tl/iITBzMwiUGSlVfiVhwDNGM3Zj4=
github.com/ardielle/ardielle-go v1.5.2/go.mod h1:I4hy1n795cUhaVt/ojz83SNVCYIGsAFAONtv2Dr7HUI=
github.com/ardielle/ardielle-tools v1.5.4/go.mod h1:oZN+JRMnqGiIhrzkRN9l26Cej9dEx4jeNG6A+AdkShk=
@@ -318,76 +329,94 @@ github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:l
github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q=
-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/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
+github.com/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
github.com/aws/aws-sdk-go-v2 v1.17.7/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
+github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
-github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
-github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
+github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=
+github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.10/go.mod h1:VeTZetY5KRJLuD/7fkQXMU6Mw7H5m/KP2J5Iy9osMno=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 h1:hHgLiIrTRtddC0AKcJr5s7i/hLgcpTt+q/FKxf1Zayk=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0/go.mod h1:w4I/v3NOWgD+qvs1NPEwhd++1h3XPHFaVxasfY6HlYQ=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
github.com/aws/aws-sdk-go-v2/config v1.18.19/go.mod h1:XvTmGMY8d52ougvakOv1RpiTLPz9dlG/OQHsKU/cMmY=
-github.com/aws/aws-sdk-go-v2/config v1.24.0 h1:4LEk29JO3w+y9dEo/5Tq5QTP7uIEw+KQrKiHOs4xlu4=
-github.com/aws/aws-sdk-go-v2/config v1.24.0/go.mod h1:11nNDAuK86kOUHeuEQo8f3CkcV5xuUxvPwFjTZE/PnQ=
+github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4=
+github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=
+github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
github.com/aws/aws-sdk-go-v2/credentials v1.13.18/go.mod h1:vnwlwjIe+3XJPBYKu1et30ZPABG3VaXJYr8ryohpIyM=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2 h1:rKH7khRMxPdD0u3dHecd0Q7NOVw3EUe7AqdkUOkiOGI=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2/go.mod h1:tXM8wmaeAhfC7nZoCxb0FzM/aRaB1m1WQ7x0qlBLq80=
+github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.1/go.mod h1:lfUx8puBRdM5lVVMQlwt2v+ofiG/X6Ms+dy0UkG/kXw=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 h1:G5KawTAkyHH6WyKQCdHiW4h3PmAXNJpOgwKg3H7sDRE=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3/go.mod h1:hugKmSFnZB+HgNI1sYGT14BUPZkO6alC/e0AWu+0IAQ=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.59 h1:E3Y+OfzOK1+rmRo/K2G0ml8Vs+Xqk0kOnf4nS0kUtBc=
github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.11.59/go.mod h1:1M4PLSBUVfBI0aP+C9XI7SM6kZPCGYyI6izWz0TGprE=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.31/go.mod h1:QT0BqUvX1Bh2ABdTGnjqEjvjzrCfIniM9Sc8zn9Yndo=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 h1:AaQsr5vvGR7rmeSWBtTCcw16tT9r51mWijuCQhzLnq8=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2/go.mod h1:o1IiRn7CWocIFTXJjGKJDOwxv1ibL53NpcvcqGWyRBA=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.25/go.mod h1:zBHOPwhBc3FlQjQJE/D3IfPWiWaQmT06Vq9aNukDo0k=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 h1:UZx8SXZ0YtzRiALzYAWcjb9Y9hZUR7MBKaBQ5ouOjPs=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2/go.mod h1:ipuRpcSaklmxR6C39G187TpBAO132gUfleTGccUPs8c=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.32/go.mod h1:XGhIBZDEgfqmFIugclZ6FU7v75nHhBDtzuB4xB/tEi4=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 h1:usgqiJtamuGIBj+OvYmMq89+Z1hIKkMJToz1WpoeNUY=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.0.23/go.mod h1:uIiFgURZbACBEQJfqTZPb/jxO7R+9LeoHUFudtIdeQI=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 h1:6lJvvkQ9HmbHZ4h/IEwclwv2mrTW8Uq1SOB/kXy0mfw=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo=
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.11/go.mod h1:iV4q2hsqtNECrfmlXyord9u4zyuFEJX9eLgLpSPzWA8=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 h1:m0QTSI6pZYJTk5WSKx3fm5cNW/DCicVzULBgU/6IyD0=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.26/go.mod h1:2UqAAwMUXKeRkAHIlDJqvMVgOWkUi/AUXPk/YIe+Dg4=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 h1:eev2yZX7esGRjqRbnVk1UxMLw4CyVZDpZXRCcy75oQk=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.25/go.mod h1:/95IA+0lMnzW6XzqYJRpjjsAbKEORVeO0anQqjd2CNU=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 h1:h7j73yuAVVjic8pqswh+L/7r2IHP43QwRyOu6zcCDDE=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2/go.mod h1:H07AHdK5LSy8F7EJUQhoxyiCNkePoHj2D8P2yGTWafo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.14.0/go.mod h1:bh2E0CXKZsQN+faiKVqC40vfNMAWheoULBCnEgO9K+8=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 h1:v0jkRigbSD6uOdwcaUQmgEwG1BkPfAPDqaeNt/29ghg=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1 h1:wLRIuz/llNgtN1OvZDmSotR+hjIXSxbxX/3Nw9ViaRg=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1/go.mod h1:tMRFyoPjrh0oGqCKQHOf1EkxVzLynY/uQk2pejYVrzk=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4 h1:Oe8awBiS/iitcsRJB5+DHa3iCxoA0KwJJf0JNrYMINY=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4/go.mod h1:RCZCSFbieSgNG1RKegO26opXV4EXyef/vNBVJsUyHuw=
github.com/aws/aws-sdk-go-v2/service/s3 v1.31.0/go.mod h1:ncltU6n4Nof5uJttDtcNQ537uNuwYqsZZQcpkd2/GUQ=
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 h1:wl5dxN1NONhTDQD9uaEvNsDRX29cBmGED/nl0jkWlt4=
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM=
+github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5 h1:a3nFS1TFNTH9TVizItnHz3BgPCk5/7ygrZQZAoUV3GA=
+github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5/go.mod h1:3pzLFJnbjkymz6RdZ963DuvMR9rzrKMXrlbteSk4Sxc=
github.com/aws/aws-sdk-go-v2/service/sso v1.12.6/go.mod h1:Y1VOmit/Fn6Tz1uFAeCO6Q7M2fmfXSCLeL5INVYsLuY=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 h1:km+ZNjtLtpXYf42RdaDZnNHm9s7SYAuDGTafy6nd89A=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1/go.mod h1:aHBr3pvBSD5MbzOvQtYutyPLLRPbl/y9x86XyJJnUXQ=
+github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.6/go.mod h1:Lh/bc9XUf8CfOY6Jp5aIkQtN+j1mc+nExc+KXj9jx2s=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 h1:iRFNqZH4a67IqPvK8xxtyQYnyrlsvwmpHOe9r55ggBA=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1/go.mod h1:pTy5WM+6sNv2tB24JNKFtn6EvciQ5k40ZJ0pq/Iaxj0=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
github.com/aws/aws-sdk-go-v2/service/sts v1.18.7/go.mod h1:JuTnSoeePXmMVe9G8NcjjwgOKEfZ4cOjMuT2IBT/2eI=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 h1:txgVXIXWPXyqdiVn92BV6a/rgtpX31HYdsOYj0sVQQQ=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1/go.mod h1:VAiJiNaoP1L89STFlEMgmHX1bKixY+FaP+TpRFrmyZ4=
+github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
-github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
-github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
+github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
+github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
github.com/basgys/goxml2json v1.1.0 h1:4ln5i4rseYfXNd86lGEB+Vi652IsIXIvggKM/BhUKVw=
+github.com/basgys/goxml2json v1.1.0/go.mod h1:wH7a5Np/Q4QoECFIU8zTQlZwZkrilY0itPfecMw41Dw=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0=
github.com/beefsack/go-rate v0.0.0-20220214233405-116f4ca011a0/go.mod h1:6YNgTHLutezwnBvyneBbwvB8C82y3dcoOj5EQJIdGXA=
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=
@@ -405,24 +434,26 @@ github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTS
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q=
+github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
+github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
+github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
+github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
-github.com/caio/go-tdigest/v4 v4.0.1 h1:sx4ZxjmIEcLROUPs2j1BGe2WhOtHD6VSe6NNbBdKYh4=
-github.com/caio/go-tdigest/v4 v4.0.1/go.mod h1:Wsa+f0EZnV2gShdj1adgl0tQSoXRxtM0QioTgukFw8U=
github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg=
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8=
github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
@@ -431,8 +462,8 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn
github.com/cihub/seelog v0.0.0-20151216151435-d2c6e5aa9fbf/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
-github.com/cilium/ebpf v0.9.1 h1:64sn2K3UKw8NbP/blsixRpF3nXuyhz/VjRlRzvlBRu4=
-github.com/cilium/ebpf v0.9.1/go.mod h1:+OhNOIXx/Fnu1IE8bJz2dzOA+VSfyTfdNUVdlQnxUFY=
+github.com/cilium/ebpf v0.11.0 h1:V8gS/bTCCjX9uUnkUFUpPsksM8n1lXBAvHcpiFk1X2Y=
+github.com/cilium/ebpf v0.11.0/go.mod h1:WE7CZAnqOL2RouJ4f1uyNhqr2P4CCvXFIqdRDUgWsVs=
github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag=
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I=
@@ -447,28 +478,27 @@ github.com/cloudfoundry-incubator/uaago v0.0.0-20190307164349-8136b7bbe76e/go.mo
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk=
-github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I=
github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ=
-github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM=
-github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw=
-github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0=
-github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE=
+github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
+github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
-github.com/containerd/containerd v1.7.7 h1:QOC2K4A42RQpcrZyptP6z9EJZnlHfHJUfZrAAHe15q4=
-github.com/containerd/containerd v1.7.7/go.mod h1:3c4XZv6VeT9qgf9GMTxNTMFxGJrGpI2vz1yk4ye+YY8=
+github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
+github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
+github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM=
+github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/containerd/ttrpc v1.2.2 h1:9vqZr0pxwOF5koz6N0N3kJ0zDHokrcPxIR/ZR2YFtOs=
github.com/containerd/ttrpc v1.2.2/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak=
github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY=
-github.com/coreos/go-oidc v2.2.1+incompatible h1:mh48q/BqXqgjVHpy2ZY7WnWAbenxRjsz9N1i1YxjHAk=
-github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
+github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
+github.com/coreos/go-oidc/v3 v3.10.0 h1:tDnXHnLyiTVyT/2zLDGj09pFPkhND8Gl8lnTRhoEaJU=
+github.com/coreos/go-oidc/v3 v3.10.0/go.mod h1:5j11xcw0D3+SGxn6Z/WFADsgcWVMyNAlSQupk0KK3ac=
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
@@ -476,6 +506,7 @@ github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=
+github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
@@ -491,28 +522,29 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
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/deepmap/oapi-codegen v1.12.4 h1:pPmn6qI9MuOtCz82WY2Xaw46EQjgvxednXXrP7g5Q2s=
-github.com/denisenkom/go-mssqldb v0.12.2 h1:1OcPn5GBIobjWNd+8yjfHNIaFX14B1pWI3F9HZy5KXw=
-github.com/denisenkom/go-mssqldb v0.12.2/go.mod h1:lnIw1mZukFRZDJYQ0Pb833QS2IaC3l5HkEfra2LJ+sk=
github.com/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
github.com/devigned/tab v0.1.1 h1:3mD6Kb1mUOYeLpJvTVSDwSg5ZsfSxfvxGRTxRsJsITA=
github.com/devigned/tab v0.1.1/go.mod h1:XG9mPq0dFghrYvoBF3xdRrJzSTX1b7IQrvaL9mzjeJY=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
-github.com/digitalocean/godo v1.104.1 h1:SZNxjAsskM/su0YW9P8Wx3gU0W1Z13b6tZlYNpl5BnA=
-github.com/digitalocean/godo v1.104.1/go.mod h1:VAI/L5YDzMuPRU01lEEUSQ/sp5Z//1HnnFv/RBTEdbg=
+github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
+github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
+github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU=
+github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
+github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
github.com/dimfeld/httptreemux v5.0.1+incompatible h1:Qj3gVcDNoOthBAqftuD596rm4wg/adLLz5xh5CmpiCA=
github.com/dimfeld/httptreemux v5.0.1+incompatible/go.mod h1:rbUlSV+CCpv/SuqUTP/8Bk2O3LyUV436/yaRGkhP6Z0=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11 h1:IPrmumsT9t5BS7XcPhgsCTlkWbYg80SEXUzDpReaU6Y=
-github.com/docker/go-connections v0.4.1-0.20210727194412-58542c764a11/go.mod h1:a6bNUGTbQBsY6VRHTr4h/rkOXjl244DyRD0tx3fgq4Q=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
@@ -520,13 +552,13 @@ github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25Kn
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM=
-github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM=
-github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
+github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY=
+github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0 h1:wHGPJSXvwKQVf/XfhjUPyrhpcPKWNy8F3ikH+eiwoBg=
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0/go.mod h1:PseHFo8Leko7J4A/TfZ6kkHdkzKBLUta6hRZR/OEbbc=
github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs=
-github.com/eapache/go-resiliency v1.4.0 h1:3OK9bWpPk5q6pbFAaYSEwD9CLUSHG8bnZuqX2yMt3B0=
-github.com/eapache/go-resiliency v1.4.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
+github.com/eapache/go-resiliency v1.6.0 h1:CqGDTLtpwuWKn6Nj3uNUdflaq+/kIPsg0gfNzHton30=
+github.com/eapache/go-resiliency v1.6.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
@@ -549,18 +581,22 @@ github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5y
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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
-github.com/envoyproxy/go-control-plane v0.11.1 h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM=
-github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g=
+github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
+github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
-github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
github.com/euank/go-kmsg-parser v2.0.0+incompatible h1:cHD53+PLQuuQyLZeriD1V/esuG4MuU0Pjs5y6iknohY=
github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
-github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww=
-github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50 h1:3fALCgsB+zI8Bxlv4ph4lCgt1CEQHIdU5sWxbkaMkuc=
-github.com/facebook/time v0.0.0-20220713225404-f7a0d7702d50/go.mod h1:IQmM+Ezbn5X7gpDO0IjKU5RmW9xT1a19dLp+NbivoXE=
+github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/evanphx/json-patch/v5 v5.8.0 h1:lRj6N9Nci7MvzrXuX6HFzU8XjmhPiXPlsKEy1u0KQro=
+github.com/evanphx/json-patch/v5 v5.8.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
+github.com/expr-lang/expr v1.16.3 h1:NLldf786GffptcXNxxJx5dQ+FzeWDKChBDqOOwyK8to=
+github.com/expr-lang/expr v1.16.3/go.mod h1:uCkhfG+x7fcZ5A5sXHKuQ07jGZRl6J0FCAaf2k4PtVQ=
+github.com/facebook/time v0.0.0-20240109160331-d1456d1a6bac h1:Xn5xG7RTh7HqtXKCCnxDG4+ee96umlRTBQM3kNSXDoU=
+github.com/facebook/time v0.0.0-20240109160331-d1456d1a6bac/go.mod h1:1u7ple9CA8fMqfqqNsKIsxFL9i2yLfo8Hsv4ejTD1FM=
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.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
@@ -574,30 +610,35 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
github.com/form3tech-oss/jwt-go v3.2.5+incompatible h1:/l4kBbb4/vGSsdtB5nUe8L7B9mImVMaBPw9L/0TBHU8=
github.com/form3tech-oss/jwt-go v3.2.5+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
+github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo=
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
github.com/frankban/quicktest v1.10.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
github.com/frankban/quicktest v1.11.0/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
github.com/frankban/quicktest v1.11.2/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU=
-github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
+github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
+github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
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.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU=
github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA=
-github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
-github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
+github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
+github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw=
github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw=
-github.com/go-faster/errors v0.6.1 h1:nNIPOBkprlKzkThvS/0YaX8Zs9KewLCOSFQS5BU06FI=
-github.com/go-faster/errors v0.6.1/go.mod h1:5MGV2/2T9yvlrbhe9pD9LO5Z/2zCSq2T8j+Jpi2LAyY=
+github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
+github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-jose/go-jose/v4 v4.0.1 h1:QVEPDE3OluqXBQZDcnNvQrInro2h0e4eqNbnZSWqS6U=
+github.com/go-jose/go-jose/v4 v4.0.1/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY=
github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4=
github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
@@ -613,42 +654,42 @@ github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KE
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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.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/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-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/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
+github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-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/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
+github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-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-redis/redis/v7 v7.4.1 h1:PASvf36gyUpr2zdOUS/9Zqc80GbM+9BDyiJSJDDOrTI=
-github.com/go-redis/redis/v7 v7.4.1/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg=
-github.com/go-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
-github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
+github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
+github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
+github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
+github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
-github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
-github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
+github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
+github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
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-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg=
+github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
@@ -656,8 +697,8 @@ github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-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/gocql/gocql v1.6.0 h1:IdFdOTbnpbd0pDhl4REKQDM+Q0SzKXQ1Yh+YZZ8T/qU=
+github.com/gocql/gocql v1.6.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -665,8 +706,8 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk=
github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
-github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
-github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
+github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
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=
@@ -678,10 +719,10 @@ github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzq
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
-github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
-github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
-github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe h1:lXe2qZdvpiX5WZkZR4hgp4KJVfY3nMkvmwbVkpv1rVY=
-github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
+github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
+github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 h1:au07oEsX2xN0ktxqI+Sida1w446QrXBRJ0nee3SNZlA=
+github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
github.com/golang-sql/sqlexp v0.1.0 h1:ZCD6MBpcuOVfGVqsEmY5/4FtYiKz6tSyUv9LPEDei6A=
github.com/golang-sql/sqlexp v0.1.0/go.mod h1:J4ad9Vo8ZCWQ2GMrC4UCQy1JpCbwU9m3EOqtpKwwwHI=
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
@@ -718,8 +759,8 @@ github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
@@ -728,10 +769,11 @@ github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
-github.com/google/cadvisor v0.48.1 h1:eyYTxKBd+KxI1kh6rst4JSTLUhfHQM34qGpp+0AMlSg=
-github.com/google/cadvisor v0.48.1/go.mod h1:ZkYbiiVdyoqBmI2ahZI8GlmirT78OAOER0z4EQugkxQ=
-github.com/google/flatbuffers v23.1.21+incompatible h1:bUqzx/MXCDxuS0hRJL2EfjyZL3uQrPbMocUa8zGqsTA=
-github.com/google/flatbuffers v23.1.21+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
+github.com/google/cadvisor v0.49.0 h1:1PYeiORXmcFYi609M4Qvq5IzcvcVaWgYxDt78uH8jYA=
+github.com/google/cadvisor v0.49.0/go.mod h1:s6Fqwb2KiWG6leCegVhw4KW40tf9f7m+SF1aXiE8Wsk=
+github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg=
+github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -746,7 +788,6 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.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/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
@@ -769,66 +810,70 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20230926050212-f7f687d19a98 h1:pUa4ghanp6q4IJHwE9RwLgmVFfReJN+KbQ8ExNEUUoQ=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
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.0/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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
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/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
-github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
+github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
+github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
-github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
-github.com/gophercloud/gophercloud v1.7.0 h1:fyJGKh0LBvIZKLvBWvQdIgkaV5yTM3Jh9EYUh+UNCAs=
-github.com/gophercloud/gophercloud v1.7.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
+github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk=
+github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
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.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.7.4/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 h1:miw7JPhV+b/lAHSXz4qd/nN9jRiAFV5FwjeKyCS8BvQ=
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
+github.com/gorilla/sessions v1.2.1 h1:DHd3rPN5lE3Ts3D8rKkQ8x/0kqfeNmBAaiSi+o7FsgI=
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
-github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
-github.com/gosnmp/gosnmp v1.35.0 h1:EuWWNPxTCdAUx2/NbQcSa3WdNxjzpy4Phv57b4MWpJM=
-github.com/gosnmp/gosnmp v1.35.0/go.mod h1:2AvKZ3n9aEl5TJEo/fFmf/FGO4Nj4cVeEc5yuk88CYc=
-github.com/grafana/loki/pkg/push v0.0.0-20230321110627-5c3d204ebf5d h1:InEQBUAKYIHRlOVvxWxvpW5pziK53RdlhsuRJzBWUmE=
-github.com/grafana/loki/pkg/push v0.0.0-20230321110627-5c3d204ebf5d/go.mod h1:BjNgF1EfQglDCrCbF0qiQLqAoBKva0/es63lSKT2TXw=
+github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
+github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
+github.com/gosnmp/gosnmp v1.37.0 h1:/Tf8D3b9wrnNuf/SfbvO+44mPrjVphBhRtcGg22V07Y=
+github.com/gosnmp/gosnmp v1.37.0/go.mod h1:GDH9vNqpsD7f2HvZhKs5dlqSEcAS6s6Qp099oZRCR+M=
+github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37 h1:w59bmBeLOk4enGtyX4kTBNY3FCw/nwDTYUqcjC4vKhg=
+github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37/go.mod h1:f3JSoxBTPXX5ec4FxxeC19nTBSxoTz+cBgS3cYLMcr0=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grobie/gomemcache v0.0.0-20180201122607-1f779c573665 h1:LONJvPBBd9wBmzSUmNHI7XpLE2qQ5tzUimeBadiVDuA=
-github.com/grobie/gomemcache v0.0.0-20180201122607-1f779c573665/go.mod h1:L69/dBlPQlWkcnU76WgcppK5e4rrxzQdi6LhLnK/ytA=
+github.com/grobie/gomemcache v0.0.0-20230213081705-239240bbc445 h1:FlKQKUYPZ5yDCN248M3R7x8yu2E3yEZ0H7aLomE4EoE=
+github.com/grobie/gomemcache v0.0.0-20230213081705-239240bbc445/go.mod h1:L69/dBlPQlWkcnU76WgcppK5e4rrxzQdi6LhLnK/ytA=
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/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU=
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0=
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.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
-github.com/hashicorp/consul/sdk v0.14.1 h1:ZiwE2bKb+zro68sWzZ1SgHF3kRMBZ94TwOCFRF4ylPs=
+github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8=
+github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A=
github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A=
github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -841,13 +886,14 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-hclog v0.16.2/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-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
+github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
+github.com/hashicorp/go-msgpack v0.5.5/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=
@@ -860,6 +906,7 @@ github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5O
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 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
+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=
@@ -874,6 +921,8 @@ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
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/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
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=
@@ -884,15 +933,16 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p
github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0=
-github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c h1:Nc3Mt2BAnq0/VoLEntF/nipX+K1S7pG+RgwiitSv6v0=
-github.com/hashicorp/nomad/api v0.0.0-20230721134942-515895c7690c/go.mod h1:O23qLAZuCx4htdY9zBaO4cJPXgleSFEdq6D/sezGgYE=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
-github.com/hetznercloud/hcloud-go/v2 v2.4.0 h1:MqlAE+w125PLvJRCpAJmEwrIxoVdUdOyuFUhE/Ukbok=
-github.com/hetznercloud/hcloud-go/v2 v2.4.0/go.mod h1:l7fA5xsncFBzQTyw29/dw5Yr88yEGKKdc6BHf24ONS0=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
@@ -905,9 +955,10 @@ github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+h
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 h1:s9ZL6ZhFF8y6ebnm1FLvobkzoIu5xwDQUcRPk/IEhpM=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6/go.mod h1:aXdIdfn2OcGnMhOTojXmwZqXKgC3MU5riiNvzwwG9OY=
-github.com/influxdata/influxdb-client-go/v2 v2.12.4 h1:9qJLqetEmhIlqaF/N9KUtdmRKSbNy6IohggyS3bxWlE=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 h1:2r2WiFeAwiJ/uyx1qIKnV1L4C9w/2V8ehlbJY4gjFaM=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4/go.mod h1:1yEQhaLb/cETXCqQmdh7lDjupNAReO7c83AHyK2dJ48=
+github.com/influxdata/influxdb-client-go/v2 v2.13.0 h1:ioBbLmR5NMbAjP4UVA5r9b5xGjpABD7j65pI8kFphDM=
+github.com/influxdata/influxdb-client-go/v2 v2.13.0/go.mod h1:k+spCbt9hcvqvUiz0sr5D8LolXHqAAOfPw9v/RIRHl4=
github.com/influxdata/influxdb-observability/common v0.5.8 h1:nyk4dqnKbPGIyr1vAs6oEsFQEHWi5jkSQ7PtP4v//lc=
github.com/influxdata/influxdb-observability/common v0.5.8/go.mod h1:aG8A2gbtXbl/P2FePd6QNsCUSOkcvz1n+NL5dJLUO1s=
github.com/influxdata/influxdb-observability/influx2otel v0.5.8 h1:pHkeImZksXNNQbbH/w1qPuC/u6e7cK3kTG12otQHDuE=
@@ -916,7 +967,9 @@ github.com/influxdata/influxdb-observability/otel2influx v0.5.8 h1:vZQ/WwiqIYPcZ
github.com/influxdata/influxdb-observability/otel2influx v0.5.8/go.mod h1:tcg//mjCGBsN0hAPQhUBNWuGF2miPPEMJEBl0ZIAfCk=
github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c h1:qSHzRbhzK8RdXOsAdfDgO49TtqC1oZ+acxPrkfTxcCs=
+github.com/influxdata/influxdb1-client v0.0.0-20220302092344-a9ab5670611c/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo=
github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839 h1:W9WBk7wlPfJLvMCdtV4zPulc4uCPrlywQOmbFOhgQNU=
+github.com/influxdata/line-protocol v0.0.0-20200327222509-2487e7298839/go.mod h1:xaLFMmpvUxqXtVkUJfg9QmT88cDaCJ3ZKgdZ78oO8Qo=
github.com/influxdata/line-protocol-corpus v0.0.0-20210519164801-ca6fa5da0184/go.mod h1:03nmhxzZ7Xk2pdG+lmMd7mHDfeVOYFyhOgwO61qWU98=
github.com/influxdata/line-protocol-corpus v0.0.0-20210922080147-aa28ccfb8937 h1:MHJNQ+p99hFATQm6ORoLmpUCF7ovjwEFshs/NHzAbig=
github.com/influxdata/line-protocol-corpus v0.0.0-20210922080147-aa28ccfb8937/go.mod h1:BKR9c0uHSmRgM/se9JhFHtTT7JTO67X23MtKMHtZcpo=
@@ -924,8 +977,8 @@ github.com/influxdata/line-protocol/v2 v2.0.0-20210312151457-c52fdecb625a/go.mod
github.com/influxdata/line-protocol/v2 v2.1.0/go.mod h1:QKw43hdUBg3GTk2iC3iyCxksNj7PX9aUSeYOYE/ceHY=
github.com/influxdata/line-protocol/v2 v2.2.1 h1:EAPkqJ9Km4uAxtMRgUubJyqAr6zgWM0dznKMLRauQRE=
github.com/influxdata/line-protocol/v2 v2.2.1/go.mod h1:DmB3Cnh+3oxmG6LOBIxce4oaL4CPj3OmMPgvauXh+tM=
-github.com/ionos-cloud/sdk-go/v6 v6.1.9 h1:Iq3VIXzeEbc8EbButuACgfLMiY5TPVWUPNrF+Vsddo4=
-github.com/ionos-cloud/sdk-go/v6 v6.1.9/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo=
github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk=
github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8=
@@ -936,8 +989,8 @@ github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsU
github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o=
github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY=
github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI=
-github.com/jackc/pgconn v1.14.0 h1:vrbA9Ud87g6JdFWkHTJXppVce58qPIdP7N8y0Ml/A7Q=
-github.com/jackc/pgconn v1.14.0/go.mod h1:9mBNlny0UvkgJdCDvdVHYSjI+8tD2rnKK69Wz8ti++E=
+github.com/jackc/pgconn v1.14.3 h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w=
+github.com/jackc/pgconn v1.14.3/go.mod h1:RZbme4uasqzybK2RK5c65VsHxoyaml09lx3tXOcO/VM=
github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE=
github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8=
github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE=
@@ -953,8 +1006,8 @@ github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvW
github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM=
github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
-github.com/jackc/pgproto3/v2 v2.3.2 h1:7eY55bdBeCz1F2fTzSz69QC+pG46jYq9/jtSPiJ5nn0=
-github.com/jackc/pgproto3/v2 v2.3.2/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
+github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag=
+github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA=
github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk=
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM=
@@ -968,15 +1021,15 @@ github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08
github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM=
github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc=
github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs=
-github.com/jackc/pgx/v4 v4.18.1 h1:YP7G1KABtKpB5IHrO9vYwSrCOhs7p3uqhvhhQBptya0=
-github.com/jackc/pgx/v4 v4.18.1/go.mod h1:FydWkUyadDmdNH/mHnGob881GawxeEm7TcMCzkb+qQE=
+github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA=
+github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw=
github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk=
-github.com/jaegertracing/jaeger v1.48.0 h1:YuKooQ7qJsjgxws9xuf8C/BLNTPx8qTAJz4wv7IHhSc=
-github.com/jaegertracing/jaeger v1.48.0/go.mod h1:BoAPkdCAIEuLsVz/EDhjXd+GSVpHtJhiGqWoFEvBCKg=
-github.com/jarcoal/httpmock v1.3.0 h1:2RJ8GP0IIaWwcC9Fp2BmVi8Kog3v2Hn7VXM3fTd+nuc=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
+github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww=
+github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg=
github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk=
github.com/jawher/mow.cli v1.2.0/go.mod h1:y+pcA3jBAdo/GIZx/0rFjw/K2bVEODP9rfZOfaiq8Ko=
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
@@ -991,14 +1044,17 @@ github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh6
github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
-github.com/jellydator/ttlcache/v3 v3.1.0 h1:0gPFG0IHHP6xyUyXq+JaD8fwkDCqgqwohXNJBcYE71g=
-github.com/jellydator/ttlcache/v3 v3.1.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
+github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++uW8a3LE=
+github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
+github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
+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=
@@ -1021,21 +1077,19 @@ github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1q
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNrCn9otv/2QP4D7SMJBgaleKpOf66PnW6F5WGNRIc=
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/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4=
-github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE=
github.com/klauspost/compress v1.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg=
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-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/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU=
-github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
+github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -1048,6 +1102,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
@@ -1056,11 +1111,14 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353 h1:X/79QL0b4YJVO5+OsPH9rF2u428CIrGL/jLmPsoOQQ4=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 h1:bCiVCRCs1Heq84lurVinUPy19keqGEe4jh5vtK37jcg=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg=
github.com/leoluk/perflib_exporter v0.2.1 h1:/3/ut1k/jFt5p4ypjLZKDHDqlXAK6ERZPVWtwdI389I=
github.com/leoluk/perflib_exporter v0.2.1/go.mod h1:MinSWm88jguXFFrGsP56PtleUb4Qtm4tNRH/wXNXRTI=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
+github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
+github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
@@ -1071,10 +1129,10 @@ github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8Lb
github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs=
github.com/linkedin/goavro/v2 v2.9.8 h1:jN50elxBsGBDGVDEKqUlDuU1cFwJ11K/yrJCBMe/7Wg=
github.com/linkedin/goavro/v2 v2.9.8/go.mod h1:UgQUb2N/pmueQYH9bfqFioWxzYCZXSfF8Jw03O5sjqA=
-github.com/linode/linodego v1.23.0 h1:s0ReCZtuN9Z1IoUN9w1RLeYO1dMZUGPwOQ/IBFsBHtU=
-github.com/linode/linodego v1.23.0/go.mod h1:0U7wj/UQOqBNbKv1FYTXiBUXueR8DY4HvIotwE0ENgg=
-github.com/logicmonitor/lm-data-sdk-go v1.0.0 h1:2eiz7kq3G0rLc/hqVpsk1c2B0PMjp6nLhHzc5SmTn80=
-github.com/logicmonitor/lm-data-sdk-go v1.0.0/go.mod h1:XvYS9xp/0WrPpc6ge2O3ZPn2dgbKO46PnfCfbKaeUu8=
+github.com/linode/linodego v1.30.0 h1:6HJli+LX7NGu+Sne2G+ux790EkVOWOV/SR4mK3jcs6k=
+github.com/linode/linodego v1.30.0/go.mod h1:/46h/XpmWi//oSA92GX2p3FIxb8HbX7grslPPQalR2o=
+github.com/logicmonitor/lm-data-sdk-go v1.3.0 h1:Obrexk35IKupFQezngkesR/kMfHQdAEUR1zYbJrOrzg=
+github.com/logicmonitor/lm-data-sdk-go v1.3.0/go.mod h1:nIHr4uOPfg6AM7mG1rewg3L4O3rfge34o7UYB7joBM4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
@@ -1108,24 +1166,21 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
-github.com/mattn/go-sqlite3 v1.14.18 h1:JL0eqdCOq6DJVNPSvArO/bIV9/P7fbGrV00LZHc+5aI=
-github.com/mattn/go-sqlite3 v1.14.18/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
+github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
+github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
+github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM=
github.com/microsoft/ApplicationInsights-Go v0.4.4 h1:G4+H9WNs6ygSCe6sUyxRc2U81TI5Es90b2t/MwX5KqY=
github.com/microsoft/ApplicationInsights-Go v0.4.4/go.mod h1:fKRUseBqkw6bDiXTs3ESTiU/4YTIHsQS4W3fP2ieF4U=
+github.com/microsoft/go-mssqldb v1.7.0 h1:sgMPW0HA6Ihd37Yx0MzHyKD726C2kY/8KJsQtXHNaAs=
+github.com/microsoft/go-mssqldb v1.7.0/go.mod h1:kOvZKUdrhhFQmxLZqbwUV0rHkNkZpthMITIb2Ko1IoA=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
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/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
-github.com/miekg/dns v1.1.56 h1:5imZaSeoRNvpM9SzWNhEcP9QliKiz20/dA2QabIGVnE=
-github.com/miekg/dns v1.1.56/go.mod h1:cRm6Oo2C8TY9ZS/TqsSrseAcncm74lfK5G+ikN2SWWY=
-github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs=
-github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
-github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI=
-github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY=
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk=
@@ -1137,8 +1192,11 @@ github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HK
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc=
+github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg=
github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg=
github.com/mitchellh/hashstructure v1.1.0 h1:P6P1hdjqAAknpY/M1CGipelZgp+4y9ja9kmUZPXP+H0=
github.com/mitchellh/hashstructure v1.1.0/go.mod h1:xUDAozZz0Wmdiufv0uyhnHkUTN6/6d8ulp4AwfLKrmA=
@@ -1149,16 +1207,21 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/mapstructure v1.4.2/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/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
+github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
+github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -1166,13 +1229,13 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
-github.com/mongodb-forks/digest v1.0.5 h1:EJu3wtLZcA0HCvsZpX5yuD193/sW9tHiNvrEM5apXMk=
-github.com/mongodb-forks/digest v1.0.5/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg=
+github.com/mongodb-forks/digest v1.1.0 h1:7eUdsR1BtqLv0mdNm4OXs6ddWvR4X2/OsLwdKksrOoc=
+github.com/mongodb-forks/digest v1.1.0/go.mod h1:rb+EX8zotClD5Dj4NdgxnJXG9nwrlx3NWKJ8xttz1Dg=
github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
github.com/montanaflynn/stats v0.7.0 h1:r3y12KyNxj/Sb/iOE46ws+3mS1+MZca1wlHQFPsY/JU=
github.com/montanaflynn/stats v0.7.0/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
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/mrunalp/fileutils v0.5.1 h1:F+S7ZlNKnrwHfSwdlgNSkKo67ReVf8o9fel6C3dkm/Q=
@@ -1193,27 +1256,31 @@ github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/
github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s=
github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
-github.com/nginxinc/nginx-plus-go-client v0.6.0/go.mod h1:DBAmdDP71tOhgFPdCMVusegzdKmLVpVL0nVcMX17pbY=
-github.com/nginxinc/nginx-prometheus-exporter v0.8.1-0.20201110005315-f5a5f8086c19 h1:jR4KbeVA+KYmPq+amRe6AdB4mIfEaSOZGY2zCpqt/p8=
-github.com/nginxinc/nginx-prometheus-exporter v0.8.1-0.20201110005315-f5a5f8086c19/go.mod h1:L58Se1nwn3cEyHWlcfdlXgiGbHe/efvDbkbi+psz3lA=
+github.com/nginxinc/nginx-prometheus-exporter v0.11.0 h1:21xjnqNgxtni2jDgAQ90bl15uDnrTreO9sIlu1YsX/U=
+github.com/nginxinc/nginx-prometheus-exporter v0.11.0/go.mod h1:GdyHnWAb8q8OW1Pssrrqbcqra0SH0Vn6UXICMmyWkw8=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
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/observiq/nanojack v0.0.0-20201106172433-343928847ebc h1:49ewVBwLcy+eYqI4R0ICilCI4dPjddpFXWv3liXzUxM=
+github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo=
+github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A=
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU=
+github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
-github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
+github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY=
+github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM=
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
@@ -1221,25 +1288,29 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
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.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
+github.com/onsi/gomega v1.31.0 h1:54UJxxj6cPInHS3a35wm6BK/F9nHYueZ1NVujHDrnXE=
+github.com/onsi/gomega v1.31.0/go.mod h1:DW9aCi7U6Yi40wNVAvT6kzFnEVEI5n3DloYBiKiT6zk=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
+github.com/open-telemetry/opamp-go v0.14.0 h1:KoziIK+wsFojhUXNTkCSTnCPf0eCMqFAaccOs0HrWIY=
+github.com/open-telemetry/opamp-go v0.14.0/go.mod h1:XOGCigljsLSTZ8FfLwvat0M1QDj3conIIgRa77BWrKs=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss=
github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8=
-github.com/opencontainers/runtime-spec v1.1.0-rc.3 h1:l04uafi6kxByhbxev7OWiuUv0LZxEsYUfDWZ6bztAuU=
-github.com/opencontainers/runtime-spec v1.1.0-rc.3/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
-github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU=
-github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec=
+github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg=
+github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w=
+github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
+github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsrZjibvB3APXf2a1VwCmMQ=
+github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5ESjc2+iaZuldqE+23Iq0r1XeNue8=
github.com/openshift/api v0.0.0-20180801171038-322a19404e37 h1:05irGU4HK4IauGGDbsk+ZHrm1wOzMLYjMlfaiqMrBYc=
github.com/openshift/api v0.0.0-20180801171038-322a19404e37/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY=
github.com/openshift/api v0.0.0-20210521075222-e273a339932a/go.mod h1:izBmoXbUu3z5kUa4FjZhvekTsyzIWiOoaIgJiZBBMQs=
github.com/openshift/build-machinery-go v0.0.0-20210423112049-9415d7ebd33e/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 h1:ZHRIMCFIJN1p9LsJt4HQ+akDrys4PrYnXzOWI5LK03I=
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142/go.mod h1:fjS8r9mqDVsPb5td3NehsNOAWa4uiFkYEfVZioQ2gH0=
-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.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE=
github.com/openzipkin/zipkin-go v0.4.2 h1:zjqfqHjUpPmB3c1GlCvvgsM1G4LkvqQbBDueDOCg/jA=
@@ -1253,12 +1324,13 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
-github.com/paulmach/orb v0.10.0 h1:guVYVqzxHE/CQ1KpfGO077TR0ATHSNjp4s6XGLn3W9s=
-github.com/paulmach/orb v0.10.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
+github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU=
+github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
+github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o=
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
-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/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/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
@@ -1268,21 +1340,20 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi
github.com/pierrec/lz4 v2.6.0+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
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=
-github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
+github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
-github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA=
github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
-github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
-github.com/pkg/sftp v1.13.5 h1:a3RLUqkyjYRtBTZJZ1VRrKbN3zhuPLlUc3sphVz81go=
-github.com/pkg/sftp v1.13.5/go.mod h1:wHDZ0IZX6JcBYRK1TH9bcVq8G7TLpVHYIGJRFnmPfxg=
+github.com/pkg/sftp v1.13.6 h1:JFZT4XbOU7l77xGSpOdW+pwIMqP044IyjXX6FGyEKFo=
+github.com/pkg/sftp v1.13.6/go.mod h1:tz1ryNURKu77RL+GuCzmoJYxQczL3wLNNpPWagdg4Qk=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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=
@@ -1296,21 +1367,17 @@ github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQ
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
-github.com/prometheus/client_golang v1.6.0/go.mod h1:ZLOG9ck3JLRdB5MgO8f+lLTe83AXG6ro35rLTxvnIl4=
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=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
@@ -1318,35 +1385,31 @@ github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9
github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.31.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
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.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
-github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
-github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
-github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/prometheus v0.48.0 h1:yrBloImGQ7je4h8M10ujGh4R6oxYQJQKlMuETwNskGk=
-github.com/prometheus/prometheus v0.48.0/go.mod h1:SRw624aMAxTfryAcP8rOjg4S/sHHaetx2lyJJ2nM83g=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
+github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o=
+github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
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/relvacode/iso8601 v1.3.0 h1:HguUjsGpIMh/zsTczGN3DVJFxTU/GX+MMmzcKoMO7ko=
-github.com/relvacode/iso8601 v1.3.0/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I=
+github.com/redis/go-redis/v9 v9.5.1 h1:H1X4D3yHPaYrkL5X06Wh6xNVM/pX0Ft4RV0vMGvLBh8=
+github.com/redis/go-redis/v9 v9.5.1/go.mod h1:hdY0cQFCN4fnSYT6TkisLufl/4W5UIXyv0b/CLO2V2M=
+github.com/relvacode/iso8601 v1.4.0 h1:GsInVSEJfkYuirYFxa80nMLbH2aydgZpIf52gYZXUJs=
+github.com/relvacode/iso8601 v1.4.0/go.mod h1:FlNp+jz+TXpyRqgmM7tnzHHzBnz776kmAH2h3sZCn0I=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
+github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ=
@@ -1355,13 +1418,17 @@ github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThC
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
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/samber/lo v1.37.0 h1:XjVcB8g6tgUp8rsPsJ2CvhClfImrpL04YpQHXeHPhRw=
-github.com/samber/lo v1.37.0/go.mod h1:9vaz2O4o8oOnK23pd2TrXufcbdbJIa3b6cstBWKpopA=
+github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
+github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
+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/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=
+github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21 h1:yWfiTPwYxB0l5fGMhl/G+liULugVIHD9AU77iNLrURQ=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.21/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
-github.com/scalyr/dataset-go v0.14.0 h1:uRkoUt6LcMcH3VUTjOakQ4aq+1ooJB2t47oqYRUkV/k=
-github.com/scalyr/dataset-go v0.14.0/go.mod h1:+a4BvVyS7mKquK7ySuWh4vygyDBREQrdikdcnABYKFw=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
+github.com/scalyr/dataset-go v0.18.0 h1:CTv7kk/FGdiicTWo3h1brFusHD1yjhVGINFamP8uukw=
+github.com/scalyr/dataset-go v0.18.0/go.mod h1:4x0JK5X0UdhZ2TEO3kHu9pTELDRc3WsrBBwQfkOPZKc=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds=
@@ -1370,13 +1437,14 @@ github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAj
github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI=
github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
-github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
-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/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
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/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/shoenig/test v0.6.6 h1:Oe8TPH9wAbv++YPNDKJWUnI8Q4PPWCx3UbOfH+FxiMU=
+github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY=
+github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI=
github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4=
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
@@ -1384,10 +1452,10 @@ github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFR
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3 h1:32k2QLgsKhcEs55q4REPKyIadvid5FPy2+VMgvbmKJ0=
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3/go.mod h1:gJrXWi7wSGXfiC7+VheQaz+ypdCt5SmZNL+BRxUe7y4=
-github.com/signalfx/sapm-proto v0.13.0 h1:yEkp1+MAU4vZvnJMp56uhVlRjlvCK7KQjBg0g2Apw8k=
-github.com/signalfx/sapm-proto v0.13.0/go.mod h1:C72HjeCW5v0Llk6pIVJ/ZH8A5GbiZpCCSkE1dSlpWxY=
-github.com/sijms/go-ora/v2 v2.7.20 h1:Q+/zNx3DMgytXMAvIbt/pUJcYj2jMRv/2Zg1DDlWhTY=
-github.com/sijms/go-ora/v2 v2.7.20/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk=
+github.com/signalfx/sapm-proto v0.14.0 h1:KWh3I5E4EkelB19aP1/54Ik8khSioC/RVRW/riOfRGg=
+github.com/signalfx/sapm-proto v0.14.0/go.mod h1:Km6PskZh966cqNoUn3AmRyGRix5VfwnxVBvn2vjRC9U=
+github.com/sijms/go-ora/v2 v2.8.11 h1:oQtSX145kCYSjnrmWdtqp2LON9wOQW09wPJ5pIEn5Tg=
+github.com/sijms/go-ora/v2 v2.8.11/go.mod h1:EHxlY6x7y9HAsdfumurRfTd+v8NrEOTR3Xl4FWlH6xk=
github.com/sirupsen/logrus v1.2.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=
@@ -1399,32 +1467,33 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
-github.com/snowflakedb/gosnowflake v1.6.25 h1:o5zUmxTOo0Eo9AdkEj8blCeiMuILrQJ+rjUMAeZhcRE=
-github.com/snowflakedb/gosnowflake v1.6.25/go.mod h1:KfO4F7bk+aXPUIvBqYxvPhxLlu2/w4TtSC8Rw/yr5Mg=
+github.com/snowflakedb/gosnowflake v1.9.0 h1:s2ZdwFxFfpqwa5CqlhnzRESnLmwU3fED6zyNOJHFBQA=
+github.com/snowflakedb/gosnowflake v1.9.0/go.mod h1:4ZgHxVf2OKwecx07WjfyAMr0gn8Qj4yvwAo68Og8wsU=
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
+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.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
-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.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
+github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
github.com/spf13/cast v1.3.1/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/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
+github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
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.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/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.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
-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.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
+github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw=
github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI=
@@ -1432,8 +1501,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -1445,23 +1515,24 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F
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.2/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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-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/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
github.com/tedsuo/ifrit v0.0.0-20180802180643-bea94bb476cc/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.792 h1:MwUEEkppjl0GIiz/rovNF54PG+RBwdfk1/+Rys8NUko=
-github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.792/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
-github.com/testcontainers/testcontainers-go v0.26.0 h1:uqcYdoOHBy1ca7gKODfBd9uTHVK3a7UL848z09MVZ0c=
-github.com/tg123/go-htpasswd v1.2.1 h1:i4wfsX1KvvkyoMiHZzjS0VzbAPWfxzI8INcZAKtutoU=
-github.com/tg123/go-htpasswd v1.2.1/go.mod h1:erHp1B86KXdwQf1X5ZrLb7erXZnWueEQezb2dql4q58=
-github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.896 h1:24LJSJctlcXa6KzV5quttY8R8NmmF4hTbeWgqKm6clw=
+github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.896/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
+github.com/testcontainers/testcontainers-go v0.29.1 h1:z8kxdFlovA2y97RWx98v/TQ+tR+SXZm6p35M+xB92zk=
+github.com/testcontainers/testcontainers-go v0.29.1/go.mod h1:SnKnKQav8UcgtKqjp/AD8bE1MqZm+3TDb/B8crE3XnI=
+github.com/tg123/go-htpasswd v1.2.2 h1:tmNccDsQ+wYsoRfiONzIhDm5OkVHQzN3w4FOBAlN6BY=
+github.com/tg123/go-htpasswd v1.2.2/go.mod h1:FcIrK0J+6zptgVwK1JDlqyajW/1B4PtuJ/FLWl7nx8A=
github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/gjson v1.14.2 h1:6BBkirS0rAHjumnjHF6qgy5d2YAJ1TLIaFE2lzfOLqo=
+github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
@@ -1475,36 +1546,35 @@ github.com/tilinna/clock v1.1.0/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRU
github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk=
+github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk=
github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
-github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
+github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
-github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
+github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
+github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/vincent-petithory/dataurl v1.0.0 h1:cXw+kPto8NLuJtlMsI152irrVw9fRDX8AbShPRpg2CI=
github.com/vincent-petithory/dataurl v1.0.0/go.mod h1:FHafX5vmDzyP+1CQATJn7WFKc9CvnvxyvZy6I1MrG/U=
github.com/vishvananda/netlink v1.2.1-beta.2 h1:Llsql0lnQEbHj0I1OuKyp8otXp0r3q0mPkuhwHfStVs=
github.com/vishvananda/netlink v1.2.1-beta.2/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
-github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA=
-github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
-github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U=
+github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1YX8=
+github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM=
+github.com/vmihailenco/msgpack/v4 v4.3.13 h1:A2wsiTbvp63ilDaWmsk2wjx6xZdxQOvpiNlKBGKKXKI=
+github.com/vmihailenco/msgpack/v4 v4.3.13/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc=
-github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f h1:NbC9yOr5At92seXK+kOr2TzU3mIWzcJOVzZasGSuwoU=
-github.com/vmware/go-vmware-nsxt v0.0.0-20220328155605-f49a14c1ef5f/go.mod h1:VEqcmf4Sp7gPB7z05QGyKVmn6xWppr7Nz8cVNvyC80o=
-github.com/vmware/govmomi v0.33.1 h1:qS2VpEBd/WLbzLO5McI6h5o5zaKsrezUxRY5r9jkW8A=
-github.com/vmware/govmomi v0.33.1/go.mod h1:QuzWGiEMA/FYlu5JXKjytiORQoxv2hTHdS2lWnIqKMM=
+github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
+github.com/vmware/go-vmware-nsxt v0.0.0-20230223012718-d31b8a1ca05e h1:Vu41Q0Pv3yMdd+tcDW6QeEUIK2L+9ZrPrq8NAMrKSLc=
+github.com/vmware/go-vmware-nsxt v0.0.0-20230223012718-d31b8a1ca05e/go.mod h1:aRq5pxwgdJpAuP97SCjX1+Db32z/b0dggQ07FDF+fqE=
+github.com/vmware/govmomi v0.36.3 h1:1Ng3CBNQVbFjCQbKtfsewy5o3dFa+EoTjqeThVISUBc=
+github.com/vmware/govmomi v0.36.3/go.mod h1:mtGWtM+YhTADHlCgJBiskSRPOZRsN9MSjPzaZLte/oQ=
github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
-github.com/wavefronthq/wavefront-sdk-go v0.15.0 h1:po9E3vh/0y7kOx8D9EtFp7kbSLLLKbmu/w/s1xGJAQU=
-github.com/wavefronthq/wavefront-sdk-go v0.15.0/go.mod h1:V72c8e+bXuLK8HpA6ioW0ll5mK9IPD+4IHNNDY75ksA=
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.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
@@ -1523,21 +1593,25 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5t
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRFc9q3yYbBkB6tsm4aCwwQV/j1JQAQ=
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
+github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes=
-go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
-go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
+github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss=
+go.einride.tech/aip v0.66.0 h1:XfV+NQX6L7EOYK11yoHHFtndeaWh3KbD9/cN/6iWEt8=
+go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M=
+go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
+go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0=
-go.mongodb.org/atlas v0.35.0 h1:fLSPEyv+QcrG5djPWMekaM+BEVfEVBKQO4yEUQl4CQ4=
-go.mongodb.org/atlas v0.35.0/go.mod h1:nfPldE9dSama6G2IbIzmEza02Ly7yFZjMMVscaM0uEc=
+go.mongodb.org/atlas v0.36.0 h1:m05S3AO7zkl+bcG1qaNsEKBnAqnKx2FDwLooHpIG3j4=
+go.mongodb.org/atlas v0.36.0/go.mod h1:nfPldE9dSama6G2IbIzmEza02Ly7yFZjMMVscaM0uEc=
go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE=
go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
@@ -1549,113 +1623,133 @@ 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.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/debugexporter v0.89.0 h1:MQUEX4OWszJQqQMqtYERiiw02Ta9QMWPe/hHWoD4YBU=
-go.opentelemetry.io/collector/exporter/debugexporter v0.89.0/go.mod h1:eLoVrKOjgPvAmg0XJuellJ03zEpEol26l8i48Rhv53Q=
-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.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-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.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/connector/forwardconnector v0.98.0 h1:zIn0GaqUKq+3GcvfdVEIB/GSv7Zdtda8q0XChXG6Qj0=
+go.opentelemetry.io/collector/connector/forwardconnector v0.98.0/go.mod h1:eC6PfRbK0Mx7QpqfnEI0uPAjq27MR//sRb5Vxzuf6eE=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0 h1:zAFCXYzpxDh64BIVujqntlN5RE4jDahbPfJBy/Wq7D0=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0/go.mod h1:S15ELDQFoP5da3NHzXJR2I8FGUnM2C1Hp6e/OhaCtw0=
+go.opentelemetry.io/collector/exporter/nopexporter v0.98.0 h1:Fc+TnZeSbMTDrk0r9kRMQK9J1IvjR9RXjIxDIn0NZY4=
+go.opentelemetry.io/collector/exporter/nopexporter v0.98.0/go.mod h1:K4lPZjTM3hlacY+tqN2b0lALLb13K9gu5C57hox1V6g=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0 h1:uhiR/luaJCwMnvvkIS/gIxBbSAp+/vbqeC3AXmuc/kg=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0/go.mod h1:1ySnK/6Cl+67FTP6ty04PX9nrXPYFPuBqZ+Xn9Jzz6Y=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0 h1:+6mRqTgoJxXxuPwI8s5fMKm0mLfwVwJgD2EB7gUNNlE=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0/go.mod h1:uGocxqpbUrZDwZz6JBKsvNCyDLrS/pnVpn4BUuPauFw=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/extension/ballastextension v0.98.0 h1:EPzsYpiSY4vAfzJMqhVK6bIh+qZRmXVskaNlRFKjA0w=
+go.opentelemetry.io/collector/extension/ballastextension v0.98.0/go.mod h1:IY/JNP0g+tUUe/w5YHgBYwv5XlH4eqo5d4th+RGROFU=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 h1:iM4fMLGig3GKmz5XNtOPKDsnCnvbi0+UHYaWsx/aSRc=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0/go.mod h1:ROnuUkZJgpKEIDf3AIVjgRGNI7KPqCKPXsw8whL6Hzs=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0 h1:1jjiC3POfIluGLVM+6y8nolKEI95/vlHAvDmIOatags=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0/go.mod h1:VQDDrhQbIoelGF+fKzy6vCQM3hWDCH2YFaZKqgTDmGk=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/receiver/nopreceiver v0.98.0 h1:PQQwtE2+qe3U6I0cfMz+L79VS41oRMM2nY8S/2mJ95E=
+go.opentelemetry.io/collector/receiver/nopreceiver v0.98.0/go.mod h1:ph9KWemo5QhxII+VEES9buzGMP6hSh/ZBLmS9oK+lJ0=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0 h1:j7lfLwc5o1dtXIPXU8LjmxadejmJVRHN57ZYGH33Wq4=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0/go.mod h1:uWDBDxaWuzF1U5S2UIhstO0+Q8aUiwiUu8uO1IYN2XQ=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-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.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
@@ -1667,6 +1761,7 @@ go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4=
go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU=
@@ -1680,8 +1775,8 @@ go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM=
go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -1698,22 +1793,21 @@ golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPh
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
-golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
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.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
-golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY=
-golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
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=
@@ -1727,8 +1821,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-20231127185646-65229373498e h1:Gvh4YaCaXNs6dKTlfgismwWZKyjVZXwOPfIyUaqU3No=
-golang.org/x/exp v0.0.0-20231127185646-65229373498e/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
+golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3 h1:/RIbNt/Zr7rVhIkQhooTxCxFcdWLGIKnZA4IXNFSrvo=
+golang.org/x/exp v0.0.0-20240205201215-2c58cdc269a3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
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=
@@ -1757,8 +1851,9 @@ 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/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -1800,7 +1895,6 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
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-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
@@ -1809,19 +1903,18 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211029224645-99673261e6eb/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.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c=
-golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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=
@@ -1835,9 +1928,8 @@ golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/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.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
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=
@@ -1849,10 +1941,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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=
@@ -1881,9 +1973,9 @@ golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7w
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-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191115151921-52ab43148777/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=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1899,7 +1991,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200509044756-6aff5f38e54f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -1928,43 +2019,41 @@ golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7w
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-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-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.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.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc=
-golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/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/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4=
-golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
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=
@@ -1975,7 +2064,10 @@ 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.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+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=
@@ -1984,8 +2076,9 @@ golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -2048,7 +2141,6 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f
golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
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.0.0-20210112230658-8b4aab62c064/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
@@ -2056,20 +2148,21 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.3/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/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM=
-golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
@@ -2094,16 +2187,17 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
+google.golang.org/api v0.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk=
+google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -2139,9 +2233,7 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
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-20210222152913-aa3ee6e6a81c/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-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
@@ -2149,12 +2241,12 @@ google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaE
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
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=
@@ -2176,8 +2268,8 @@ google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
-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/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -2192,9 +2284,9 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -2218,8 +2310,6 @@ gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/square/go-jose.v2 v2.4.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
-gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w=
-gopkg.in/square/go-jose.v2 v2.5.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/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
@@ -2239,7 +2329,10 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 h1:umQdVO0Ytx+kYadhuJNjFtDgIsIEBnKrOTvNuu8ClKI=
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0/go.mod h1:kx0CSMRpzEZfx/nFH62GLU4stZjparh/BRpM89t4XCQ=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
gotest.tools/v3 v3.2.0 h1:I0DwBVMGAx26dttAj1BtJLAkVGncrkkUXfJLC4Flt/I=
+gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -2248,46 +2341,44 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
-k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY=
-k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=
+k8s.io/api v0.30.0 h1:siWhRq7cNjy2iHssOB9SCGNCl2spiF1dO3dABqZ8niA=
+k8s.io/api v0.30.0/go.mod h1:OPlaYhoHs8EQ1ql0R/TsUgaRPhpKNxIMrKQfWUp8QSE=
k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
-k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8=
-k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
+k8s.io/apimachinery v0.30.0 h1:qxVPsyDM5XS96NIh9Oj6LavoVFYff/Pon9cZeDIkHHA=
+k8s.io/apimachinery v0.30.0/go.mod h1:iexa2somDaxdnj7bha06bhb43Zpa6eWH8N8dbqVjTUc=
k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
-k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY=
-k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=
+k8s.io/client-go v0.30.0 h1:sB1AGGlhY/o7KCyCEQ0bPWzYDL0pwOZO4vAtTSh/gJQ=
+k8s.io/client-go v0.30.0/go.mod h1:g7li5O5256qe6TYdAMyX/otJqMhIiGgTapdLchhmOaY=
k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
-k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
-k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
-k8s.io/kubelet v0.28.3 h1:bp/uIf1R5F61BlFvFtzc4PDEiK7TtFcw3wFJlc0V0LM=
-k8s.io/kubelet v0.28.3/go.mod h1:E3NHYbp/v45Ao6AD0EOZnqO3L0R6Haks6Nm0+bnFwtU=
+k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag=
+k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98=
+k8s.io/kubelet v0.30.0 h1:/pqHVR2Rn8ExCpn211wL3pMtqRFpcBcJPl4+1INbIMk=
+k8s.io/kubelet v0.30.0/go.mod h1:WukdKqbQxnj+csn3K8XOKeX7Sh60J/da25IILjvvB5s=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7 h1:ZgnF1KZsYxWIifwSNZFZgNtWE89WI5yiP5WwlfDoIyc=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
+k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
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/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4=
-sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
+sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
+sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
-sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
-skywalking.apache.org/repo/goapi v0.0.0-20231026090926-09378dd56587 h1:TY79I5Y7xRB8q5LQ+MJn7NYsYi0VL5nj1QDrUHwK7cQ=
-skywalking.apache.org/repo/goapi v0.0.0-20231026090926-09378dd56587/go.mod h1:onFubXaIoY/2FTRVrLMqCTlaNq4SilAEwF/2G0IcaBw=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
+skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4 h1:3YIFmsshgsU6FzHgnkG9Z24CkXkgoexBN5O0aSzK79g=
+skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4/go.mod h1:oD2dxcDAHVIt95Ee7kJHgZ5f64QNhrqTjQYARwfafc4=
diff --git a/cmd/otelcontribcol/main.go b/cmd/otelcontribcol/main.go
index d0c107130ee8..c969ea9ceaf4 100644
--- a/cmd/otelcontribcol/main.go
+++ b/cmd/otelcontribcol/main.go
@@ -14,7 +14,7 @@ func main() {
info := component.BuildInfo{
Command: "otelcontribcol",
Description: "Local OpenTelemetry Collector Contrib binary, testing only.",
- Version: "0.89.0-dev",
+ Version: "0.98.0-dev",
}
if err := run(otelcol.CollectorSettings{BuildInfo: info, Factories: components}); err != nil {
diff --git a/cmd/otelcontribcol/main_others.go b/cmd/otelcontribcol/main_others.go
index e80a51cd4e04..3735aecb5867 100644
--- a/cmd/otelcontribcol/main_others.go
+++ b/cmd/otelcontribcol/main_others.go
@@ -1,7 +1,6 @@
// Code generated by "go.opentelemetry.io/collector/cmd/builder". DO NOT EDIT.
//go:build !windows
-// +build !windows
package main
diff --git a/cmd/otelcontribcol/main_windows.go b/cmd/otelcontribcol/main_windows.go
index 65eb6637e768..bb68124a52c9 100644
--- a/cmd/otelcontribcol/main_windows.go
+++ b/cmd/otelcontribcol/main_windows.go
@@ -1,47 +1,28 @@
// Code generated by "go.opentelemetry.io/collector/cmd/builder". DO NOT EDIT.
//go:build windows
-// +build windows
package main
import (
+ "errors"
"fmt"
- "os"
"go.opentelemetry.io/collector/otelcol"
+ "golang.org/x/sys/windows"
"golang.org/x/sys/windows/svc"
)
func run(params otelcol.CollectorSettings) error {
- if useInteractiveMode, err := checkUseInteractiveMode(); err != nil {
- return err
- } else if useInteractiveMode {
- return runInteractive(params)
- } else {
- return runService(params)
- }
-}
-
-func checkUseInteractiveMode() (bool, error) {
- // If environment variable NO_WINDOWS_SERVICE is set with any value other
- // than 0, use interactive mode instead of running as a service. This should
- // be set in case running as a service is not possible or desired even
- // though the current session is not detected to be interactive
- if value, present := os.LookupEnv("NO_WINDOWS_SERVICE"); present && value != "0" {
- return true, nil
- }
-
- isInteractiveSession, err := svc.IsAnInteractiveSession()
- if err != nil {
- return false, fmt.Errorf("failed to determine if we are running in an interactive session: %w", err)
- }
- return isInteractiveSession, nil
-}
-
-func runService(params otelcol.CollectorSettings) error {
- // do not need to supply service name when startup is invoked through Service Control Manager directly
+ // No need to supply service name when startup is invoked through
+ // the Service Control Manager directly.
if err := svc.Run("", otelcol.NewSvcHandler(params)); err != nil {
+ if errors.Is(err, windows.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) {
+ // Per https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-startservicectrldispatchera#return-value
+ // this means that the process is not running as a service, so run interactively.
+ return runInteractive(params)
+ }
+
return fmt.Errorf("failed to start collector server: %w", err)
}
diff --git a/cmd/otelcontribcol/processors_test.go b/cmd/otelcontribcol/processors_test.go
deleted file mode 100644
index 053d8290d3ae..000000000000
--- a/cmd/otelcontribcol/processors_test.go
+++ /dev/null
@@ -1,290 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
-package main
-
-import (
- "context"
- "errors"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/consumer/consumertest"
- "go.opentelemetry.io/collector/processor"
- "go.opentelemetry.io/collector/processor/memorylimiterprocessor"
- "go.opentelemetry.io/collector/processor/processortest"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/attraction"
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
- "github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor"
- "github.com/open-telemetry/opentelemetry-collector-contrib/processor/remotetapprocessor"
- "github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor"
- "github.com/open-telemetry/opentelemetry-collector-contrib/processor/spanprocessor"
-)
-
-func TestDefaultProcessors(t *testing.T) {
- t.Parallel()
-
- allFactories, err := components()
- require.NoError(t, err)
-
- procFactories := allFactories.Processors
-
- tests := []struct {
- getConfigFn getProcessorConfigFn
- processor component.Type
- skipLifecycle bool
- }{
- {
- processor: "attributes",
- getConfigFn: func() component.Config {
- cfg := procFactories["attributes"].CreateDefaultConfig().(*attributesprocessor.Config)
- cfg.Actions = []attraction.ActionKeyValue{
- {Key: "attribute1", Action: attraction.INSERT, Value: 123},
- }
- return cfg
- },
- },
- {
- processor: "batch",
- },
- {
- processor: "datadog",
- skipLifecycle: true, // requires external exporters to be configured to route data
- },
- {
- processor: "deltatorate",
- },
- {
- processor: "filter",
- },
- {
- processor: "groupbyattrs",
- },
- {
- processor: "groupbytrace",
- },
- {
- processor: "k8sattributes",
- skipLifecycle: true, // Requires a k8s API to communicate with
- },
- {
- processor: "memory_limiter",
- getConfigFn: func() component.Config {
- cfg := procFactories["memory_limiter"].CreateDefaultConfig().(*memorylimiterprocessor.Config)
- cfg.CheckInterval = 100 * time.Millisecond
- cfg.MemoryLimitMiB = 1024 * 1024
- return cfg
- },
- },
- {
- processor: "metricstransform",
- },
- {
- processor: "experimental_metricsgeneration",
- },
- {
- processor: "probabilistic_sampler",
- },
- {
- processor: "resourcedetection",
- },
- {
- processor: "resource",
- getConfigFn: func() component.Config {
- cfg := procFactories["resource"].CreateDefaultConfig().(*resourceprocessor.Config)
- cfg.AttributesActions = []attraction.ActionKeyValue{
- {Key: "attribute1", Action: attraction.INSERT, Value: 123},
- }
- return cfg
- },
- },
- {
- processor: "routing",
- skipLifecycle: true, // Requires external exporters to be configured to route data
- },
- {
- processor: "span",
- getConfigFn: func() component.Config {
- cfg := procFactories["span"].CreateDefaultConfig().(*spanprocessor.Config)
- cfg.Rename.FromAttributes = []string{"test-key"}
- return cfg
- },
- },
- {
- processor: "servicegraph",
- skipLifecycle: true,
- },
- {
- processor: "spanmetrics",
- skipLifecycle: true, // Requires a running exporter to convert data to/from
- },
- {
- processor: "cumulativetodelta",
- },
- {
- processor: "tail_sampling",
- },
- {
- processor: "transform",
- },
- {
- processor: "redaction",
- },
- {
- processor: "remotetap",
- getConfigFn: func() component.Config {
- cfg := procFactories["remotetap"].CreateDefaultConfig().(*remotetapprocessor.Config)
- cfg.Endpoint = "localhost:0"
- return cfg
- },
- },
- {
- processor: "sumologic",
- },
- }
-
- assert.Equal(t, len(procFactories), len(tests), "All processors must be added to lifecycle tests")
- for _, tt := range tests {
- t.Run(string(tt.processor), func(t *testing.T) {
- factory := procFactories[tt.processor]
- assert.Equal(t, tt.processor, factory.Type())
-
- t.Run("shutdown", func(t *testing.T) {
- verifyProcessorShutdown(t, factory, tt.getConfigFn)
- })
- t.Run("lifecycle", func(t *testing.T) {
- if tt.skipLifecycle {
- t.SkipNow()
- }
- verifyProcessorLifecycle(t, factory, tt.getConfigFn)
- })
- })
- }
-}
-
-// getProcessorConfigFn is used customize the configuration passed to the verification.
-// This is used to change ports or provide values required but not provided by the
-// default configuration.
-type getProcessorConfigFn func() component.Config
-
-// verifyProcessorLifecycle is used to test if a processor type can handle the typical
-// lifecycle of a component. The getConfigFn parameter only need to be specified if
-// the test can't be done with the default configuration for the component.
-func verifyProcessorLifecycle(t *testing.T, factory processor.Factory, getConfigFn getProcessorConfigFn) {
- ctx := context.Background()
- host := newAssertNoErrorHost(t)
- processorCreationSet := processortest.NewNopCreateSettings()
-
- if getConfigFn == nil {
- getConfigFn = factory.CreateDefaultConfig
- }
-
- createFns := map[component.DataType]createProcessorFn{
- component.DataTypeLogs: wrapCreateLogsProc(factory),
- component.DataTypeTraces: wrapCreateTracesProc(factory),
- component.DataTypeMetrics: wrapCreateMetricsProc(factory),
- }
-
- for i := 0; i < 2; i++ {
- procs := make(map[component.DataType]component.Component)
- for dataType, createFn := range createFns {
- proc, err := createFn(ctx, processorCreationSet, getConfigFn())
- if errors.Is(err, component.ErrDataTypeIsNotSupported) {
- continue
- }
- require.NoError(t, err)
- procs[dataType] = proc
- require.NoError(t, proc.Start(ctx, host))
- }
- for dataType, proc := range procs {
- assert.NotPanics(t, func() {
- switch dataType {
- case component.DataTypeLogs:
- logsProc := proc.(processor.Logs)
- logs := testdata.GenerateLogsManyLogRecordsSameResource(2)
- if !logsProc.Capabilities().MutatesData {
- logs.MarkReadOnly()
- }
- assert.NoError(t, logsProc.ConsumeLogs(ctx, logs))
- case component.DataTypeMetrics:
- metricsProc := proc.(processor.Metrics)
- metrics := testdata.GenerateMetricsTwoMetrics()
- if !metricsProc.Capabilities().MutatesData {
- metrics.MarkReadOnly()
- }
- assert.NoError(t, metricsProc.ConsumeMetrics(ctx, metrics))
- case component.DataTypeTraces:
- tracesProc := proc.(processor.Traces)
- traces := testdata.GenerateTracesTwoSpansSameResource()
- if !tracesProc.Capabilities().MutatesData {
- traces.MarkReadOnly()
- }
- assert.NoError(t, tracesProc.ConsumeTraces(ctx, traces))
- }
- })
- require.NoError(t, proc.Shutdown(ctx))
- }
- }
-}
-
-// verifyProcessorShutdown is used to test if a processor type can be shutdown without being started first.
-// We disregard errors being returned by shutdown, we're just making sure the processors don't panic.
-func verifyProcessorShutdown(tb testing.TB, factory processor.Factory, getConfigFn getProcessorConfigFn) {
- ctx := context.Background()
- processorCreationSet := processortest.NewNopCreateSettings()
-
- if getConfigFn == nil {
- getConfigFn = factory.CreateDefaultConfig
- }
-
- createFns := []createProcessorFn{
- wrapCreateLogsProc(factory),
- wrapCreateTracesProc(factory),
- wrapCreateMetricsProc(factory),
- }
-
- for _, createFn := range createFns {
- p, err := createFn(ctx, processorCreationSet, getConfigFn())
- if errors.Is(err, component.ErrDataTypeIsNotSupported) {
- continue
- }
- if p == nil {
- continue
- }
- assert.NotPanics(tb, func() {
- _ = p.Shutdown(ctx)
- })
- }
-}
-
-type createProcessorFn func(
- ctx context.Context,
- set processor.CreateSettings,
- cfg component.Config,
-) (component.Component, error)
-
-func wrapCreateLogsProc(factory processor.Factory) createProcessorFn {
- return func(ctx context.Context, set processor.CreateSettings, cfg component.Config) (component.Component, error) {
- return factory.CreateLogsProcessor(ctx, set, cfg, consumertest.NewNop())
- }
-}
-
-func wrapCreateMetricsProc(factory processor.Factory) createProcessorFn {
- return func(ctx context.Context, set processor.CreateSettings, cfg component.Config) (component.Component, error) {
- return factory.CreateMetricsProcessor(ctx, set, cfg, consumertest.NewNop())
- }
-}
-
-func wrapCreateTracesProc(factory processor.Factory) createProcessorFn {
- return func(ctx context.Context, set processor.CreateSettings, cfg component.Config) (component.Component, error) {
- return factory.CreateTracesProcessor(ctx, set, cfg, consumertest.NewNop())
- }
-}
diff --git a/cmd/otelcontribcol/receivers_test.go b/cmd/otelcontribcol/receivers_test.go
index a33ecc5fbc7c..c81c02503674 100644
--- a/cmd/otelcontribcol/receivers_test.go
+++ b/cmd/otelcontribcol/receivers_test.go
@@ -1,10 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-// Skip tests on Windows temporarily, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/11451
-//go:build !windows
-// +build !windows
-
package main
import (
@@ -33,6 +29,7 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jmxreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/mongodbatlasreceiver"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/namedpipereceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/otlpjsonfilereceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/redisreceiver"
@@ -41,6 +38,7 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/webhookeventreceiver"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/windowseventlogreceiver"
)
func TestDefaultReceivers(t *testing.T) {
@@ -50,13 +48,13 @@ func TestDefaultReceivers(t *testing.T) {
rcvrFactories := allFactories.Receivers
tests := []struct {
- getConfigFn getReceiverConfigFn
- receiver component.Type
- skipLifecyle bool
+ getConfigFn getReceiverConfigFn
+ receiver component.Type
+ skipLifecycle bool
}{
{
- receiver: "active_directory_ds",
- skipLifecyle: true, // Requires a running windows service
+ receiver: "active_directory_ds",
+ skipLifecycle: true, // Requires a running windows service
},
{
receiver: "aerospike",
@@ -79,18 +77,18 @@ func TestDefaultReceivers(t *testing.T) {
{
receiver: "awscontainerinsightreceiver",
// TODO: skipped since it will only function in a container environment with procfs in expected location.
- skipLifecyle: true,
+ skipLifecycle: true,
},
{
- receiver: "awsecscontainermetrics",
- skipLifecyle: true, // Requires container metaendpoint to be running
+ receiver: "awsecscontainermetrics",
+ skipLifecycle: true, // Requires container metaendpoint to be running
},
{
receiver: "awsfirehose",
},
{
- receiver: "awsxray",
- skipLifecyle: true, // Requires AWS endpoint to check identity to run
+ receiver: "awsxray",
+ skipLifecycle: true, // Requires AWS endpoint to check identity to run
},
{
receiver: "azureblob",
@@ -100,7 +98,7 @@ func TestDefaultReceivers(t *testing.T) {
cfg.EventHub.EndPoint = "DefaultEndpointsProtocol=http;SharedAccessKeyName=secret;SharedAccessKey=secret;Endpoint=test.test"
return cfg
},
- skipLifecyle: true, // Requires Azure event hub to run
+ skipLifecycle: true, // Requires Azure event hub to run
},
{
receiver: "azureeventhub",
@@ -109,7 +107,7 @@ func TestDefaultReceivers(t *testing.T) {
cfg.Connection = "Endpoint=sb://example.com/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=superSecret1234=;EntityPath=hubName"
return cfg
},
- skipLifecyle: true, // Requires Azure event hub to run
+ skipLifecycle: true, // Requires Azure event hub to run
},
{
receiver: "azuremonitor",
@@ -121,7 +119,7 @@ func TestDefaultReceivers(t *testing.T) {
cfg.ClientSecret = "client_secret"
return cfg
},
- skipLifecyle: true, // Requires Azure event hub to run
+ skipLifecycle: true, // Requires Azure event hub to run
},
{
receiver: "bigip",
@@ -133,15 +131,15 @@ func TestDefaultReceivers(t *testing.T) {
cfg.Endpoint = "0.0.0.0:0"
return cfg
},
- skipLifecyle: true, // Panics after test have completed, requires a wait group
+ skipLifecycle: true, // Panics after test have completed, requires a wait group
},
{
- receiver: "cloudflare",
- skipLifecyle: true,
+ receiver: "cloudflare",
+ skipLifecycle: true,
},
{
- receiver: "cloudfoundry",
- skipLifecyle: true, // Requires UAA (auth) endpoint to run
+ receiver: "cloudfoundry",
+ skipLifecycle: true, // Requires UAA (auth) endpoint to run
},
{
receiver: "chrony",
@@ -166,8 +164,8 @@ func TestDefaultReceivers(t *testing.T) {
},
},
{
- receiver: "docker_stats",
- skipLifecyle: true,
+ receiver: "docker_stats",
+ skipLifecycle: true,
},
{
receiver: "elasticsearch",
@@ -184,8 +182,8 @@ func TestDefaultReceivers(t *testing.T) {
},
},
{
- receiver: "file",
- skipLifecyle: true, // Requires an existing JSONL file
+ receiver: "file",
+ skipLifecycle: true, // Requires an existing JSONL file
},
{
receiver: "filestats",
@@ -200,8 +198,8 @@ func TestDefaultReceivers(t *testing.T) {
receiver: "googlecloudspanner",
},
{
- receiver: "googlecloudpubsub",
- skipLifecyle: true, // Requires a pubsub subscription
+ receiver: "googlecloudpubsub",
+ skipLifecycle: true, // Requires a pubsub subscription
},
{
receiver: "haproxy",
@@ -216,15 +214,15 @@ func TestDefaultReceivers(t *testing.T) {
receiver: "influxdb",
},
{
- receiver: "iis",
- skipLifecyle: true, // Requires a running windows process
+ receiver: "iis",
+ skipLifecycle: true, // Requires a running windows process
},
{
receiver: "jaeger",
},
{
- receiver: "jmx",
- skipLifecyle: true, // Requires a running instance with JMX
+ receiver: "jmx",
+ skipLifecycle: true, // Requires a running instance with JMX
getConfigFn: func() component.Config {
cfg := jmxreceiver.NewFactory().CreateDefaultConfig().(*jmxreceiver.Config)
cfg.Endpoint = "localhost:1234"
@@ -233,31 +231,31 @@ func TestDefaultReceivers(t *testing.T) {
},
},
{
- receiver: "journald",
- skipLifecyle: runtime.GOOS != "linux",
+ receiver: "journald",
+ skipLifecycle: runtime.GOOS != "linux",
},
{
- receiver: "k8s_events",
- skipLifecyle: true, // need a valid Kubernetes host and port
+ receiver: "k8s_events",
+ skipLifecycle: true, // need a valid Kubernetes host and port
},
{
- receiver: "k8sobjects",
- skipLifecyle: true, // need a valid Kubernetes host and port
+ receiver: "k8sobjects",
+ skipLifecycle: true, // need a valid Kubernetes host and port
},
{
- receiver: "kafka",
- skipLifecyle: true, // TODO: It needs access to internals to successful start.
+ receiver: "kafka",
+ skipLifecycle: true, // TODO: It needs access to internals to successful start.
},
{
receiver: "kafkametrics",
},
{
- receiver: "k8s_cluster",
- skipLifecyle: true, // Requires access to the k8s host and port in order to run
+ receiver: "k8s_cluster",
+ skipLifecycle: true, // Requires access to the k8s host and port in order to run
},
{
- receiver: "kubeletstats",
- skipLifecyle: true, // Requires access to certificates to auth against kubelet
+ receiver: "kubeletstats",
+ skipLifecycle: true, // Requires access to certificates to auth against kubelet
},
{
receiver: "loki",
@@ -266,8 +264,8 @@ func TestDefaultReceivers(t *testing.T) {
receiver: "memcached",
},
{
- receiver: "mongodb",
- skipLifecyle: true, // Causes tests to timeout
+ receiver: "mongodb",
+ skipLifecycle: true, // Causes tests to timeout
},
{
receiver: "mongodbatlas",
@@ -287,8 +285,8 @@ func TestDefaultReceivers(t *testing.T) {
receiver: "nsxt",
},
{
- receiver: "opencensus",
- skipLifecyle: true, // TODO: Usage of CMux doesn't allow proper shutdown.
+ receiver: "opencensus",
+ skipLifecycle: true, // TODO: Usage of CMux doesn't allow proper shutdown.
},
{
receiver: "oracledb",
@@ -305,8 +303,8 @@ func TestDefaultReceivers(t *testing.T) {
},
},
{
- receiver: "podman_stats",
- skipLifecyle: true, // Requires a running podman daemon
+ receiver: "podman_stats",
+ skipLifecycle: true, // Requires a running podman daemon
},
{
receiver: "postgresql",
@@ -315,17 +313,15 @@ func TestDefaultReceivers(t *testing.T) {
receiver: "prometheus",
getConfigFn: func() component.Config {
cfg := rcvrFactories["prometheus"].CreateDefaultConfig().(*prometheusreceiver.Config)
- cfg.PrometheusConfig = &promconfig.Config{
- ScrapeConfigs: []*promconfig.ScrapeConfig{
- {JobName: "test"},
- },
+ cfg.PrometheusConfig.ScrapeConfigs = []*promconfig.ScrapeConfig{
+ {JobName: "test"},
}
return cfg
},
},
{
- receiver: "pulsar",
- skipLifecyle: true, // TODO It requires a running pulsar instance to start successfully.
+ receiver: "pulsar",
+ skipLifecycle: true, // TODO It requires a running pulsar instance to start successfully.
},
{
receiver: "rabbitmq",
@@ -388,19 +384,20 @@ func TestDefaultReceivers(t *testing.T) {
receiver: "sqlquery",
},
{
- receiver: "sqlserver",
- skipLifecyle: true, // Requires a running windows process
+ receiver: "sqlserver",
+ skipLifecycle: true, // Requires a running windows process
},
{
- receiver: "sshcheck",
+ receiver: "sshcheck",
+ skipLifecycle: runtime.GOOS == "windows",
},
{
receiver: "statsd",
},
{
- receiver: "wavefront",
- skipLifecyle: true, // Depends on carbon receiver to be running correctly
+ receiver: "wavefront",
+ skipLifecycle: true, // Depends on carbon receiver to be running correctly
},
{
receiver: "webhookevent",
@@ -411,12 +408,17 @@ func TestDefaultReceivers(t *testing.T) {
},
},
{
- receiver: "windowseventlog",
- skipLifecyle: true, // Requires a running windows process
+ receiver: "windowseventlog",
+ skipLifecycle: runtime.GOOS != "windows",
+ getConfigFn: func() component.Config {
+ cfg := rcvrFactories["windowseventlog"].CreateDefaultConfig().(*windowseventlogreceiver.WindowsLogConfig)
+ cfg.InputConfig.Channel = "Application"
+ return cfg
+ },
},
{
- receiver: "windowsperfcounters",
- skipLifecyle: true, // Requires a running windows process
+ receiver: "windowsperfcounters",
+ skipLifecycle: runtime.GOOS != "windows",
},
{
receiver: "zipkin",
@@ -454,8 +456,17 @@ func TestDefaultReceivers(t *testing.T) {
receiver: "vcenter",
},
{
- receiver: "solace",
- skipLifecyle: true, // Requires a solace broker to connect to
+ receiver: "solace",
+ skipLifecycle: true, // Requires a solace broker to connect to
+ },
+ {
+ receiver: "namedpipe",
+ skipLifecycle: runtime.GOOS != "linux",
+ getConfigFn: func() component.Config {
+ cfg := rcvrFactories["namedpipe"].CreateDefaultConfig().(*namedpipereceiver.NamedPipeConfig)
+ cfg.InputConfig.Path = "/tmp/foo"
+ return cfg
+ },
},
}
@@ -469,7 +480,7 @@ func TestDefaultReceivers(t *testing.T) {
verifyReceiverShutdown(t, factory, tt.getConfigFn)
})
t.Run("lifecycle", func(t *testing.T) {
- if tt.skipLifecyle {
+ if tt.skipLifecycle {
t.SkipNow()
}
verifyReceiverLifecycle(t, factory, tt.getConfigFn)
diff --git a/cmd/oteltestbedcol/Makefile b/cmd/oteltestbedcol/Makefile
index ded7a36092dc..1994cf483835 100644
--- a/cmd/oteltestbedcol/Makefile
+++ b/cmd/oteltestbedcol/Makefile
@@ -1 +1,4 @@
include ../../Makefile.Common
+
+lint: checklicense misspell
+ @echo "skipping lint: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/29449"
diff --git a/cmd/oteltestbedcol/builder-config.yaml b/cmd/oteltestbedcol/builder-config.yaml
index dabe22086a3b..4886d926d02e 100644
--- a/cmd/oteltestbedcol/builder-config.yaml
+++ b/cmd/oteltestbedcol/builder-config.yaml
@@ -2,54 +2,54 @@ dist:
module: github.com/open-telemetry/opentelemetry-collector-contrib/cmd/oteltestbedcol
name: oteltestbedcol
description: OpenTelemetry Collector binary for testbed only tests.
- version: 0.89.0-dev
- otelcol_version: 0.89.0
+ version: 0.98.0-dev
+ otelcol_version: 0.97.0
extensions:
- - gomod: go.opentelemetry.io/collector/extension/ballastextension v0.89.0
- - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.89.0
- import: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage
+ - gomod: go.opentelemetry.io/collector/extension/ballastextension v0.98.0
+ - gomod: go.opentelemetry.io/collector/extension/zpagesextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.98.0
exporters:
- - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.89.0
- - gomod: go.opentelemetry.io/collector/exporter/loggingexporter v0.89.0
- - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.89.0
- - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.89.0
+ - gomod: go.opentelemetry.io/collector/exporter/debugexporter v0.98.0
+ - gomod: go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0
+ - gomod: go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.98.0
processors:
- - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.89.0
- - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.89.0
+ - gomod: go.opentelemetry.io/collector/processor/batchprocessor v0.98.0
+ - gomod: go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.98.0
receivers:
- - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.89.0
- - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0
+ - gomod: go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.98.0
+ - gomod: github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.98.0
replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
+ - github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage => ../../extension/storage/filestorage
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver => ../../receiver/opencensusreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver => ../../receiver/splunkhecreceiver
@@ -84,6 +84,7 @@ replaces:
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter => ../../exporter/signalfxexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry => ../../pkg/resourcetotelemetry
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter => ../../exporter/opencensusexporter
+ - github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter => ../../exporter/opensearchexporter
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent => ../../internal/sharedcomponent
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver => ../../receiver/prometheusreceiver
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter => ../../exporter/sapmexporter
diff --git a/cmd/oteltestbedcol/components.go b/cmd/oteltestbedcol/components.go
index 8d4bd79063ef..d3a593c7b081 100644
--- a/cmd/oteltestbedcol/components.go
+++ b/cmd/oteltestbedcol/components.go
@@ -6,7 +6,6 @@ import (
"go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/exporter"
debugexporter "go.opentelemetry.io/collector/exporter/debugexporter"
- loggingexporter "go.opentelemetry.io/collector/exporter/loggingexporter"
otlpexporter "go.opentelemetry.io/collector/exporter/otlpexporter"
otlphttpexporter "go.opentelemetry.io/collector/exporter/otlphttpexporter"
"go.opentelemetry.io/collector/extension"
@@ -21,6 +20,7 @@ import (
carbonexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter"
opencensusexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter"
+ opensearchexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter"
prometheusexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter"
sapmexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter"
signalfxexporter "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter"
@@ -82,11 +82,11 @@ func components() (otelcol.Factories, error) {
factories.Exporters, err = exporter.MakeFactoryMap(
debugexporter.NewFactory(),
- loggingexporter.NewFactory(),
otlpexporter.NewFactory(),
otlphttpexporter.NewFactory(),
carbonexporter.NewFactory(),
opencensusexporter.NewFactory(),
+ opensearchexporter.NewFactory(),
prometheusexporter.NewFactory(),
sapmexporter.NewFactory(),
signalfxexporter.NewFactory(),
diff --git a/cmd/oteltestbedcol/go.mod b/cmd/oteltestbedcol/go.mod
index e793656f15a6..ac5237cffe39 100644
--- a/cmd/oteltestbedcol/go.mod
+++ b/cmd/oteltestbedcol/go.mod
@@ -2,299 +2,302 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/oteltestbedcol
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/exporter/debugexporter 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/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
- golang.org/x/sys v0.14.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/zipkinexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/pprofextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/attributesprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourceprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/carbonreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/fluentforwardreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/jaegerreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/sapmreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/signalfxreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/splunkhecreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/syslogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/tcplogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/udplogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/zipkinreceiver v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/exporter/debugexporter v0.98.0
+ go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0
+ go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0
+ go.opentelemetry.io/collector/extension v0.98.0
+ go.opentelemetry.io/collector/extension/ballastextension v0.98.0
+ go.opentelemetry.io/collector/extension/zpagesextension v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/processor v0.98.0
+ go.opentelemetry.io/collector/processor/batchprocessor v0.98.0
+ go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ go.uber.org/goleak v1.3.0
+ golang.org/x/sys v0.19.0
)
require (
- cloud.google.com/go/compute v1.23.2 // indirect
- cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
- github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
- github.com/Azure/go-autorest v14.2.0+incompatible // indirect
- github.com/Azure/go-autorest/autorest v0.11.29 // indirect
- github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect
- github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
- github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
- github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect
- github.com/Azure/go-autorest/logger v0.2.1 // indirect
- github.com/Azure/go-autorest/tracing v0.6.0 // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
+ cloud.google.com/go/compute/metadata v0.2.3 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 // indirect
+ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 // indirect
+ github.com/Code-Hex/go-generics-cache v1.3.1 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/alecthomas/participle/v2 v2.1.0 // indirect
- github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
- github.com/antonmedv/expr v1.15.3 // indirect
- github.com/apache/thrift v0.19.0 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect
+ github.com/apache/thrift v0.20.0 // indirect
github.com/armon/go-metrics v0.4.1 // indirect
- github.com/aws/aws-sdk-go v1.47.10 // indirect
+ github.com/aws/aws-sdk-go v1.50.32 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
- github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dennwc/varint v1.0.0 // indirect
- github.com/digitalocean/godo v1.99.0 // indirect
- github.com/docker/distribution v2.8.2+incompatible // indirect
- github.com/docker/docker v24.0.7+incompatible // indirect
- github.com/docker/go-connections v0.4.0 // indirect
+ github.com/digitalocean/godo v1.109.0 // indirect
+ github.com/distribution/reference v0.5.0 // indirect
+ github.com/docker/docker v25.0.5+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
- github.com/emicklei/go-restful/v3 v3.10.2 // indirect
- github.com/envoyproxy/go-control-plane v0.11.1 // indirect
- github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect
+ github.com/elastic/go-structform v0.0.10 // indirect
+ github.com/emicklei/go-restful/v3 v3.11.0 // indirect
+ github.com/envoyproxy/go-control-plane v0.12.0 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect
+ github.com/expr-lang/expr v1.16.3 // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-openapi/jsonpointer v0.20.0 // indirect
- github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.4 // indirect
- github.com/go-resty/resty/v2 v2.7.0 // indirect
+ github.com/go-openapi/jsonpointer v0.20.2 // indirect
+ github.com/go-openapi/jsonreference v0.20.4 // indirect
+ github.com/go-openapi/swag v0.22.9 // indirect
+ github.com/go-resty/resty/v2 v2.11.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/go-zookeeper/zk v1.0.3 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/gogo/googleapis v1.4.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
+ github.com/golang-jwt/jwt/v5 v5.2.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/s2a-go v0.1.7 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
- github.com/googleapis/gax-go/v2 v2.12.0 // indirect
- github.com/gophercloud/gophercloud v1.5.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.3 // indirect
+ github.com/gophercloud/gophercloud v1.8.0 // indirect
github.com/gorilla/mux v1.8.1 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
- github.com/hashicorp/consul/api v1.25.1 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
+ github.com/hashicorp/consul/api v1.28.2 // indirect
github.com/hashicorp/cronexpr v1.1.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
- github.com/hashicorp/go-hclog v1.5.0 // indirect
+ github.com/hashicorp/go-hclog v1.6.2 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-retryablehttp v0.7.4 // indirect
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
- github.com/hashicorp/nomad/api v0.0.0-20230718173136-3a687930bd3e // indirect
+ github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
+ github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 // indirect
github.com/hashicorp/serf v0.10.1 // indirect
- github.com/hetznercloud/hcloud-go/v2 v2.0.0 // indirect
+ github.com/hetznercloud/hcloud-go/v2 v2.6.0 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 // indirect
- github.com/ionos-cloud/sdk-go/v6 v6.1.8 // indirect
- github.com/jaegertracing/jaeger v1.48.0 // indirect
+ github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 // indirect
+ github.com/ionos-cloud/sdk-go/v6 v6.1.11 // indirect
+ github.com/jaegertracing/jaeger v1.55.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 // indirect
- github.com/linode/linodego v1.19.0 // indirect
+ github.com/linode/linodego v1.30.0 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // 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.19 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
- github.com/miekg/dns v1.1.55 // indirect
+ github.com/miekg/dns v1.1.58 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
+ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl 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/resourcetotelemetry v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.98.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
+ github.com/opensearch-project/opensearch-go/v2 v2.3.0 // indirect
github.com/openzipkin/zipkin-go v0.4.2 // indirect
- github.com/ovh/go-ovh v1.4.1 // indirect
+ github.com/ovh/go-ovh v1.4.3 // indirect
github.com/philhofer/fwd v1.1.2 // indirect
- github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
+ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // 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/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.52.2 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/prometheus v0.47.2 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
+ github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e // indirect
github.com/rs/cors v1.10.1 // indirect
- github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3 // indirect
- github.com/signalfx/sapm-proto v0.13.0 // indirect
+ github.com/signalfx/sapm-proto v0.14.0 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/tinylib/msgp v1.1.9 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
+ github.com/valyala/fastjson v1.6.4 // indirect
github.com/vultr/govultr/v2 v2.17.2 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
- go.etcd.io/bbolt v1.3.8 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.etcd.io/bbolt v1.3.9 // indirect
go.opencensus.io v0.24.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/configgrpc v0.89.0 // indirect
- go.opentelemetry.io/collector/config/confighttp 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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls 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/consumer 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/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.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 v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confighttp v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata v1.5.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/contrib/zpages v0.50.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/trace v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/term v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/crypto v0.22.0 // indirect
+ golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- golang.org/x/tools v0.15.0 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/api v0.150.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.19.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/api v0.170.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.2 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- k8s.io/api v0.28.3 // indirect
- k8s.io/apimachinery v0.28.3 // indirect
- k8s.io/client-go v0.28.3 // indirect
- k8s.io/klog/v2 v2.100.1 // indirect
- k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
- k8s.io/utils v0.0.0-20230711102312-30195339c3c7 // indirect
+ k8s.io/api v0.29.3 // indirect
+ k8s.io/apimachinery v0.29.3 // indirect
+ k8s.io/client-go v0.29.3 // indirect
+ k8s.io/klog/v2 v2.120.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+ k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage => ../../extension/storage/filestorage
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver => ../../receiver/opencensusreceiver
@@ -363,6 +366,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourceto
replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter => ../../exporter/opencensusexporter
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter => ../../exporter/opensearchexporter
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent => ../../internal/sharedcomponent
replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver => ../../receiver/prometheusreceiver
diff --git a/cmd/oteltestbedcol/go.sum b/cmd/oteltestbedcol/go.sum
index 2cb7c42d74c9..955ab5428875 100644
--- a/cmd/oteltestbedcol/go.sum
+++ b/cmd/oteltestbedcol/go.sum
@@ -19,10 +19,10 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute v1.23.2 h1:nWEMDhgbBkBJjfpVySqU4jgWdc22PLR0o4vEexZHers=
-cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns=
-cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
-cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
+cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
+cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
@@ -34,64 +34,55 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw=
-github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
-github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
-github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw=
-github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs=
-github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk=
-github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8=
-github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c=
-github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
-github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
-github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
-github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw=
-github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU=
-github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk=
-github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
-github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac=
-github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E=
-github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
-github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
-github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
-github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g=
+github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
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/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/Microsoft/hcsshim v0.11.1 h1:hJ3s7GbWlGK4YVV92sO88BQSyF4ZLVy7/awqOlPxFbA=
+github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
+github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE=
+github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g=
github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
-github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4=
-github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
-github.com/antonmedv/expr v1.15.3 h1:q3hOJZNvLvhqE8OHBs1cFRdbXFNKuA+bHmRaI+AmRmI=
-github.com/antonmedv/expr v1.15.3/go.mod h1:0E/6TxnOlRNp81GMzX9QfDPAmHo2Phg00y4JUv1ihsE=
-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/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
+github.com/apache/thrift v0.20.0 h1:631+KvYbsBZxmuJjYwhezVsrfc/TbqtZV4QcxOX1fOI=
+github.com/apache/thrift v0.20.0/go.mod h1:hOk1BQqcp2OLzGsyVXdfMk7YFlMxK3aoEVhjD06QhB8=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
@@ -99,8 +90,23 @@ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+
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/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
-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/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
+github.com/aws/aws-sdk-go v1.50.32 h1:POt81DvegnpQKM4DMDLlHz1CO6OBnEoQ1gRhYFd7QRY=
+github.com/aws/aws-sdk-go v1.50.32/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
+github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
+github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4=
+github.com/aws/aws-sdk-go-v2/credentials v1.13.24/go.mod h1:jYPYi99wUOPIFi0rhiOvXeSEReVOzBqFNOX5bXYoG2o=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.13.3/go.mod h1:4Q0UFP0YJf0NrsEuEYHpM9fTSEVnD16Z3uyEF7J9JGM=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.33/go.mod h1:7i0PF1ME/2eUPFcjkVIwq+DOygHEoK92t5cDqNgYbIw=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.27/go.mod h1:UrHnn3QV/d0pBZ6QBAEQcqFLf8FAzLmoUfPVIueOvoM=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.3.34/go.mod h1:Etz2dj6UHYuw+Xw830KfzCfWGMzqvUTCjUj5b76GVDc=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.27/go.mod h1:EOwBD4J4S5qYszS5/3DpkejfuK+Z5/1uzICfPaZLtqw=
+github.com/aws/aws-sdk-go-v2/service/sso v1.12.10/go.mod h1:ouy2P4z6sJN70fR3ka3wD3Ro3KezSxU6eKGQI2+2fjI=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5St5XIHHrQQtkxqrRincx4hmMHOk=
+github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8=
+github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0=
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=
@@ -108,15 +114,14 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -124,41 +129,49 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/containerd/containerd v1.7.7 h1:QOC2K4A42RQpcrZyptP6z9EJZnlHfHJUfZrAAHe15q4=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
+github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
+github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=
+github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
-github.com/digitalocean/godo v1.99.0 h1:gUHO7n9bDaZFWvbzOum4bXE0/09ZuYA9yA8idQHX57E=
-github.com/digitalocean/godo v1.99.0/go.mod h1:SsS2oXo2rznfM/nORlZ/6JaUJZFhmKTib1YhopUc8NA=
+github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU=
+github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE=
-github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/elastic/go-structform v0.0.10 h1:oy08o/Ih2hHTkNcRY/1HhaYvIp5z6t8si8gnCJPDo1w=
+github.com/elastic/go-structform v0.0.10/go.mod h1:CZWf9aIRYY5SuKSmOhtXScE5uQiLZNqAFnwKR4OrIM4=
+github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
+github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
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.11.1 h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM=
-github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g=
+github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
+github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
-github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
-github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
+github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
+github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/expr-lang/expr v1.16.3 h1:NLldf786GffptcXNxxJx5dQ+FzeWDKChBDqOOwyK8to=
+github.com/expr-lang/expr v1.16.3/go.mod h1:uCkhfG+x7fcZ5A5sXHKuQ07jGZRl6J0FCAaf2k4PtVQ=
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/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
@@ -173,37 +186,36 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4=
+github.com/go-kit/kit v0.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU=
+github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/go-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.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-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-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
-github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
+github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
+github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
+github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
+github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
+github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
+github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
+github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
+github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
@@ -213,9 +225,8 @@ github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6x
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
-github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
-github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
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=
@@ -245,13 +256,14 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
+github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -284,22 +296,24 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 h1:n6vlPhxsA+BW/XsS5+uqi7GyzaLa5MH7qlSLBZtRdiA=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
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/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
-github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-github.com/gophercloud/gophercloud v1.5.0 h1:cDN6XFCLKiiqvYpjQLq9AiM7RDRbIC9450WpPH+yvXo=
-github.com/gophercloud/gophercloud v1.5.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
+github.com/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
+github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
+github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk=
+github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
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.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
@@ -307,11 +321,13 @@ github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/ad
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
-github.com/hashicorp/consul/sdk v0.14.1 h1:ZiwE2bKb+zro68sWzZ1SgHF3kRMBZ94TwOCFRF4ylPs=
+github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
+github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8=
+github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A=
github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A=
github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -321,13 +337,14 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng
github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
-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-hclog v1.6.2 h1:NOtoftovWkDheyUM/8JW3QMiXyxJK3uHRK7wV04nD2I=
+github.com/hashicorp/go-hclog v1.6.2/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
+github.com/hashicorp/go-msgpack v0.5.5/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=
@@ -339,28 +356,34 @@ github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5O
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 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
+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-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.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/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
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.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0=
-github.com/hashicorp/nomad/api v0.0.0-20230718173136-3a687930bd3e h1:sr4lujmn9heD030xx/Pd4B/JSmvRhFzuotNXaaV0WLs=
-github.com/hashicorp/nomad/api v0.0.0-20230718173136-3a687930bd3e/go.mod h1:O23qLAZuCx4htdY9zBaO4cJPXgleSFEdq6D/sezGgYE=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
-github.com/hetznercloud/hcloud-go/v2 v2.0.0 h1:Sg1DJ+MAKvbYAqaBaq9tPbwXBS2ckPIaMtVdUjKu+4g=
-github.com/hetznercloud/hcloud-go/v2 v2.0.0/go.mod h1:4iUG2NG8b61IAwNx6UsMWQ6IfIf/i1RsG0BbsKAyR5Q=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
@@ -368,13 +391,14 @@ github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 h1:s9ZL6ZhFF8y6ebnm1FLvobkzoIu5xwDQUcRPk/IEhpM=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6/go.mod h1:aXdIdfn2OcGnMhOTojXmwZqXKgC3MU5riiNvzwwG9OY=
-github.com/ionos-cloud/sdk-go/v6 v6.1.8 h1:493wE/BkZxJf7x79UCE0cYGPZoqQcPiEBALvt7uVGY0=
-github.com/ionos-cloud/sdk-go/v6 v6.1.8/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
-github.com/jaegertracing/jaeger v1.48.0 h1:YuKooQ7qJsjgxws9xuf8C/BLNTPx8qTAJz4wv7IHhSc=
-github.com/jaegertracing/jaeger v1.48.0/go.mod h1:BoAPkdCAIEuLsVz/EDhjXd+GSVpHtJhiGqWoFEvBCKg=
-github.com/jarcoal/httpmock v1.3.0 h1:2RJ8GP0IIaWwcC9Fp2BmVi8Kog3v2Hn7VXM3fTd+nuc=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 h1:2r2WiFeAwiJ/uyx1qIKnV1L4C9w/2V8ehlbJY4gjFaM=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4/go.mod h1:1yEQhaLb/cETXCqQmdh7lDjupNAReO7c83AHyK2dJ48=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
+github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww=
+github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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=
@@ -395,22 +419,22 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -419,11 +443,12 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 h1:bCiVCRCs1Heq84lurVinUPy19keqGEe4jh5vtK37jcg=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg=
-github.com/linode/linodego v1.19.0 h1:n4WJrcr9+30e9JGZ6DI0nZbm5SdAj1kSwvvt/998YUw=
-github.com/linode/linodego v1.19.0/go.mod h1:XZFR+yJ9mm2kwf6itZ6SCpu+6w3KnIevV0Uu5HNWJgQ=
+github.com/linode/linodego v1.30.0 h1:6HJli+LX7NGu+Sne2G+ux790EkVOWOV/SR4mK3jcs6k=
+github.com/linode/linodego v1.30.0/go.mod h1:/46h/XpmWi//oSA92GX2p3FIxb8HbX7grslPPQalR2o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
@@ -442,29 +467,34 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
+github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM=
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/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo=
-github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
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 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-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/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
+github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
+github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -473,6 +503,7 @@ 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/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
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/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
@@ -480,30 +511,32 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
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/observiq/nanojack v0.0.0-20201106172433-343928847ebc h1:49ewVBwLcy+eYqI4R0ICilCI4dPjddpFXWv3liXzUxM=
github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
-github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
-github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
+github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
+github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
+github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
-github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss=
-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/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
+github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsrZjibvB3APXf2a1VwCmMQ=
+github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5ESjc2+iaZuldqE+23Iq0r1XeNue8=
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/ovh/go-ovh v1.4.1 h1:VBGa5wMyQtTP7Zb+w97zRCh9sLtM/2YKRyy+MEJmWaM=
-github.com/ovh/go-ovh v1.4.1/go.mod h1:6bL6pPyUT7tBfI0pqOegJgRjgjuO+mOo+MyXd1EEC0M=
+github.com/ovh/go-ovh v1.4.3 h1:Gs3V823zwTFpzgGLZNI6ILS4rmxZgJwJCz54Er9LwD0=
+github.com/ovh/go-ovh v1.4.3/go.mod h1:AkPXVtgwB6xlKblMjRKJJmjRp+ogrE7fz2lVgcQY8SY=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/pelletier/go-toml/v2 v2.0.8 h1:0ctb6s9mE31h0/lhu+J6OPmVeDxJn+kYnJc2jZR9tGQ=
+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/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -520,27 +553,21 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
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.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -548,73 +575,87 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/prometheus v0.47.2 h1:jWcnuQHz1o1Wu3MZ6nMJDuTI0kU5yJp9pkxh8XEkNvI=
-github.com/prometheus/prometheus v0.47.2/go.mod h1:J/bmOSjgH7lFxz2gZhrWEZs2i64vMS+HIuZfmYNhJ/M=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20 h1:a9hSJdJcd16e0HoMsnFvaHvxB3pxSD+SC7+CISp7xY0=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
+github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ=
+github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4=
+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/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-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/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
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/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/shoenig/test v0.6.6 h1:Oe8TPH9wAbv++YPNDKJWUnI8Q4PPWCx3UbOfH+FxiMU=
+github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY=
+github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI=
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3 h1:32k2QLgsKhcEs55q4REPKyIadvid5FPy2+VMgvbmKJ0=
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3/go.mod h1:gJrXWi7wSGXfiC7+VheQaz+ypdCt5SmZNL+BRxUe7y4=
-github.com/signalfx/sapm-proto v0.13.0 h1:yEkp1+MAU4vZvnJMp56uhVlRjlvCK7KQjBg0g2Apw8k=
-github.com/signalfx/sapm-proto v0.13.0/go.mod h1:C72HjeCW5v0Llk6pIVJ/ZH8A5GbiZpCCSkE1dSlpWxY=
+github.com/signalfx/sapm-proto v0.14.0 h1:KWh3I5E4EkelB19aP1/54Ik8khSioC/RVRW/riOfRGg=
+github.com/signalfx/sapm-proto v0.14.0/go.mod h1:Km6PskZh966cqNoUn3AmRyGRix5VfwnxVBvn2vjRC9U=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
-github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
-github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
+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/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8=
+github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY=
+github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0=
+github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
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.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
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.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
+github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ=
+github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
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.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
-github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8=
-github.com/testcontainers/testcontainers-go v0.26.0 h1:uqcYdoOHBy1ca7gKODfBd9uTHVK3a7UL848z09MVZ0c=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
+github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
+github.com/testcontainers/testcontainers-go v0.29.1 h1:z8kxdFlovA2y97RWx98v/TQ+tR+SXZm6p35M+xB92zk=
+github.com/testcontainers/testcontainers-go v0.29.1/go.mod h1:SnKnKQav8UcgtKqjp/AD8bE1MqZm+3TDb/B8crE3XnI=
github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
+github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
+github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
+github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I=
+github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8=
github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4=
+github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E=
github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
@@ -622,10 +663,8 @@ github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0h
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
+github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
@@ -633,129 +672,145 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
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.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/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA=
-go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+go.etcd.io/bbolt v1.3.9 h1:8x7aARPEXiXbHmtUwAIv7eV2fQFHrLLavdiJ3uzJXoI=
+go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/collector v0.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/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/debugexporter v0.89.0 h1:MQUEX4OWszJQqQMqtYERiiw02Ta9QMWPe/hHWoD4YBU=
-go.opentelemetry.io/collector/exporter/debugexporter v0.89.0/go.mod h1:eLoVrKOjgPvAmg0XJuellJ03zEpEol26l8i48Rhv53Q=
-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.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-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.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0 h1:zAFCXYzpxDh64BIVujqntlN5RE4jDahbPfJBy/Wq7D0=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0/go.mod h1:S15ELDQFoP5da3NHzXJR2I8FGUnM2C1Hp6e/OhaCtw0=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0 h1:uhiR/luaJCwMnvvkIS/gIxBbSAp+/vbqeC3AXmuc/kg=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0/go.mod h1:1ySnK/6Cl+67FTP6ty04PX9nrXPYFPuBqZ+Xn9Jzz6Y=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0 h1:+6mRqTgoJxXxuPwI8s5fMKm0mLfwVwJgD2EB7gUNNlE=
+go.opentelemetry.io/collector/exporter/otlphttpexporter v0.98.0/go.mod h1:uGocxqpbUrZDwZz6JBKsvNCyDLrS/pnVpn4BUuPauFw=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/extension/ballastextension v0.98.0 h1:EPzsYpiSY4vAfzJMqhVK6bIh+qZRmXVskaNlRFKjA0w=
+go.opentelemetry.io/collector/extension/ballastextension v0.98.0/go.mod h1:IY/JNP0g+tUUe/w5YHgBYwv5XlH4eqo5d4th+RGROFU=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 h1:iM4fMLGig3GKmz5XNtOPKDsnCnvbi0+UHYaWsx/aSRc=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0/go.mod h1:ROnuUkZJgpKEIDf3AIVjgRGNI7KPqCKPXsw8whL6Hzs=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0 h1:1jjiC3POfIluGLVM+6y8nolKEI95/vlHAvDmIOatags=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0/go.mod h1:VQDDrhQbIoelGF+fKzy6vCQM3hWDCH2YFaZKqgTDmGk=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0 h1:j7lfLwc5o1dtXIPXU8LjmxadejmJVRHN57ZYGH33Wq4=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0/go.mod h1:uWDBDxaWuzF1U5S2UIhstO0+Q8aUiwiUu8uO1IYN2XQ=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -764,11 +819,10 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
-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/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -779,8 +833,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-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw=
-golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -802,8 +856,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -839,23 +894,23 @@ golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211029224645-99673261e6eb/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.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
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=
@@ -867,9 +922,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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=
@@ -917,29 +973,30 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/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.6.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.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
-golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
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=
@@ -947,14 +1004,19 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.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.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+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=
-golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -999,14 +1061,15 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
-golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -1023,16 +1086,16 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
+google.golang.org/api v0.170.0 h1:zMaruDePM88zxZBG+NG8+reALO2rfLhe/JShitLyT48=
+google.golang.org/api v0.170.0/go.mod h1:/xql9M2btF85xac/VAm4PsLMTLVGUOpq4BE9R8jyNy8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -1062,12 +1125,10 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c h1:kaI7oewGK5YnVwj+Y+EJBO/YN1ht8iTL9XkFHtVZLsc=
+google.golang.org/genproto/googleapis/api v0.0.0-20240314234333-6e1732d8331c/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
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=
@@ -1081,8 +1142,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -1095,10 +1156,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -1122,6 +1181,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
+gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1129,24 +1189,24 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM=
-k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc=
-k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A=
-k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8=
-k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4=
-k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7 h1:ZgnF1KZsYxWIifwSNZFZgNtWE89WI5yiP5WwlfDoIyc=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/cmd/oteltestbedcol/main.go b/cmd/oteltestbedcol/main.go
index 304aa4e339c0..9f28298725c6 100644
--- a/cmd/oteltestbedcol/main.go
+++ b/cmd/oteltestbedcol/main.go
@@ -14,7 +14,7 @@ func main() {
info := component.BuildInfo{
Command: "oteltestbedcol",
Description: "OpenTelemetry Collector binary for testbed only tests.",
- Version: "0.89.0-dev",
+ Version: "0.98.0-dev",
}
if err := run(otelcol.CollectorSettings{BuildInfo: info, Factories: components}); err != nil {
diff --git a/cmd/oteltestbedcol/main_others.go b/cmd/oteltestbedcol/main_others.go
index e80a51cd4e04..3735aecb5867 100644
--- a/cmd/oteltestbedcol/main_others.go
+++ b/cmd/oteltestbedcol/main_others.go
@@ -1,7 +1,6 @@
// Code generated by "go.opentelemetry.io/collector/cmd/builder". DO NOT EDIT.
//go:build !windows
-// +build !windows
package main
diff --git a/cmd/oteltestbedcol/main_windows.go b/cmd/oteltestbedcol/main_windows.go
index 65eb6637e768..bb68124a52c9 100644
--- a/cmd/oteltestbedcol/main_windows.go
+++ b/cmd/oteltestbedcol/main_windows.go
@@ -1,47 +1,28 @@
// Code generated by "go.opentelemetry.io/collector/cmd/builder". DO NOT EDIT.
//go:build windows
-// +build windows
package main
import (
+ "errors"
"fmt"
- "os"
"go.opentelemetry.io/collector/otelcol"
+ "golang.org/x/sys/windows"
"golang.org/x/sys/windows/svc"
)
func run(params otelcol.CollectorSettings) error {
- if useInteractiveMode, err := checkUseInteractiveMode(); err != nil {
- return err
- } else if useInteractiveMode {
- return runInteractive(params)
- } else {
- return runService(params)
- }
-}
-
-func checkUseInteractiveMode() (bool, error) {
- // If environment variable NO_WINDOWS_SERVICE is set with any value other
- // than 0, use interactive mode instead of running as a service. This should
- // be set in case running as a service is not possible or desired even
- // though the current session is not detected to be interactive
- if value, present := os.LookupEnv("NO_WINDOWS_SERVICE"); present && value != "0" {
- return true, nil
- }
-
- isInteractiveSession, err := svc.IsAnInteractiveSession()
- if err != nil {
- return false, fmt.Errorf("failed to determine if we are running in an interactive session: %w", err)
- }
- return isInteractiveSession, nil
-}
-
-func runService(params otelcol.CollectorSettings) error {
- // do not need to supply service name when startup is invoked through Service Control Manager directly
+ // No need to supply service name when startup is invoked through
+ // the Service Control Manager directly.
if err := svc.Run("", otelcol.NewSvcHandler(params)); err != nil {
+ if errors.Is(err, windows.ERROR_FAILED_SERVICE_CONTROLLER_CONNECT) {
+ // Per https://learn.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-startservicectrldispatchera#return-value
+ // this means that the process is not running as a service, so run interactively.
+ return runInteractive(params)
+ }
+
return fmt.Errorf("failed to start collector server: %w", err)
}
diff --git a/cmd/oteltestbedcol/package_test.go b/cmd/oteltestbedcol/package_test.go
new file mode 100644
index 000000000000..ca84920f45f1
--- /dev/null
+++ b/cmd/oteltestbedcol/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package main
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/cmd/telemetrygen/Dockerfile b/cmd/telemetrygen/Dockerfile
index a1117f6c1097..ba1d577e41b4 100644
--- a/cmd/telemetrygen/Dockerfile
+++ b/cmd/telemetrygen/Dockerfile
@@ -1,10 +1,3 @@
-FROM golang:1.21 AS build
-
-WORKDIR /src
-ADD . /src
-
-RUN CGO_ENABLED=0 go build -o /telemetrygen
-
FROM alpine:latest as certs
RUN apk --update add ca-certificates
@@ -13,7 +6,10 @@ FROM scratch
ARG USER_UID=10001
USER ${USER_UID}
+ARG TARGETOS
+ARG TARGETARCH
+
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
-COPY --from=build /telemetrygen /telemetrygen
+COPY ./telemetrygen_${TARGETOS}_${TARGETARCH} /telemetrygen
ENTRYPOINT ["/telemetrygen"]
diff --git a/cmd/telemetrygen/README.md b/cmd/telemetrygen/README.md
index f13788b27e95..272a286f5868 100644
--- a/cmd/telemetrygen/README.md
+++ b/cmd/telemetrygen/README.md
@@ -3,13 +3,13 @@
| Status | |
| ------------- |-----------|
-| Stability | [alpha]: traces |
-| | [development]: metrics, logs |
+| Stability | [development]: metrics, logs |
+| | [alpha]: traces |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Acmd%2Ftelemetrygen%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Acmd%2Ftelemetrygen) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Acmd%2Ftelemetrygen%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Acmd%2Ftelemetrygen) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@mx-psi](https://www.github.com/mx-psi), [@codeboten](https://www.github.com/codeboten) |
-[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[development]: https://github.com/open-telemetry/opentelemetry-collector#development
+[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
This utility simulates a client generating **traces**, **metrics**, and **logs**. It is useful for testing and demonstration purposes.
@@ -24,6 +24,16 @@ go install github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemet
Check the [`go install` reference](https://go.dev/ref/mod#go-install) to install specific versions.
+### Docker build
+
+You can build locally the Docker image with:
+
+```bash
+make docker-telemetrygen
+```
+
+Using github actions, we also push a docker image on commit to main or on release to this [Github docker registry](https://github.com/open-telemetry/opentelemetry-collector-contrib/pkgs/container/opentelemetry-collector-contrib%2Ftelemetrygen).
+
## Running
First, you'll need an OpenTelemetry Collector to receive the telemetry data. Follow the project's instructions for a detailed setting up guide. The following configuration file should be sufficient:
@@ -80,6 +90,8 @@ Or, to generate a specific number of traces:
telemetrygen traces --otlp-insecure --traces 1
```
+To send traces in secure connection, see [examples/secure-tracing](../../examples/secure-tracing/)
+
Check `telemetrygen traces --help` for all the options.
### Logs
diff --git a/cmd/telemetrygen/config.go b/cmd/telemetrygen/config.go
index eebbc293bf3d..f20a758fffc9 100644
--- a/cmd/telemetrygen/config.go
+++ b/cmd/telemetrygen/config.go
@@ -36,7 +36,7 @@ var tracesCmd = &cobra.Command{
Use: "traces",
Short: fmt.Sprintf("Simulates a client generating traces. (Stability level: %s)", metadata.TracesStability),
Example: "telemetrygen traces",
- RunE: func(cmd *cobra.Command, args []string) error {
+ RunE: func(_ *cobra.Command, _ []string) error {
return traces.Start(tracesCfg)
},
}
@@ -46,7 +46,7 @@ var metricsCmd = &cobra.Command{
Use: "metrics",
Short: fmt.Sprintf("Simulates a client generating metrics. (Stability level: %s)", metadata.MetricsStability),
Example: "telemetrygen metrics",
- RunE: func(cmd *cobra.Command, args []string) error {
+ RunE: func(_ *cobra.Command, _ []string) error {
return metrics.Start(metricsCfg)
},
}
@@ -56,7 +56,7 @@ var logsCmd = &cobra.Command{
Use: "logs",
Short: fmt.Sprintf("Simulates a client generating logs. (Stability level: %s)", metadata.LogsStability),
Example: "telemetrygen logs",
- RunE: func(cmd *cobra.Command, args []string) error {
+ RunE: func(_ *cobra.Command, _ []string) error {
return logs.Start(logsCfg)
},
}
diff --git a/cmd/telemetrygen/go.mod b/cmd/telemetrygen/go.mod
index 16f80614913b..8d00813cb49e 100644
--- a/cmd/telemetrygen/go.mod
+++ b/cmd/telemetrygen/go.mod
@@ -1,61 +1,60 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen
-go 1.20
+go 1.21
require (
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
github.com/spf13/cobra v1.8.0
github.com/spf13/pflag v1.0.5
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.opentelemetry.io/otel v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.43.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0
- go.opentelemetry.io/otel/sdk v1.20.0
- go.opentelemetry.io/otel/sdk/metric v1.20.0
- go.opentelemetry.io/otel/trace v1.20.0
- go.uber.org/zap v1.26.0
- golang.org/x/time v0.4.0
- google.golang.org/grpc v1.59.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel v1.25.0
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0
+ go.opentelemetry.io/otel/sdk v1.25.0
+ go.opentelemetry.io/otel/sdk/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+ golang.org/x/time v0.5.0
+ google.golang.org/grpc v1.63.2
)
require (
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/confmap v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap v0.98.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/cmd/telemetrygen/go.sum b/cmd/telemetrygen/go.sum
index 25fe078bcc0b..974c32c94624 100644
--- a/cmd/telemetrygen/go.sum
+++ b/cmd/telemetrygen/go.sum
@@ -17,11 +17,13 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -29,19 +31,16 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/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/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
-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/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -52,18 +51,18 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -77,6 +76,7 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
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/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
@@ -89,53 +89,52 @@ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXf
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0 h1:f2jriWfOdldanBwS9jNBdeOKAQN7b4ugAMaNu1/1k9g=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0/go.mod h1:B+bcQI1yTY+N0vqMpoZbEN7+XU4tNM0DmUiOwebFJWI=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.24.0 h1:mM8nKi6/iFQ0iqst80wDHU2ge198Ye/TfN0WBS5U24Y=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.24.0/go.mod h1:0PrIIzDteLSmNyxqcGYRL4mDIo8OTuBAOI/Bn1URxac=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 h1:Mw5xcxMwlqoJd97vwPxA8isEaIoxsta9/Q51+TTJLGE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0/go.mod h1:CQNu9bj7o7mC6U7+CA/schKEYakYXWr79ucDHTMGhCM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.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.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -154,8 +153,8 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
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=
@@ -168,14 +167,14 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/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/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -194,25 +193,25 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-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 v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/cmd/telemetrygen/internal/common/config.go b/cmd/telemetrygen/internal/common/config.go
index 8ec9a8acfac2..323f11072676 100644
--- a/cmd/telemetrygen/internal/common/config.go
+++ b/cmd/telemetrygen/internal/common/config.go
@@ -63,6 +63,18 @@ type Config struct {
Headers KeyValue
ResourceAttributes KeyValue
TelemetryAttributes KeyValue
+
+ // OTLP TLS configuration
+ CaFile string
+
+ // OTLP mTLS configuration
+ ClientAuth ClientAuth
+}
+
+type ClientAuth struct {
+ Enabled bool
+ ClientCertFile string
+ ClientKeyFile string
}
// Endpoint returns the appropriate endpoint URL based on the selected communication mode (gRPC or HTTP)
@@ -112,17 +124,26 @@ func (c *Config) CommonFlags(fs *pflag.FlagSet) {
// custom headers
c.Headers = make(map[string]string)
- fs.Var(&c.Headers, "otlp-header", "Custom header to be passed along with each OTLP request. The value is expected in the format key=\"value\"."+
- "Note you may need to escape the quotes when using the tool from a cli."+
- "Flag may be repeated to set multiple headers (e.g -otlp-header key1=value1 -otlp-header key2=value2)")
+ fs.Var(&c.Headers, "otlp-header", "Custom header to be passed along with each OTLP request. The value is expected in the format key=\"value\". "+
+ "Note you may need to escape the quotes when using the tool from a cli. "+
+ `Flag may be repeated to set multiple headers (e.g --otlp-header key1=\"value1\" --otlp-header key2=\"value2\")`)
// custom resource attributes
c.ResourceAttributes = make(map[string]string)
- fs.Var(&c.ResourceAttributes, "otlp-attributes", "Custom resource attributes to use. The value is expected in the format key=\"value\"."+
- "Note you may need to escape the quotes when using the tool from a cli."+
- "Flag may be repeated to set multiple attributes (e.g -otlp-attributes key1=\"value1\" -otlp-attributes key2=\"value2\")")
+ fs.Var(&c.ResourceAttributes, "otlp-attributes", "Custom resource attributes to use. The value is expected in the format key=\"value\". "+
+ "Note you may need to escape the quotes when using the tool from a cli. "+
+ `Flag may be repeated to set multiple attributes (e.g --otlp-attributes key1=\"value1\" --otlp-attributes key2=\"value2\")`)
c.TelemetryAttributes = make(map[string]string)
- fs.Var(&c.TelemetryAttributes, "telemetry-attributes", "Custom telemetry attributes to use. The value is expected in the format \"key=\\\"value\\\"\". "+
- "Flag may be repeated to set multiple attributes (e.g --telemetry-attributes \"key1=\\\"value1\\\"\" --telemetry-attributes \"key2=\\\"value2\\\"\")")
+ fs.Var(&c.TelemetryAttributes, "telemetry-attributes", "Custom telemetry attributes to use. The value is expected in the format key=\"value\". "+
+ "Note you may need to escape the quotes when using the tool from a cli. "+
+ `Flag may be repeated to set multiple attributes (e.g --telemetry-attributes key1=\"value1\" --telemetry-attributes key2=\"value2\")`)
+
+ // TLS CA configuration
+ fs.StringVar(&c.CaFile, "ca-cert", "", "Trusted Certificate Authority to verify server certificate")
+
+ // mTLS configuration
+ fs.BoolVar(&c.ClientAuth.Enabled, "mtls", false, "Whether to require client authentication for mTLS")
+ fs.StringVar(&c.ClientAuth.ClientCertFile, "client-cert", "", "Client certificate file")
+ fs.StringVar(&c.ClientAuth.ClientKeyFile, "client-key", "", "Client private key file")
}
diff --git a/cmd/telemetrygen/internal/common/package_test.go b/cmd/telemetrygen/internal/common/package_test.go
new file mode 100644
index 000000000000..abc80d8f3173
--- /dev/null
+++ b/cmd/telemetrygen/internal/common/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package common
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/cmd/telemetrygen/internal/common/tls_utils.go b/cmd/telemetrygen/internal/common/tls_utils.go
new file mode 100644
index 000000000000..286d7345adc1
--- /dev/null
+++ b/cmd/telemetrygen/internal/common/tls_utils.go
@@ -0,0 +1,89 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package common
+
+import (
+ "crypto/tls"
+ "crypto/x509"
+ "errors"
+ "os"
+
+ "google.golang.org/grpc/credentials"
+)
+
+// caPool loads CA certificate from a file and returns a CertPool.
+// The certPool is used to set RootCAs in certificate verification.
+func caPool(caFile string) (*x509.CertPool, error) {
+ pool := x509.NewCertPool()
+ if caFile != "" {
+ data, err := os.ReadFile(caFile)
+ if err != nil {
+ return nil, err
+ }
+ if !pool.AppendCertsFromPEM(data) {
+ return nil, errors.New("failed to add CA certificate to root CA pool")
+ }
+ }
+ return pool, nil
+}
+
+func GetTLSCredentialsForGRPCExporter(caFile string, cAuth ClientAuth) (credentials.TransportCredentials, error) {
+
+ pool, err := caPool(caFile)
+ if err != nil {
+ return nil, err
+ }
+
+ var creds credentials.TransportCredentials
+
+ if caFile != "" {
+ creds = credentials.NewTLS(&tls.Config{
+ RootCAs: pool,
+ })
+ } else {
+ creds = credentials.NewTLS(&tls.Config{})
+ }
+
+ // Configuration for mTLS
+ if cAuth.Enabled {
+ keypair, err := tls.LoadX509KeyPair(cAuth.ClientCertFile, cAuth.ClientKeyFile)
+ if err != nil {
+ return nil, err
+ }
+ creds = credentials.NewTLS(&tls.Config{
+ RootCAs: pool,
+ Certificates: []tls.Certificate{keypair},
+ })
+ }
+
+ return creds, nil
+}
+
+func GetTLSCredentialsForHTTPExporter(caFile string, cAuth ClientAuth) (*tls.Config, error) {
+ pool, err := caPool(caFile)
+ if err != nil {
+ return nil, err
+ }
+
+ var tlsCfg tls.Config
+
+ if caFile != "" {
+ tlsCfg = tls.Config{
+ RootCAs: pool,
+ }
+ } else {
+ tlsCfg = tls.Config{}
+ }
+
+ // Configuration for mTLS
+ if cAuth.Enabled {
+ keypair, err := tls.LoadX509KeyPair(cAuth.ClientCertFile, cAuth.ClientKeyFile)
+ if err != nil {
+ return nil, err
+ }
+ tlsCfg.ClientAuth = tls.RequireAndVerifyClientCert
+ tlsCfg.Certificates = []tls.Certificate{keypair}
+ }
+ return &tlsCfg, nil
+}
diff --git a/cmd/telemetrygen/internal/e2etest/go.mod b/cmd/telemetrygen/internal/e2etest/go.mod
index 39453804cc57..41a428599830 100644
--- a/cmd/telemetrygen/internal/e2etest/go.mod
+++ b/cmd/telemetrygen/internal/e2etest/go.mod
@@ -1,81 +1,88 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/e2etest
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen v0.87.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.87.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/receiver v0.89.0
- go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen v0.97.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.97.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
)
require (
- cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- go.opencensus.io v0.24.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/configgrpc v0.89.0 // indirect
- go.opentelemetry.io/collector/config/confighttp 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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls 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 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/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confighttp v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata v1.5.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/trace v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/grpc v1.63.2 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/cmd/telemetrygen/internal/e2etest/go.sum b/cmd/telemetrygen/internal/e2etest/go.sum
index 7f379cd4ed98..05c32930e143 100644
--- a/cmd/telemetrygen/internal/e2etest/go.sum
+++ b/cmd/telemetrygen/internal/e2etest/go.sum
@@ -1,19 +1,15 @@
-cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-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/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
github.com/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=
@@ -21,81 +17,65 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
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-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -109,13 +89,17 @@ github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFSt
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
@@ -123,92 +107,92 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/consumer v0.89.0 h1:MteKhkudX2L1ylbtdpSazO8SwyHSxl6fUEElc0rRLDQ=
-go.opentelemetry.io/collector/consumer v0.89.0/go.mod h1:aOaoi6R0qVvfHu0pEPCzSE74gIPNJoCQM8Ml4Bc9NHE=
-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/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/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/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/service v0.89.0 h1:dZSK++Eu2H/vzWjhVG3yC0P76Xu5xE6qji0dMy0fRTw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0 h1:j7lfLwc5o1dtXIPXU8LjmxadejmJVRHN57ZYGH33Wq4=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0/go.mod h1:uWDBDxaWuzF1U5S2UIhstO0+Q8aUiwiUu8uO1IYN2XQ=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 h1:Mw5xcxMwlqoJd97vwPxA8isEaIoxsta9/Q51+TTJLGE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0/go.mod h1:CQNu9bj7o7mC6U7+CA/schKEYakYXWr79ucDHTMGhCM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 h1:s0PHtIkN+3xrbDOpt2M8OTG92cWqUESvzh2MxiR5xY8=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0/go.mod h1:hZlFbDbRt++MMPCCfSJfmhkGIWnX1h3XjkfxZUjLrIA=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.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.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -227,11 +211,9 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY=
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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -243,14 +225,14 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -266,43 +248,30 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
diff --git a/cmd/telemetrygen/internal/logs/config.go b/cmd/telemetrygen/internal/logs/config.go
index e6fdfac534b5..24d334b1acaa 100644
--- a/cmd/telemetrygen/internal/logs/config.go
+++ b/cmd/telemetrygen/internal/logs/config.go
@@ -12,8 +12,10 @@ import (
// Config describes the test scenario.
type Config struct {
common.Config
- NumLogs int
- Body string
+ NumLogs int
+ Body string
+ SeverityText string
+ SeverityNumber int32
}
// Flags registers config flags.
@@ -24,4 +26,6 @@ func (c *Config) Flags(fs *pflag.FlagSet) {
fs.IntVar(&c.NumLogs, "logs", 1, "Number of logs to generate in each worker (ignored if duration is provided)")
fs.StringVar(&c.Body, "body", "the message", "Body of the log")
+ fs.StringVar(&c.SeverityText, "severity-text", "Info", "Severity text of the log")
+ fs.Int32Var(&c.SeverityNumber, "severity-number", 9, "Severity number of the log, range from 1 to 24 (inclusive)")
}
diff --git a/cmd/telemetrygen/internal/logs/exporter.go b/cmd/telemetrygen/internal/logs/exporter.go
index b8b3601e50af..2e886e65823c 100644
--- a/cmd/telemetrygen/internal/logs/exporter.go
+++ b/cmd/telemetrygen/internal/logs/exporter.go
@@ -14,27 +14,51 @@ import (
"go.opentelemetry.io/collector/pdata/plog/plogotlp"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/common"
)
type exporter interface {
export(plog.Logs) error
}
-func newExporter(ctx context.Context, cfg *Config) (exporter, error) {
+func newExporter(cfg *Config) (exporter, error) {
+
+ // Exporter with HTTP
if cfg.UseHTTP {
+ if cfg.Insecure {
+ return &httpClientExporter{
+ client: http.DefaultClient,
+ cfg: cfg,
+ }, nil
+ }
+ creds, err := common.GetTLSCredentialsForHTTPExporter(cfg.CaFile, cfg.ClientAuth)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get TLS credentials: %w", err)
+ }
return &httpClientExporter{
- client: http.DefaultClient,
+ client: &http.Client{Transport: &http.Transport{TLSClientConfig: creds}},
cfg: cfg,
}, nil
}
- if !cfg.Insecure {
- return nil, fmt.Errorf("'telemetrygen logs' only supports insecure gRPC")
- }
- // only support grpc in insecure mode
- clientConn, err := grpc.DialContext(ctx, cfg.Endpoint(), grpc.WithTransportCredentials(insecure.NewCredentials()))
- if err != nil {
- return nil, err
+ // Exporter with GRPC
+ var err error
+ var clientConn *grpc.ClientConn
+ if cfg.Insecure {
+ clientConn, err = grpc.NewClient(cfg.Endpoint(), grpc.WithTransportCredentials(insecure.NewCredentials()))
+ if err != nil {
+ return nil, err
+ }
+ } else {
+ creds, err := common.GetTLSCredentialsForGRPCExporter(cfg.CaFile, cfg.ClientAuth)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get TLS credentials: %w", err)
+ }
+ clientConn, err = grpc.NewClient(cfg.Endpoint(), grpc.WithTransportCredentials(creds))
+ if err != nil {
+ return nil, err
+ }
}
return &gRPCClientExporter{client: plogotlp.NewGRPCClient(clientConn)}, nil
}
diff --git a/cmd/telemetrygen/internal/logs/logs.go b/cmd/telemetrygen/internal/logs/logs.go
index 656e367ee3dc..b4349021425f 100644
--- a/cmd/telemetrygen/internal/logs/logs.go
+++ b/cmd/telemetrygen/internal/logs/logs.go
@@ -4,12 +4,12 @@
package logs
import (
- "context"
"fmt"
"sync"
"sync/atomic"
"time"
+ "go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/otel/sdk/resource"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
"go.uber.org/zap"
@@ -25,13 +25,13 @@ func Start(cfg *Config) error {
return err
}
- e, err := newExporter(context.Background(), cfg)
+ e, err := newExporter(cfg)
if err != nil {
return err
}
if err = Run(cfg, e, logger); err != nil {
- logger.Error("failed to stop the exporter", zap.Error(err))
+ logger.Error("failed to execute the test scenario.", zap.Error(err))
return err
}
@@ -60,12 +60,19 @@ func Run(c *Config, exp exporter, logger *zap.Logger) error {
running := &atomic.Bool{}
running.Store(true)
+ severityText, severityNumber, err := parseSeverity(c.SeverityText, c.SeverityNumber)
+ if err != nil {
+ return err
+ }
+
for i := 0; i < c.WorkerCount; i++ {
wg.Add(1)
w := worker{
numLogs: c.NumLogs,
limitPerSecond: limit,
body: c.Body,
+ severityText: severityText,
+ severityNumber: severityNumber,
totalDuration: c.TotalDuration,
running: running,
wg: &wg,
@@ -82,3 +89,42 @@ func Run(c *Config, exp exporter, logger *zap.Logger) error {
wg.Wait()
return nil
}
+
+func parseSeverity(severityText string, severityNumber int32) (string, plog.SeverityNumber, error) {
+ // severityNumber must range in [1,24]
+ if severityNumber <= 0 || severityNumber >= 25 {
+ return "", 0, fmt.Errorf("severity-number is out of range, the valid range is [1,24]")
+ }
+
+ sn := plog.SeverityNumber(severityNumber)
+
+ // severity number should match well-known severityText
+ switch severityText {
+ case plog.SeverityNumberTrace.String():
+ if !(severityNumber >= 1 && severityNumber <= 4) {
+ return "", 0, fmt.Errorf("severity text %q does not match severity number %d, the valid range is [1,4]", severityText, severityNumber)
+ }
+ case plog.SeverityNumberDebug.String():
+ if !(severityNumber >= 5 && severityNumber <= 8) {
+ return "", 0, fmt.Errorf("severity text %q does not match severity number %d, the valid range is [5,8]", severityText, severityNumber)
+ }
+ case plog.SeverityNumberInfo.String():
+ if !(severityNumber >= 9 && severityNumber <= 12) {
+ return "", 0, fmt.Errorf("severity text %q does not match severity number %d, the valid range is [9,12]", severityText, severityNumber)
+ }
+ case plog.SeverityNumberWarn.String():
+ if !(severityNumber >= 13 && severityNumber <= 16) {
+ return "", 0, fmt.Errorf("severity text %q does not match severity number %d, the valid range is [13,16]", severityText, severityNumber)
+ }
+ case plog.SeverityNumberError.String():
+ if !(severityNumber >= 17 && severityNumber <= 20) {
+ return "", 0, fmt.Errorf("severity text %q does not match severity number %d, the valid range is [17,20]", severityText, severityNumber)
+ }
+ case plog.SeverityNumberFatal.String():
+ if !(severityNumber >= 21 && severityNumber <= 24) {
+ return "", 0, fmt.Errorf("severity text %q does not match severity number %d, the valid range is [21,24]", severityText, severityNumber)
+ }
+ }
+
+ return severityText, sn, nil
+}
diff --git a/cmd/telemetrygen/internal/logs/package_test.go b/cmd/telemetrygen/internal/logs/package_test.go
new file mode 100644
index 000000000000..1158f120b289
--- /dev/null
+++ b/cmd/telemetrygen/internal/logs/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package logs
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/cmd/telemetrygen/internal/logs/worker.go b/cmd/telemetrygen/internal/logs/worker.go
index cd91b25db2e0..aa5cc0e346c2 100644
--- a/cmd/telemetrygen/internal/logs/worker.go
+++ b/cmd/telemetrygen/internal/logs/worker.go
@@ -18,14 +18,16 @@ import (
)
type worker struct {
- running *atomic.Bool // pointer to shared flag that indicates it's time to stop the test
- numLogs int // how many logs the worker has to generate (only when duration==0)
- body string // the body of the log
- totalDuration time.Duration // how long to run the test for (overrides `numLogs`)
- limitPerSecond rate.Limit // how many logs per second to generate
- wg *sync.WaitGroup // notify when done
- logger *zap.Logger // logger
- index int // worker index
+ running *atomic.Bool // pointer to shared flag that indicates it's time to stop the test
+ numLogs int // how many logs the worker has to generate (only when duration==0)
+ body string // the body of the log
+ severityNumber plog.SeverityNumber // the severityNumber of the log
+ severityText string // the severityText of the log
+ totalDuration time.Duration // how long to run the test for (overrides `numLogs`)
+ limitPerSecond rate.Limit // how many logs per second to generate
+ wg *sync.WaitGroup // notify when done
+ logger *zap.Logger // logger
+ index int // worker index
}
func (w worker) simulateLogs(res *resource.Resource, exporter exporter, telemetryAttributes []attribute.KeyValue) {
@@ -43,14 +45,14 @@ func (w worker) simulateLogs(res *resource.Resource, exporter exporter, telemetr
log.Body().SetStr(w.body)
log.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
log.SetDroppedAttributesCount(1)
- log.SetSeverityNumber(plog.SeverityNumberInfo)
- log.SetSeverityText("Info")
+ log.SetSeverityNumber(w.severityNumber)
+ log.SetSeverityText(w.severityText)
log.Attributes()
lattrs := log.Attributes()
lattrs.PutStr("app", "server")
- for i, key := range telemetryAttributes {
- lattrs.PutStr(key.Value.AsString(), telemetryAttributes[i].Value.AsString())
+ for i, attr := range telemetryAttributes {
+ lattrs.PutStr(string(attr.Key), telemetryAttributes[i].Value.AsString())
}
if err := exporter.export(logs); err != nil {
diff --git a/cmd/telemetrygen/internal/logs/worker_test.go b/cmd/telemetrygen/internal/logs/worker_test.go
index 941f6fbf57c7..99e41ef18c0c 100644
--- a/cmd/telemetrygen/internal/logs/worker_test.go
+++ b/cmd/telemetrygen/internal/logs/worker_test.go
@@ -36,7 +36,9 @@ func TestFixedNumberOfLogs(t *testing.T) {
Config: common.Config{
WorkerCount: 1,
},
- NumLogs: 5,
+ NumLogs: 5,
+ SeverityText: "Info",
+ SeverityNumber: 9,
}
exp := &mockExporter{}
@@ -58,6 +60,8 @@ func TestRateOfLogs(t *testing.T) {
TotalDuration: time.Second / 2,
WorkerCount: 1,
},
+ SeverityText: "Info",
+ SeverityNumber: 9,
}
exp := &mockExporter{}
@@ -77,6 +81,8 @@ func TestUnthrottled(t *testing.T) {
TotalDuration: 1 * time.Second,
WorkerCount: 1,
},
+ SeverityText: "Info",
+ SeverityNumber: 9,
}
exp := &mockExporter{}
@@ -94,6 +100,8 @@ func TestCustomBody(t *testing.T) {
Config: common.Config{
WorkerCount: 1,
},
+ SeverityText: "Info",
+ SeverityNumber: 9,
}
exp := &mockExporter{}
@@ -145,6 +153,13 @@ func TestLogsWithOneTelemetryAttributes(t *testing.T) {
for i := 0; i < rlogs.Len(); i++ {
attrs := rlogs.At(i).ScopeLogs().At(0).LogRecords().At(0).Attributes()
assert.Equal(t, 2, attrs.Len(), "shouldn't have less than 2 attributes")
+
+ val, ok := attrs.Get(telemetryAttrKeyOne)
+ assert.Truef(t, ok, "there should be an attribute with key %s", telemetryAttrKeyOne)
+ if ok {
+ assert.EqualValues(t, val.AsString(), telemetryAttrValueOne)
+ }
+
}
}
}
@@ -180,6 +195,8 @@ func configWithNoAttributes(qty int, body string) *Config {
WorkerCount: 1,
TelemetryAttributes: nil,
},
+ SeverityText: "Info",
+ SeverityNumber: 9,
}
}
@@ -191,6 +208,8 @@ func configWithOneAttribute(qty int, body string) *Config {
WorkerCount: 1,
TelemetryAttributes: common.KeyValue{telemetryAttrKeyOne: telemetryAttrValueOne},
},
+ SeverityText: "Info",
+ SeverityNumber: 9,
}
}
@@ -203,5 +222,7 @@ func configWithMultipleAttributes(qty int, body string) *Config {
WorkerCount: 1,
TelemetryAttributes: kvs,
},
+ SeverityText: "Info",
+ SeverityNumber: 9,
}
}
diff --git a/cmd/telemetrygen/internal/metrics/exporter.go b/cmd/telemetrygen/internal/metrics/exporter.go
index d320e292447c..00af1ea0d75a 100644
--- a/cmd/telemetrygen/internal/metrics/exporter.go
+++ b/cmd/telemetrygen/internal/metrics/exporter.go
@@ -4,35 +4,41 @@
package metrics
import (
+ "fmt"
+
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp"
- "google.golang.org/grpc"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/common"
)
// grpcExporterOptions creates the configuration options for a gRPC-based OTLP metric exporter.
// It configures the exporter with the provided endpoint, connection security settings, and headers.
-func grpcExporterOptions(cfg *Config) []otlpmetricgrpc.Option {
+func grpcExporterOptions(cfg *Config) ([]otlpmetricgrpc.Option, error) {
grpcExpOpt := []otlpmetricgrpc.Option{
otlpmetricgrpc.WithEndpoint(cfg.Endpoint()),
- otlpmetricgrpc.WithDialOption(
- grpc.WithBlock(),
- ),
}
if cfg.Insecure {
grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithInsecure())
+ } else {
+ credentials, err := common.GetTLSCredentialsForGRPCExporter(cfg.CaFile, cfg.ClientAuth)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get TLS credentials: %w", err)
+ }
+ grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithTLSCredentials(credentials))
}
if len(cfg.Headers) > 0 {
grpcExpOpt = append(grpcExpOpt, otlpmetricgrpc.WithHeaders(cfg.Headers))
}
- return grpcExpOpt
+ return grpcExpOpt, nil
}
// httpExporterOptions creates the configuration options for an HTTP-based OTLP metric exporter.
// It configures the exporter with the provided endpoint, URL path, connection security settings, and headers.
-func httpExporterOptions(cfg *Config) []otlpmetrichttp.Option {
+func httpExporterOptions(cfg *Config) ([]otlpmetrichttp.Option, error) {
httpExpOpt := []otlpmetrichttp.Option{
otlpmetrichttp.WithEndpoint(cfg.Endpoint()),
otlpmetrichttp.WithURLPath(cfg.HTTPPath),
@@ -40,11 +46,17 @@ func httpExporterOptions(cfg *Config) []otlpmetrichttp.Option {
if cfg.Insecure {
httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithInsecure())
+ } else {
+ tlsCfg, err := common.GetTLSCredentialsForHTTPExporter(cfg.CaFile, cfg.ClientAuth)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get TLS credentials: %w", err)
+ }
+ httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithTLSClientConfig(tlsCfg))
}
if len(cfg.Headers) > 0 {
httpExpOpt = append(httpExpOpt, otlpmetrichttp.WithHeaders(cfg.Headers))
}
- return httpExpOpt
+ return httpExpOpt, nil
}
diff --git a/cmd/telemetrygen/internal/metrics/metrics.go b/cmd/telemetrygen/internal/metrics/metrics.go
index 0061d64b3695..8289287e3793 100644
--- a/cmd/telemetrygen/internal/metrics/metrics.go
+++ b/cmd/telemetrygen/internal/metrics/metrics.go
@@ -32,11 +32,29 @@ func Start(cfg *Config) error {
expFunc := func() (sdkmetric.Exporter, error) {
var exp sdkmetric.Exporter
if cfg.UseHTTP {
+ var exporterOpts []otlpmetrichttp.Option
+
logger.Info("starting HTTP exporter")
- exp, err = otlpmetrichttp.New(context.Background(), httpExporterOptions(cfg)...)
+ exporterOpts, err = httpExporterOptions(cfg)
+ if err != nil {
+ return nil, err
+ }
+ exp, err = otlpmetrichttp.New(context.Background(), exporterOpts...)
+ if err != nil {
+ return nil, fmt.Errorf("failed to obtain OTLP HTTP exporter: %w", err)
+ }
} else {
+ var exporterOpts []otlpmetricgrpc.Option
+
logger.Info("starting gRPC exporter")
- exp, err = otlpmetricgrpc.New(context.Background(), grpcExporterOptions(cfg)...)
+ exporterOpts, err = grpcExporterOptions(cfg)
+ if err != nil {
+ return nil, err
+ }
+ exp, err = otlpmetricgrpc.New(context.Background(), exporterOpts...)
+ if err != nil {
+ return nil, fmt.Errorf("failed to obtain OTLP gRPC exporter: %w", err)
+ }
}
return exp, err
}
diff --git a/cmd/telemetrygen/internal/metrics/package_test.go b/cmd/telemetrygen/internal/metrics/package_test.go
new file mode 100644
index 000000000000..b8f16a8085ef
--- /dev/null
+++ b/cmd/telemetrygen/internal/metrics/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package metrics
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/cmd/telemetrygen/internal/traces/config.go b/cmd/telemetrygen/internal/traces/config.go
index e8d41270d5f4..7b553b3cf04c 100644
--- a/cmd/telemetrygen/internal/traces/config.go
+++ b/cmd/telemetrygen/internal/traces/config.go
@@ -4,6 +4,8 @@
package traces
import (
+ "time"
+
"github.com/spf13/pflag"
"github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/common"
@@ -13,11 +15,14 @@ import (
type Config struct {
common.Config
NumTraces int
+ NumChildSpans int
PropagateContext bool
ServiceName string
StatusCode string
Batch bool
LoadSize int
+
+ SpanDuration time.Duration
}
// Flags registers config flags.
@@ -27,9 +32,11 @@ func (c *Config) Flags(fs *pflag.FlagSet) {
fs.StringVar(&c.HTTPPath, "otlp-http-url-path", "/v1/traces", "Which URL path to write to")
fs.IntVar(&c.NumTraces, "traces", 1, "Number of traces to generate in each worker (ignored if duration is provided)")
+ fs.IntVar(&c.NumChildSpans, "child-spans", 1, "Number of child spans to generate for each trace")
fs.BoolVar(&c.PropagateContext, "marshal", false, "Whether to marshal trace context via HTTP headers")
fs.StringVar(&c.ServiceName, "service", "telemetrygen", "Service name to use")
fs.StringVar(&c.StatusCode, "status-code", "0", "Status code to use for the spans, one of (Unset, Error, Ok) or the equivalent integer (0,1,2)")
fs.BoolVar(&c.Batch, "batch", true, "Whether to batch traces")
fs.IntVar(&c.LoadSize, "size", 0, "Desired minimum size in MB of string data for each trace generated. This can be used to test traces with large payloads, i.e. when testing the OTLP receiver endpoint max receive size.")
+ fs.DurationVar(&c.SpanDuration, "span-duration", 123*time.Microsecond, "The duration of each generated span.")
}
diff --git a/cmd/telemetrygen/internal/traces/exporter.go b/cmd/telemetrygen/internal/traces/exporter.go
index 4161ccc3d1f1..b5913841454a 100644
--- a/cmd/telemetrygen/internal/traces/exporter.go
+++ b/cmd/telemetrygen/internal/traces/exporter.go
@@ -4,35 +4,41 @@
package traces
import (
+ "fmt"
+
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
- "google.golang.org/grpc"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/cmd/telemetrygen/internal/common"
)
// grpcExporterOptions creates the configuration options for a gRPC-based OTLP trace exporter.
// It configures the exporter with the provided endpoint, connection security settings, and headers.
-func grpcExporterOptions(cfg *Config) []otlptracegrpc.Option {
+func grpcExporterOptions(cfg *Config) ([]otlptracegrpc.Option, error) {
grpcExpOpt := []otlptracegrpc.Option{
otlptracegrpc.WithEndpoint(cfg.Endpoint()),
- otlptracegrpc.WithDialOption(
- grpc.WithBlock(),
- ),
}
if cfg.Insecure {
grpcExpOpt = append(grpcExpOpt, otlptracegrpc.WithInsecure())
+ } else {
+ credentials, err := common.GetTLSCredentialsForGRPCExporter(cfg.CaFile, cfg.ClientAuth)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get TLS credentials: %w", err)
+ }
+ grpcExpOpt = append(grpcExpOpt, otlptracegrpc.WithTLSCredentials(credentials))
}
if len(cfg.Headers) > 0 {
grpcExpOpt = append(grpcExpOpt, otlptracegrpc.WithHeaders(cfg.Headers))
}
- return grpcExpOpt
+ return grpcExpOpt, nil
}
// httpExporterOptions creates the configuration options for an HTTP-based OTLP trace exporter.
// It configures the exporter with the provided endpoint, URL path, connection security settings, and headers.
-func httpExporterOptions(cfg *Config) []otlptracehttp.Option {
+func httpExporterOptions(cfg *Config) ([]otlptracehttp.Option, error) {
httpExpOpt := []otlptracehttp.Option{
otlptracehttp.WithEndpoint(cfg.Endpoint()),
otlptracehttp.WithURLPath(cfg.HTTPPath),
@@ -40,11 +46,17 @@ func httpExporterOptions(cfg *Config) []otlptracehttp.Option {
if cfg.Insecure {
httpExpOpt = append(httpExpOpt, otlptracehttp.WithInsecure())
+ } else {
+ tlsCfg, err := common.GetTLSCredentialsForHTTPExporter(cfg.CaFile, cfg.ClientAuth)
+ if err != nil {
+ return nil, fmt.Errorf("failed to get TLS credentials: %w", err)
+ }
+ httpExpOpt = append(httpExpOpt, otlptracehttp.WithTLSClientConfig(tlsCfg))
}
if len(cfg.Headers) > 0 {
httpExpOpt = append(httpExpOpt, otlptracehttp.WithHeaders(cfg.Headers))
}
- return httpExpOpt
+ return httpExpOpt, nil
}
diff --git a/cmd/telemetrygen/internal/traces/package_test.go b/cmd/telemetrygen/internal/traces/package_test.go
new file mode 100644
index 000000000000..d1398ba09b9b
--- /dev/null
+++ b/cmd/telemetrygen/internal/traces/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package traces
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/cmd/telemetrygen/internal/traces/traces.go b/cmd/telemetrygen/internal/traces/traces.go
index a1136a25ee4c..02817577b915 100644
--- a/cmd/telemetrygen/internal/traces/traces.go
+++ b/cmd/telemetrygen/internal/traces/traces.go
@@ -6,6 +6,7 @@ package traces
import (
"context"
"fmt"
+ "math"
"strings"
"sync"
"sync/atomic"
@@ -34,16 +35,31 @@ func Start(cfg *Config) error {
var exp *otlptrace.Exporter
if cfg.UseHTTP {
+ var exporterOpts []otlptracehttp.Option
+
logger.Info("starting HTTP exporter")
- exp, err = otlptracehttp.New(context.Background(), httpExporterOptions(cfg)...)
+ exporterOpts, err = httpExporterOptions(cfg)
+ if err != nil {
+ return err
+ }
+ exp, err = otlptracehttp.New(context.Background(), exporterOpts...)
+ if err != nil {
+ return fmt.Errorf("failed to obtain OTLP HTTP exporter: %w", err)
+ }
} else {
+ var exporterOpts []otlptracegrpc.Option
+
logger.Info("starting gRPC exporter")
- exp, err = otlptracegrpc.New(context.Background(), grpcExporterOptions(cfg)...)
+ exporterOpts, err = grpcExporterOptions(cfg)
+ if err != nil {
+ return err
+ }
+ exp, err = otlptracegrpc.New(context.Background(), exporterOpts...)
+ if err != nil {
+ return fmt.Errorf("failed to obtain OTLP gRPC exporter: %w", err)
+ }
}
- if err != nil {
- return fmt.Errorf("failed to obtain OTLP exporter: %w", err)
- }
defer func() {
logger.Info("stopping the exporter")
if tempError := exp.Shutdown(context.Background()); tempError != nil {
@@ -57,13 +73,13 @@ func Start(cfg *Config) error {
defer func() {
logger.Info("stop the batch span processor")
if tempError := ssp.Shutdown(context.Background()); tempError != nil {
- logger.Error("failed to stop the batch span processor", zap.Error(err))
+ logger.Error("failed to stop the batch span processor", zap.Error(tempError))
}
}()
}
var attributes []attribute.KeyValue
- // may be overridden by `-otlp-attributes service.name="foo"`
+ // may be overridden by `--otlp-attributes service.name="foo"`
attributes = append(attributes, semconv.ServiceNameKey.String(cfg.ServiceName))
attributes = append(attributes, cfg.GetAttributes()...)
@@ -124,6 +140,7 @@ func Run(c *Config, logger *zap.Logger) error {
wg.Add(1)
w := worker{
numTraces: c.NumTraces,
+ numChildSpans: int(math.Max(1, float64(c.NumChildSpans))),
propagateContext: c.PropagateContext,
statusCode: statusCode,
limitPerSecond: limit,
@@ -132,6 +149,7 @@ func Run(c *Config, logger *zap.Logger) error {
wg: &wg,
logger: logger.With(zap.Int("worker", i)),
loadSize: c.LoadSize,
+ spanDuration: c.SpanDuration,
}
go w.simulateTraces(telemetryAttributes)
diff --git a/cmd/telemetrygen/internal/traces/worker.go b/cmd/telemetrygen/internal/traces/worker.go
index cbcdc09ac1e3..cb71e2917e66 100644
--- a/cmd/telemetrygen/internal/traces/worker.go
+++ b/cmd/telemetrygen/internal/traces/worker.go
@@ -6,6 +6,7 @@ package traces // import "github.com/open-telemetry/opentelemetry-collector-cont
import (
"context"
"fmt"
+ "strconv"
"sync"
"sync/atomic"
"time"
@@ -23,20 +24,20 @@ import (
type worker struct {
running *atomic.Bool // pointer to shared flag that indicates it's time to stop the test
numTraces int // how many traces the worker has to generate (only when duration==0)
+ numChildSpans int // how many child spans the worker has to generate per trace
propagateContext bool // whether the worker needs to propagate the trace context via HTTP headers
statusCode codes.Code // the status code set for the child and parent spans
totalDuration time.Duration // how long to run the test for (overrides `numTraces`)
limitPerSecond rate.Limit // how many spans per second to generate
wg *sync.WaitGroup // notify when done
+ loadSize int // desired minimum size in MB of string data for each generated trace
+ spanDuration time.Duration // duration of generated spans
logger *zap.Logger
- loadSize int
}
const (
fakeIP string = "1.2.3.4"
- fakeSpanDuration = 123 * time.Microsecond
-
charactersPerMB = 1024 * 1024 // One character takes up one byte of space, so this number comes from the number of bytes in a megabyte
)
@@ -46,11 +47,15 @@ func (w worker) simulateTraces(telemetryAttributes []attribute.KeyValue) {
var i int
for w.running.Load() {
+ spanStart := time.Now()
+ spanEnd := spanStart.Add(w.spanDuration)
+
ctx, sp := tracer.Start(context.Background(), "lets-go", trace.WithAttributes(
semconv.NetPeerIPKey.String(fakeIP),
semconv.PeerServiceKey.String("telemetrygen-server"),
),
trace.WithSpanKind(trace.SpanKindClient),
+ trace.WithTimestamp(spanStart),
)
sp.SetAttributes(telemetryAttributes...)
for j := 0; j < w.loadSize; j++ {
@@ -66,24 +71,32 @@ func (w worker) simulateTraces(telemetryAttributes []attribute.KeyValue) {
// simulates getting a request from a client
childCtx = otel.GetTextMapPropagator().Extract(childCtx, header)
}
+ var endTimestamp trace.SpanEventOption
- _, child := tracer.Start(childCtx, "okey-dokey", trace.WithAttributes(
- semconv.NetPeerIPKey.String(fakeIP),
- semconv.PeerServiceKey.String("telemetrygen-client"),
- ),
- trace.WithSpanKind(trace.SpanKindServer),
- )
- child.SetAttributes(telemetryAttributes...)
+ for j := 0; j < w.numChildSpans; j++ {
+ _, child := tracer.Start(childCtx, "okey-dokey-"+strconv.Itoa(j), trace.WithAttributes(
+ semconv.NetPeerIPKey.String(fakeIP),
+ semconv.PeerServiceKey.String("telemetrygen-client"),
+ ),
+ trace.WithSpanKind(trace.SpanKindServer),
+ trace.WithTimestamp(spanStart),
+ )
+ child.SetAttributes(telemetryAttributes...)
- if err := limiter.Wait(context.Background()); err != nil {
- w.logger.Fatal("limiter waited failed, retry", zap.Error(err))
- }
+ if err := limiter.Wait(context.Background()); err != nil {
+ w.logger.Fatal("limiter waited failed, retry", zap.Error(err))
+ }
- opt := trace.WithTimestamp(time.Now().Add(fakeSpanDuration))
- child.SetStatus(w.statusCode, "")
- child.End(opt)
+ endTimestamp = trace.WithTimestamp(spanEnd)
+ child.SetStatus(w.statusCode, "")
+ child.End(endTimestamp)
+
+ // Reset the start and end for next span
+ spanStart = spanEnd
+ spanEnd = spanStart.Add(w.spanDuration)
+ }
sp.SetStatus(w.statusCode, "")
- sp.End(opt)
+ sp.End(endTimestamp)
i++
if w.numTraces != 0 {
diff --git a/cmd/telemetrygen/internal/traces/worker_test.go b/cmd/telemetrygen/internal/traces/worker_test.go
index 7d3db1e4314b..0fbbf858de61 100644
--- a/cmd/telemetrygen/internal/traces/worker_test.go
+++ b/cmd/telemetrygen/internal/traces/worker_test.go
@@ -50,6 +50,31 @@ func TestFixedNumberOfTraces(t *testing.T) {
assert.Len(t, syncer.spans, 2) // each trace has two spans
}
+func TestNumberOfSpans(t *testing.T) {
+ // prepare
+ syncer := &mockSyncer{}
+
+ tracerProvider := sdktrace.NewTracerProvider()
+ sp := sdktrace.NewSimpleSpanProcessor(syncer)
+ tracerProvider.RegisterSpanProcessor(sp)
+ otel.SetTracerProvider(tracerProvider)
+
+ cfg := &Config{
+ Config: common.Config{
+ WorkerCount: 1,
+ },
+ NumTraces: 1,
+ NumChildSpans: 5,
+ }
+ expectedNumSpans := cfg.NumChildSpans + 1 // each trace has 1 + NumChildSpans spans
+
+ // test
+ require.NoError(t, Run(cfg, zap.NewNop()))
+
+ // verify
+ assert.Len(t, syncer.spans, expectedNumSpans)
+}
+
func TestRateOfSpans(t *testing.T) {
// prepare
syncer := &mockSyncer{}
@@ -80,6 +105,38 @@ func TestRateOfSpans(t *testing.T) {
assert.True(t, len(syncer.spans) <= 20, "there should have been less than 20 spans, had %d", len(syncer.spans))
}
+func TestSpanDuration(t *testing.T) {
+ // prepare
+ syncer := &mockSyncer{}
+
+ tracerProvider := sdktrace.NewTracerProvider()
+ sp := sdktrace.NewSimpleSpanProcessor(syncer)
+ tracerProvider.RegisterSpanProcessor(sp)
+ otel.SetTracerProvider(tracerProvider)
+
+ targetDuration := 1 * time.Second
+ cfg := &Config{
+ Config: common.Config{
+ Rate: 10,
+ TotalDuration: time.Second / 2,
+ WorkerCount: 1,
+ },
+ SpanDuration: targetDuration,
+ }
+
+ // sanity check
+ require.Len(t, syncer.spans, 0)
+
+ // test
+ require.NoError(t, Run(cfg, zap.NewNop()))
+
+ for _, span := range syncer.spans {
+ startTime, endTime := span.StartTime(), span.EndTime()
+ spanDuration := endTime.Sub(startTime)
+ assert.Equal(t, targetDuration, spanDuration)
+ }
+}
+
func TestUnthrottled(t *testing.T) {
// prepare
syncer := &mockSyncer{}
diff --git a/cmd/telemetrygen/package_test.go b/cmd/telemetrygen/package_test.go
new file mode 100644
index 000000000000..5cd502ca564b
--- /dev/null
+++ b/cmd/telemetrygen/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package main
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/confmap/provider/s3provider/go.mod b/confmap/provider/s3provider/go.mod
index f31679ee9bf2..dbc6b3c9155f 100644
--- a/confmap/provider/s3provider/go.mod
+++ b/confmap/provider/s3provider/go.mod
@@ -1,41 +1,43 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/s3provider
-go 1.20
+go 1.21
require (
- github.com/aws/aws-sdk-go-v2 v1.22.2
- github.com/aws/aws-sdk-go-v2/config v1.24.0
- github.com/aws/aws-sdk-go-v2/service/s3 v1.19.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/confmap v0.89.0
+ github.com/aws/aws-sdk-go-v2 v1.26.1
+ github.com/aws/aws-sdk-go-v2/config v1.27.11
+ github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.uber.org/goleak v1.3.0
gopkg.in/yaml.v2 v2.4.0
)
require (
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0 // indirect
- github.com/aws/aws-sdk-go-v2/credentials v1.15.2 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.9.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 // indirect
- github.com/aws/smithy-go v1.16.0 // indirect
+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
+ github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect
+ github.com/aws/smithy-go v1.20.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
go.uber.org/multierr v1.11.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/confmap/provider/s3provider/go.sum b/confmap/provider/s3provider/go.sum
index 25c1765d5365..8bd886fb8823 100644
--- a/confmap/provider/s3provider/go.sum
+++ b/confmap/provider/s3provider/go.sum
@@ -1,80 +1,72 @@
-github.com/aws/aws-sdk-go-v2 v1.11.0/go.mod h1:SQfA+m2ltnu1cA0soUkj4dRSsmITiVQUJvBIZjzfPyQ=
-github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
-github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0 h1:yVUAwvJC/0WNPbyl0nA3j1L6CW1CN8wBubCRqtG7JLI=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0/go.mod h1:Xn6sxgRuIDflLRJFj5Ev7UxABIkNbccFPV/p8itDReM=
-github.com/aws/aws-sdk-go-v2/config v1.24.0 h1:4LEk29JO3w+y9dEo/5Tq5QTP7uIEw+KQrKiHOs4xlu4=
-github.com/aws/aws-sdk-go-v2/config v1.24.0/go.mod h1:11nNDAuK86kOUHeuEQo8f3CkcV5xuUxvPwFjTZE/PnQ=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2 h1:rKH7khRMxPdD0u3dHecd0Q7NOVw3EUe7AqdkUOkiOGI=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2/go.mod h1:tXM8wmaeAhfC7nZoCxb0FzM/aRaB1m1WQ7x0qlBLq80=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 h1:G5KawTAkyHH6WyKQCdHiW4h3PmAXNJpOgwKg3H7sDRE=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3/go.mod h1:hugKmSFnZB+HgNI1sYGT14BUPZkO6alC/e0AWu+0IAQ=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.0/go.mod h1:NO3Q5ZTTQtO2xIg2+xTXYDiT7knSejfeDm7WGDaOo0U=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 h1:AaQsr5vvGR7rmeSWBtTCcw16tT9r51mWijuCQhzLnq8=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2/go.mod h1:o1IiRn7CWocIFTXJjGKJDOwxv1ibL53NpcvcqGWyRBA=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.0.0/go.mod h1:anlUzBoEWglcUxUQwZA7HQOEVEnQALVZsizAapB2hq8=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 h1:UZx8SXZ0YtzRiALzYAWcjb9Y9hZUR7MBKaBQ5ouOjPs=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2/go.mod h1:ipuRpcSaklmxR6C39G187TpBAO132gUfleTGccUPs8c=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 h1:usgqiJtamuGIBj+OvYmMq89+Z1hIKkMJToz1WpoeNUY=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0 h1:lPLbw4Gn59uoKqvOfSnkJr54XWk5Ak1NK20ZEiSWb3U=
-github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0/go.mod h1:80NaCIH9YU3rzTTs/J/ECATjXuRqzo/wB6ukO6MZ0XY=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.5.0/go.mod h1:Mq6AEc+oEjCUlBuLiK5YwW4shSOAKCQ3tXN0sQeYoBA=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 h1:h7j73yuAVVjic8pqswh+L/7r2IHP43QwRyOu6zcCDDE=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2/go.mod h1:H07AHdK5LSy8F7EJUQhoxyiCNkePoHj2D8P2yGTWafo=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.9.0 h1:0BOlTqnNnrEO04oYKzDxMMe68t107pmIotn18HtVonY=
-github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.9.0/go.mod h1:xKCZ4YFSF2s4Hnb/J0TLeOsKuGzICzcElaOKNGrVnx4=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.19.0 h1:5mRAms4TjSTOGYsqKYte5kHr1PzpMJSyLThjF3J+hw0=
-github.com/aws/aws-sdk-go-v2/service/s3 v1.19.0/go.mod h1:Gwz3aVctJe6mUY9T//bcALArPUaFmNAy2rTB9qN4No8=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 h1:km+ZNjtLtpXYf42RdaDZnNHm9s7SYAuDGTafy6nd89A=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1/go.mod h1:aHBr3pvBSD5MbzOvQtYutyPLLRPbl/y9x86XyJJnUXQ=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 h1:iRFNqZH4a67IqPvK8xxtyQYnyrlsvwmpHOe9r55ggBA=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1/go.mod h1:pTy5WM+6sNv2tB24JNKFtn6EvciQ5k40ZJ0pq/Iaxj0=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 h1:txgVXIXWPXyqdiVn92BV6a/rgtpX31HYdsOYj0sVQQQ=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1/go.mod h1:VAiJiNaoP1L89STFlEMgmHX1bKixY+FaP+TpRFrmyZ4=
-github.com/aws/smithy-go v1.9.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
-github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
-github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=
+github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
+github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=
+github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5 h1:81KE7vaZzrl7yHBYHVEzYB8sypz11NMOZ40YlWvPxsU=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.5/go.mod h1:LIt2rg7Mcgn09Ygbdh/RdIm0rQ+3BNkbP1gyVMFtRK0=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7 h1:ZMeFZ5yk+Ek+jNr1+uwCd2tG89t6oTS5yVWpa6yy2es=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.3.7/go.mod h1:mxV05U+4JiHqIpGqqYXOHLPKUC6bDXC44bsUhNjOEwY=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5 h1:f9RyWNtS8oH7cZlbn+/JNPpjUk5+5fLd5lM9M0i49Ys=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.17.5/go.mod h1:h5CoMZV2VF297/VLhRhO1WF+XYWOzXo+4HsObA4HjBQ=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1 h1:6cnno47Me9bRykw9AEv9zkXE+5or7jz8TsskTTccbgc=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.53.1/go.mod h1:qmdkIIAC+GCLASF7R2whgNrJADz0QZPX+Seiw/i4S3o=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
+github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
+github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
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/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
-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/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
-github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
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/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-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/featuregate v1.0.0-rcv0018 h1:iK4muX3KIMqKk0xwKcRzu4ravgCtUdzsvuxxdz6A27g=
-go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018/go.mod h1:xGbRuw+GbutRtVVSEy3YR2yuOlEyiUMhN2M9DJljgqY=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
diff --git a/confmap/provider/s3provider/package_test.go b/confmap/provider/s3provider/package_test.go
new file mode 100644
index 000000000000..a247d040f870
--- /dev/null
+++ b/confmap/provider/s3provider/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package s3provider
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/confmap/provider/s3provider/provider_test.go b/confmap/provider/s3provider/provider_test.go
index c316cb2dd408..3593b5755133 100644
--- a/confmap/provider/s3provider/provider_test.go
+++ b/confmap/provider/s3provider/provider_test.go
@@ -41,7 +41,8 @@ func (client *testClient) GetObject(_ context.Context, request *s3.GetObjectInpu
return &s3.GetObjectOutput{}, err
}
- return &s3.GetObjectOutput{Body: io.NopCloser(bytes.NewReader(f)), ContentLength: (int64)(len(f))}, nil
+ bodyLen := (int64)(len(f))
+ return &s3.GetObjectOutput{Body: io.NopCloser(bytes.NewReader(f)), ContentLength: &bodyLen}, nil
}
// Create a provider mocking the s3 provider
diff --git a/testbed/mockdatareceivers/mockawsxrayreceiver/Makefile b/confmap/provider/secretsmanagerprovider/Makefile
similarity index 100%
rename from testbed/mockdatareceivers/mockawsxrayreceiver/Makefile
rename to confmap/provider/secretsmanagerprovider/Makefile
diff --git a/confmap/provider/secretsmanagerprovider/README.md b/confmap/provider/secretsmanagerprovider/README.md
new file mode 100644
index 000000000000..fad55427eea2
--- /dev/null
+++ b/confmap/provider/secretsmanagerprovider/README.md
@@ -0,0 +1,11 @@
+## Summary
+This package provides a `ConfigMapProvider` implementation for Amazon Secrets Manager (`secretsmanager`) that allows
+the
+Collector the ability to read data stored in AWS Secrets Manager.
+## How it works
+- Just use the placeholders with the following pattern `${secretsmanager:}`
+- Make sure you have the `secretsmanager:GetSecretValue` in the OTEL Collector Role
+
+Prerequisites:
+- Need to setup access keys from IAM console (aws_access_key_id and aws_secret_access_key) with permission to access Amazon Secrets Manager
+- For details, can take a look at https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/
\ No newline at end of file
diff --git a/confmap/provider/secretsmanagerprovider/go.mod b/confmap/provider/secretsmanagerprovider/go.mod
new file mode 100644
index 000000000000..a1d8864b657b
--- /dev/null
+++ b/confmap/provider/secretsmanagerprovider/go.mod
@@ -0,0 +1,29 @@
+module github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/secretsmanagerprovider
+
+go 1.21
+
+require (
+ github.com/aws/aws-sdk-go-v2 v1.26.1
+ github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6
+ github.com/aws/smithy-go v1.20.2
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+)
+
+require (
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/knadh/koanf v1.5.0 // indirect
+ github.com/knadh/koanf/v2 v2.1.1 // indirect
+ github.com/kr/pretty v0.3.1 // indirect
+ github.com/mitchellh/copystructure v1.2.0 // indirect
+ github.com/mitchellh/reflectwalk v1.0.2 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/rogpeppe/go-internal v1.10.0 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/confmap/provider/secretsmanagerprovider/go.sum b/confmap/provider/secretsmanagerprovider/go.sum
new file mode 100644
index 000000000000..9a776121140a
--- /dev/null
+++ b/confmap/provider/secretsmanagerprovider/go.sum
@@ -0,0 +1,412 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
+github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
+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/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 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=
+github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
+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/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=
+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/secretsmanager v1.28.6 h1:TIOEjw0i2yyhmhRry3Oeu9YtiiHWISZ6j/irS1W3gX4=
+github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.28.6/go.mod h1:3Ba++UwWd154xtP4FRX5pUK3Gt4up5sDHCve6kVfE+g=
+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/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
+github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
+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/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+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/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+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/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+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.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/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/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M=
+github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
+github.com/go-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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-test/deep v1.0.2-0.20181118220953-042da051cf31/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
+github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+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/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
+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/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-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-plugin v1.0.1/go.mod h1:++UyYGoz3o5w9ZzAdZxtQKrWWP+iqPBn3cQptSMzBuY=
+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-version v1.1.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/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/hjson/hjson-go/v4 v4.0.0/go.mod h1:KaYt3bTw3zhBjYqnXkYywcYctk0A2nxeEFTse3rH13E=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
+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/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/knadh/koanf v1.5.0 h1:q2TSd/3Pyc/5yP9ldIrSdIz26MCcyNQzW0pEAugLPNs=
+github.com/knadh/koanf v1.5.0/go.mod h1:Hgyjp4y8v44hpZtPzs7JZfRAW5AhN7KfZcwv1RYggDs=
+github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pretty v0.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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/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-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/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+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/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/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.5.0/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=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/npillmayer/nestext v0.1.3/go.mod h1:h2lrijH8jpicr25dFY+oAJLyzlya6jhnuG+zWp9L0Uk=
+github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
+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.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE=
+github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
+github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+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/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/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
+github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/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/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
+github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
+github.com/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.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/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/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/yuin/goldmark v1.1.27/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=
+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.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+go.uber.org/multierr v1.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.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-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-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-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/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-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-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-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-20190422165155-953cdadca894/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-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-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/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-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/text v0.3.0/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.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
+google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
+google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+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-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/square/go-jose.v2 v2.3.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
diff --git a/confmap/provider/secretsmanagerprovider/metadata.yaml b/confmap/provider/secretsmanagerprovider/metadata.yaml
new file mode 100644
index 000000000000..6d3de5bc6f93
--- /dev/null
+++ b/confmap/provider/secretsmanagerprovider/metadata.yaml
@@ -0,0 +1,3 @@
+status:
+ codeowners:
+ active: [driverpt, atoulme]
\ No newline at end of file
diff --git a/confmap/provider/secretsmanagerprovider/provider.go b/confmap/provider/secretsmanagerprovider/provider.go
new file mode 100644
index 000000000000..b13ff457b8d1
--- /dev/null
+++ b/confmap/provider/secretsmanagerprovider/provider.go
@@ -0,0 +1,60 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package secretsmanagerprovider // import "github.com/open-telemetry/opentelemetry-collector-contrib/confmap/provider/secretsmanagerprovider"
+
+import (
+ "context"
+ "fmt"
+ "strings"
+
+ "github.com/aws/aws-sdk-go-v2/service/secretsmanager"
+ "go.opentelemetry.io/collector/confmap"
+)
+
+const (
+ schemeName = "secretsmanager"
+)
+
+type provider struct {
+ client *secretsmanager.Client
+}
+
+// New returns a new confmap.Provider that reads the configuration from the given AWS Secrets Manager Name or ARN.
+//
+// This Provider supports "secretsmanager" scheme, and can be called with a selector:
+// `secretsmanager:NAME_OR_ARN`
+func New() confmap.Provider {
+ return &provider{}
+}
+
+func (provider *provider) Retrieve(ctx context.Context, uri string, _ confmap.WatcherFunc) (*confmap.Retrieved, error) {
+ if !strings.HasPrefix(uri, schemeName+":") {
+ return nil, fmt.Errorf("%q uri is not supported by %q provider", uri, schemeName)
+ }
+
+ secretArn := strings.Replace(uri, schemeName+":", "", 1)
+
+ input := &secretsmanager.GetSecretValueInput{
+ SecretId: &secretArn,
+ }
+
+ response, err := provider.client.GetSecretValue(ctx, input)
+ if err != nil {
+ return nil, err
+ }
+
+ if response.SecretString == nil {
+ return nil, nil
+ }
+
+ return confmap.NewRetrieved(*response.SecretString)
+}
+
+func (*provider) Scheme() string {
+ return schemeName
+}
+
+func (*provider) Shutdown(context.Context) error {
+ return nil
+}
diff --git a/confmap/provider/secretsmanagerprovider/provider_test.go b/confmap/provider/secretsmanagerprovider/provider_test.go
new file mode 100644
index 000000000000..17cf6a2b2df0
--- /dev/null
+++ b/confmap/provider/secretsmanagerprovider/provider_test.go
@@ -0,0 +1,76 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package secretsmanagerprovider
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+ "time"
+
+ "github.com/aws/aws-sdk-go-v2/aws"
+ "github.com/aws/aws-sdk-go-v2/service/secretsmanager"
+ transport "github.com/aws/smithy-go/endpoints"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/confmap"
+)
+
+type resolver struct {
+ url string
+}
+
+func (r resolver) ResolveEndpoint(ctx context.Context, params secretsmanager.EndpointParameters) (transport.Endpoint, error) {
+ region := "us-east-1"
+ params.Region = ®ion
+ params.Endpoint = &r.url
+
+ old := secretsmanager.NewDefaultEndpointResolverV2()
+ return old.ResolveEndpoint(ctx, params)
+}
+
+// Create a provider mocking s3provider works in normal cases
+func NewTestProvider(url string) confmap.Provider {
+ cfg := aws.NewConfig()
+
+ return &provider{client: secretsmanager.NewFromConfig(*cfg, secretsmanager.WithEndpointResolverV2(resolver{url: url}))}
+}
+
+func TestSecretsManagerFetchSecret(t *testing.T) {
+ secretName := "FOO"
+ secretValue := "BAR"
+
+ s := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
+ if request.Header.Get("X-Amz-Target") == "secretsmanager.GetSecretValue" {
+ response := &struct {
+ Arn string `json:"ARN"`
+ CreatedDate int64 `json:"CreatedDate"`
+ Name string `json:"Name"`
+ SecretString string `json:"SecretString"`
+ }{
+ Arn: secretName,
+ CreatedDate: time.Now().Unix(),
+ Name: secretName,
+ SecretString: secretValue,
+ }
+
+ b, _ := json.Marshal(response)
+ _, err := writer.Write(b)
+ require.NoError(t, err)
+ writer.WriteHeader(http.StatusOK)
+ }
+ }))
+ defer s.Close()
+ fp := NewTestProvider(s.URL)
+ result, err := fp.Retrieve(context.Background(), "secretsmanager:"+secretName, nil)
+ assert.NoError(t, err)
+ assert.NoError(t, fp.Shutdown(context.Background()))
+
+ value, err := result.AsRaw()
+ assert.NoError(t, err)
+ assert.NotNil(t, value)
+ assert.Equal(t, secretValue, value)
+}
diff --git a/connector/countconnector/README.md b/connector/countconnector/README.md
index 95af41b7c837..0a0512dfdd23 100644
--- a/connector/countconnector/README.md
+++ b/connector/countconnector/README.md
@@ -2,13 +2,12 @@
| Status | |
| ------------- |-----------|
-| Distributions | [contrib], [sumo] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aconnector%2Fcount%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aconnector%2Fcount) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aconnector%2Fcount%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aconnector%2Fcount) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@djaglowski](https://www.github.com/djaglowski), [@jpkrohling](https://www.github.com/jpkrohling) |
[development]: https://github.com/open-telemetry/opentelemetry-collector#development
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
## Supported Pipeline Types
diff --git a/connector/countconnector/config.go b/connector/countconnector/config.go
index f5af7df2962d..998b32ceb9a4 100644
--- a/connector/countconnector/config.go
+++ b/connector/countconnector/config.go
@@ -130,7 +130,7 @@ func (c *Config) Unmarshal(componentParser *confmap.Conf) error {
// Nothing to do if there is no config given.
return nil
}
- if err := componentParser.Unmarshal(c); err != nil {
+ if err := componentParser.Unmarshal(c, confmap.WithIgnoreUnused()); err != nil {
return err
}
if !componentParser.IsSet("spans") {
diff --git a/connector/countconnector/config_test.go b/connector/countconnector/config_test.go
index 1ee183f3b094..72a5e43d5d82 100644
--- a/connector/countconnector/config_test.go
+++ b/connector/countconnector/config_test.go
@@ -413,7 +413,7 @@ func TestConfigErrors(t *testing.T) {
},
},
},
- expect: fmt.Sprintf("spans condition: metric %q: unable to parse OTTL statement", defaultMetricNameSpans),
+ expect: fmt.Sprintf("spans condition: metric %q: unable to parse OTTL condition", defaultMetricNameSpans),
},
{
name: "invalid_condition_spanevent",
@@ -425,7 +425,7 @@ func TestConfigErrors(t *testing.T) {
},
},
},
- expect: fmt.Sprintf("spanevents condition: metric %q: unable to parse OTTL statement", defaultMetricNameSpanEvents),
+ expect: fmt.Sprintf("spanevents condition: metric %q: unable to parse OTTL condition", defaultMetricNameSpanEvents),
},
{
name: "invalid_condition_metric",
@@ -437,7 +437,7 @@ func TestConfigErrors(t *testing.T) {
},
},
},
- expect: fmt.Sprintf("metrics condition: metric %q: unable to parse OTTL statement", defaultMetricNameMetrics),
+ expect: fmt.Sprintf("metrics condition: metric %q: unable to parse OTTL condition", defaultMetricNameMetrics),
},
{
name: "invalid_condition_datapoint",
@@ -449,7 +449,7 @@ func TestConfigErrors(t *testing.T) {
},
},
},
- expect: fmt.Sprintf("datapoints condition: metric %q: unable to parse OTTL statement", defaultMetricNameDataPoints),
+ expect: fmt.Sprintf("datapoints condition: metric %q: unable to parse OTTL condition", defaultMetricNameDataPoints),
},
{
name: "invalid_condition_log",
@@ -461,7 +461,7 @@ func TestConfigErrors(t *testing.T) {
},
},
},
- expect: fmt.Sprintf("logs condition: metric %q: unable to parse OTTL statement", defaultMetricNameLogs),
+ expect: fmt.Sprintf("logs condition: metric %q: unable to parse OTTL condition", defaultMetricNameLogs),
},
}
diff --git a/connector/countconnector/generated_component_test.go b/connector/countconnector/generated_component_test.go
new file mode 100644
index 000000000000..cab0dfd4d829
--- /dev/null
+++ b/connector/countconnector/generated_component_test.go
@@ -0,0 +1,75 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package countconnector
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+
+ {
+ name: "metrics_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+
+ {
+ name: "traces_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ firstConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ require.NoError(t, err)
+ require.NoError(t, firstConnector.Start(context.Background(), host))
+ require.NoError(t, firstConnector.Shutdown(context.Background()))
+ secondConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ require.NoError(t, secondConnector.Start(context.Background(), host))
+ require.NoError(t, secondConnector.Shutdown(context.Background()))
+ })
+ }
+}
diff --git a/connector/countconnector/go.mod b/connector/countconnector/go.mod
index cba235f74fb5..20b044213db6 100644
--- a/connector/countconnector/go.mod
+++ b/connector/countconnector/go.mod
@@ -1,58 +1,67 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/connector/countconnector
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/alecthomas/participle/v2 v2.1.0 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/uuid v1.4.0 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/connector/countconnector/go.sum b/connector/countconnector/go.sum
index 53849d810965..522d9276cb5d 100644
--- a/connector/countconnector/go.sum
+++ b/connector/countconnector/go.sum
@@ -1,31 +1,40 @@
github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
-github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4=
-github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
+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/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -36,14 +45,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -53,61 +62,77 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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/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/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/consumer v0.89.0 h1:MteKhkudX2L1ylbtdpSazO8SwyHSxl6fUEElc0rRLDQ=
-go.opentelemetry.io/collector/consumer v0.89.0/go.mod h1:aOaoi6R0qVvfHu0pEPCzSE74gIPNJoCQM8Ml4Bc9NHE=
-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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -120,15 +145,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-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/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/connector/countconnector/internal/metadata/generated_status.go b/connector/countconnector/internal/metadata/generated_status.go
index 614bd16ddcdc..ea152f0aa813 100644
--- a/connector/countconnector/internal/metadata/generated_status.go
+++ b/connector/countconnector/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("count")
)
const (
- Type = "count"
TracesToMetricsStability = component.StabilityLevelDevelopment
MetricsToMetricsStability = component.StabilityLevelDevelopment
LogsToMetricsStability = component.StabilityLevelDevelopment
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/countconnector")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/countconnector")
+}
diff --git a/connector/countconnector/metadata.yaml b/connector/countconnector/metadata.yaml
index 42ab007b9cad..1bc57a1ff9c2 100644
--- a/connector/countconnector/metadata.yaml
+++ b/connector/countconnector/metadata.yaml
@@ -1,9 +1,13 @@
type: count
+scope_name: otelcol/countconnector
status:
class: connector
stability:
development: [traces_to_metrics, metrics_to_metrics, logs_to_metrics]
- distributions: [contrib, sumo]
+ distributions: [contrib]
codeowners:
active: [djaglowski, jpkrohling]
+
+tests:
+ config:
diff --git a/connector/countconnector/package_test.go b/connector/countconnector/package_test.go
new file mode 100644
index 000000000000..6c55bf168a82
--- /dev/null
+++ b/connector/countconnector/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package countconnector
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/datadogconnector/README.md b/connector/datadogconnector/README.md
index 457382cd830c..25df928f1e4f 100644
--- a/connector/datadogconnector/README.md
+++ b/connector/datadogconnector/README.md
@@ -5,7 +5,8 @@
| ------------- |-----------|
| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aconnector%2Fdatadog%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aconnector%2Fdatadog) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aconnector%2Fdatadog%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aconnector%2Fdatadog) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@mx-psi](https://www.github.com/mx-psi), [@gbbr](https://www.github.com/gbbr), [@dineshg13](https://www.github.com/dineshg13) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@mx-psi](https://www.github.com/mx-psi), [@dineshg13](https://www.github.com/dineshg13) |
+| Emeritus | [@gbbr](https://www.github.com/gbbr) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
@@ -103,4 +104,80 @@ service:
```
-Here we have two traces pipelines that ingest the same data but one is being sampled. The one that is sampled has its data sent to the datadog backend for you to see the sampled subset of the total traces sent across. The other non-sampled pipeline of traces sends its data to the metrics pipeline to be used in the APM stats. This unsampled pipeline gives the full picture of how much data the application emits in traces.
+Here we have two traces pipelines that ingest the same data but one is being sampled. The one that is sampled has its data sent to the datadog backend for you to see the sampled subset of the total traces sent across. The other non-sampled pipeline of traces sends its data to the metrics pipeline to be used in the APM stats. This unsampled pipeline gives the full picture of how much data the application emits in traces.
+
+## Configurations
+
+```yaml
+connectors:
+ datadog/connector:
+ traces:
+ ## @param ignore_resources - list of strings - optional
+ ## A blacklist of regular expressions can be provided to disable certain traces based on their resource name
+ ## all entries must be surrounded by double quotes and separated by commas.
+ #
+ # ignore_resources: ["(GET|POST) /healthcheck"]
+
+ ## @param span_name_remappings - map of key/value pairs - optional
+ ## A map of Datadog span operation name keys and preferred name valuues to update those names to. This can be used to
+ ## automatically map Datadog Span Operation Names to an updated value, and is useful when a user wants to
+ ## shorten or modify span names to something more user friendly in the case of instrumentation libraries with
+ ## particularly verbose names.
+ #
+ # span_name_remappings:
+ # io.opentelemetry.javaagent.spring.client: spring.client
+ # instrumentation:express.server: express
+ # go.opentelemetry.io_contrib_instrumentation_net_http_otelhttp.client: http.client
+
+ ## @param span_name_as_resource_name - use OpenTelemetry semantic convention for span naming - optional
+ ## Option created to maintain similarity with the OpenTelemetry semantic conventions as discussed in the issue below.
+ ## https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions
+ ## https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909
+ #
+ # span_name_as_resource_name: true
+
+ ## @param compute_stats_by_span_kind - enables APM stats computation based on `span.kind` - optional
+ ## If set to true, enables an additional stats computation check on spans to see they have an eligible `span.kind` (server, consumer, client, producer).
+ ## If enabled, a span with an eligible `span.kind` will have stats computed. If disabled, only top-level and measured spans will have stats computed.
+ ## NOTE: For stats computed from OTel traces, only top-level spans are considered when this option is off.
+ #
+ # compute_stats_by_span_kind: true
+
+ ## @param peer_tags_aggregation - enables aggregation of peer related tags in Datadog exporter - optional
+ ## If set to true, enables aggregation of peer related tags (e.g., `peer.service`, `db.instance`, etc.) in Datadog exporter.
+ ## If disabled, aggregated trace stats will not include these tags as dimensions on trace metrics.
+ ## For the best experience with peer tags, Datadog also recommends enabling `compute_stats_by_span_kind`.
+ ## If you are using an OTel tracer, it's best to have both enabled because client/producer spans with relevant peer tags
+ ## may not be marked by Datadog exporter as top-level spans.
+ ## If enabling both causes Datadog exporter to consume too many resources, try disabling `compute_stats_by_span_kind` first.
+ ## A high cardinality of peer tags or APM resources can also contribute to higher CPU and memory consumption.
+ ## You can check for the cardinality of these fields by making trace search queries in the Datadog UI.
+ ## The default list of peer tags can be found in https://github.com/DataDog/datadog-agent/blob/main/pkg/trace/stats/concentrator.go.
+ #
+ # peer_tags_aggregation: false
+
+ ## @param trace_buffer - specifies the number of outgoing trace payloads to buffer before dropping - optional
+ ## If unset, the default value is 1000.
+ ## If you start seeing log messages like `Payload in channel full. Dropped 1 payload.` in the datadog exporter, consider
+ ## setting a higher `trace_buffer` to avoid traces being dropped.
+ #
+ # trace_buffer: 1000
+
+ ## @param peer_tags - [BETA] Optional list of supplementary peer tags that go beyond the defaults. The Datadog backend validates all tags
+ ## and will drop ones that are unapproved. The default set of peer tags can be found at
+ ## https://github.com/DataDog/datadog-agent/blob/505170c4ac8c3cbff1a61cf5f84b28d835c91058/pkg/trace/stats/concentrator.go#L55.
+ #
+ # peer_tags: ["tag"]
+
+ ## @param resource_attributes_as_container_tags - enables the use of resource attributes as container tags - Optional
+ ## A list of resource attributes that should be used as container tags.
+ #
+ # resource_attributes_as_container_tags: ["could.availability_zone", "could.region"]
+```
+
+**NOTE**: `compute_stats_by_span_kind` and `peer_tags_aggregation` only work when the feature gate `connector.datadogconnector.performance` is enabled. See below for details on this feature gate.
+
+## Feature Gate for Performance
+
+In case you are experiencing high memory usage with Datadog Connector, similar to [issue](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/29755), use the feature gate `connector.datadogconnector.performance`. With the feature gate enabled, Datadog Connector takes OTLP traces and produces OTLP metric with the name `dd.internal.stats.payload`. This Metric has an attribute `dd.internal.stats.payload` that contains the bytes for StatsPayload. With the feature gate, we can use Datadog Connector only in conjunction with Datadog Exporter. Please enable the feature only if needed for performance reasons and higher throughput. Enable the feature gate on all collectors (especially in gateway deployment) in the pipeline that sends data to Datadog. We plan to refactor this component in the future so that the signals produced are usable in any metrics pipeline.
+
diff --git a/connector/datadogconnector/config.go b/connector/datadogconnector/config.go
new file mode 100644
index 000000000000..1382f09c5740
--- /dev/null
+++ b/connector/datadogconnector/config.go
@@ -0,0 +1,98 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package datadogconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector"
+
+import (
+ "fmt"
+ "regexp"
+
+ "go.opentelemetry.io/collector/component"
+)
+
+var _ component.Config = (*Config)(nil)
+
+// Config defines configuration for the Datadog connector.
+type Config struct {
+ // Traces defines the Traces specific configuration
+ Traces TracesConfig `mapstructure:"traces"`
+}
+
+// TracesConfig defines the traces specific configuration options
+type TracesConfig struct {
+ // ignored resources
+ // A blocklist of regular expressions can be provided to disable certain traces based on their resource name
+ // all entries must be surrounded by double quotes and separated by commas.
+ // ignore_resources: ["(GET|POST) /healthcheck"]
+ IgnoreResources []string `mapstructure:"ignore_resources"`
+
+ // SpanNameRemappings is the map of datadog span names and preferred name to map to. This can be used to
+ // automatically map Datadog Span Operation Names to an updated value. All entries should be key/value pairs.
+ // span_name_remappings:
+ // io.opentelemetry.javaagent.spring.client: spring.client
+ // instrumentation:express.server: express
+ // go.opentelemetry.io_contrib_instrumentation_net_http_otelhttp.client: http.client
+ SpanNameRemappings map[string]string `mapstructure:"span_name_remappings"`
+
+ // If set to true the OpenTelemetry span name will used in the Datadog resource name.
+ // If set to false the resource name will be filled with the instrumentation library name + span kind.
+ // The default value is `false`.
+ SpanNameAsResourceName bool `mapstructure:"span_name_as_resource_name"`
+
+ // If set to true, enables an additional stats computation check on spans to see they have an eligible `span.kind` (server, consumer, client, producer).
+ // If enabled, a span with an eligible `span.kind` will have stats computed. If disabled, only top-level and measured spans will have stats computed.
+ // NOTE: For stats computed from OTel traces, only top-level spans are considered when this option is off.
+ ComputeStatsBySpanKind bool `mapstructure:"compute_stats_by_span_kind"`
+
+ // If set to true, enables aggregation of peer related tags (e.g., `peer.service`, `db.instance`, etc.) in the datadog connector.
+ // If disabled, aggregated trace stats will not include these tags as dimensions on trace metrics.
+ // For the best experience with peer tags, Datadog also recommends enabling `compute_stats_by_span_kind`.
+ // If you are using an OTel tracer, it's best to have both enabled because client/producer spans with relevant peer tags
+ // may not be marked by the datadog connector as top-level spans.
+ // If enabling both causes the datadog connector to consume too many resources, try disabling `compute_stats_by_span_kind` first.
+ // A high cardinality of peer tags or APM resources can also contribute to higher CPU and memory consumption.
+ // You can check for the cardinality of these fields by making trace search queries in the Datadog UI.
+ // The default list of peer tags can be found in https://github.com/DataDog/datadog-agent/blob/main/pkg/trace/stats/concentrator.go.
+ PeerTagsAggregation bool `mapstructure:"peer_tags_aggregation"`
+
+ // [BETA] Optional list of supplementary peer tags that go beyond the defaults. The Datadog backend validates all tags
+ // and will drop ones that are unapproved. The default set of peer tags can be found at
+ // https://github.com/DataDog/datadog-agent/blob/505170c4ac8c3cbff1a61cf5f84b28d835c91058/pkg/trace/stats/concentrator.go#L55.
+ PeerTags []string `mapstructure:"peer_tags"`
+
+ // TraceBuffer specifies the number of Datadog Agent TracerPayloads to buffer before dropping.
+ // The default value is 1000.
+ TraceBuffer int `mapstructure:"trace_buffer"`
+
+ // ResourceAttributesAsContainerTags specifies the list of resource attributes to be used as container tags.
+ ResourceAttributesAsContainerTags []string `mapstructure:"resource_attributes_as_container_tags"`
+}
+
+// Validate the configuration for errors. This is required by component.Config.
+func (c *Config) Validate() error {
+ if c.Traces.IgnoreResources != nil {
+ for _, entry := range c.Traces.IgnoreResources {
+ _, err := regexp.Compile(entry)
+ if err != nil {
+ return fmt.Errorf("%q is not valid resource filter regular expression", entry)
+ }
+ }
+ }
+
+ if c.Traces.SpanNameRemappings != nil {
+ for key, value := range c.Traces.SpanNameRemappings {
+ if value == "" {
+ return fmt.Errorf("%q is not valid value for span name remapping", value)
+ }
+ if key == "" {
+ return fmt.Errorf("%q is not valid key for span name remapping", key)
+ }
+ }
+ }
+
+ if c.Traces.TraceBuffer < 0 {
+ return fmt.Errorf("Trace buffer must be non-negative")
+ }
+
+ return nil
+}
diff --git a/connector/datadogconnector/config_test.go b/connector/datadogconnector/config_test.go
new file mode 100644
index 000000000000..307f9e920dcd
--- /dev/null
+++ b/connector/datadogconnector/config_test.go
@@ -0,0 +1,84 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package datadogconnector
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestValidate(t *testing.T) {
+
+ tests := []struct {
+ name string
+ cfg *Config
+ err string
+ }{
+ {
+ name: "span name remapping valid",
+ cfg: &Config{
+ Traces: TracesConfig{
+ SpanNameRemappings: map[string]string{"old.opentelemetryspan.name": "updated.name"},
+ },
+ },
+ },
+ {
+ name: "span name remapping empty val",
+ cfg: &Config{Traces: TracesConfig{
+ SpanNameRemappings: map[string]string{"oldname": ""},
+ }},
+ err: "\"\" is not valid value for span name remapping",
+ },
+ {
+ name: "span name remapping empty key",
+ cfg: &Config{Traces: TracesConfig{
+ SpanNameRemappings: map[string]string{"": "newname"},
+ }},
+ err: "\"\" is not valid key for span name remapping",
+ },
+ {
+ name: "ignore resources valid",
+ cfg: &Config{Traces: TracesConfig{
+ IgnoreResources: []string{"[123]"},
+ }},
+ },
+ {
+ name: "ignore resources missing bracket",
+ cfg: &Config{Traces: TracesConfig{
+ IgnoreResources: []string{"[123"},
+ }},
+ err: "\"[123\" is not valid resource filter regular expression",
+ },
+ {
+ name: "With trace_buffer",
+ cfg: &Config{Traces: TracesConfig{
+ TraceBuffer: 10,
+ }},
+ },
+ {
+ name: "neg trace_buffer",
+ cfg: &Config{Traces: TracesConfig{
+ TraceBuffer: -10,
+ }},
+ err: "Trace buffer must be non-negative",
+ },
+ {
+ name: "With peer_tags",
+ cfg: &Config{
+ Traces: TracesConfig{PeerTags: []string{"tag1", "tag2"}},
+ },
+ },
+ }
+ for _, testInstance := range tests {
+ t.Run(testInstance.name, func(t *testing.T) {
+ err := testInstance.cfg.Validate()
+ if testInstance.err != "" {
+ assert.EqualError(t, err, testInstance.err)
+ } else {
+ assert.NoError(t, err)
+ }
+ })
+ }
+}
diff --git a/connector/datadogconnector/connector.go b/connector/datadogconnector/connector.go
index 7e8efd7ffacf..22f412e8856a 100644
--- a/connector/datadogconnector/connector.go
+++ b/connector/datadogconnector/connector.go
@@ -5,21 +5,31 @@ package datadogconnector // import "github.com/open-telemetry/opentelemetry-coll
import (
"context"
+ "fmt"
+ "sync"
+ "time"
pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace"
+ traceconfig "github.com/DataDog/datadog-agent/pkg/trace/config"
+ "github.com/DataDog/datadog-agent/pkg/trace/timing"
+ "github.com/DataDog/datadog-go/v5/statsd"
+ "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes"
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics"
+ "github.com/patrickmn/go-cache"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
+ semconv "go.opentelemetry.io/collector/semconv/v1.17.0"
+ "go.opentelemetry.io/otel/metric/noop"
"go.uber.org/zap"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog"
)
-// connectorImp is the schema for connector
-type connectorImp struct {
+// traceToMetricConnector is the schema for connector
+type traceToMetricConnector struct {
metricsConsumer consumer.Metrics // the next component in the pipeline to ingest metrics after connector
- tracesConsumer consumer.Traces // the next component in the pipeline to ingest traces after connector
logger *zap.Logger
// agent specifies the agent used to ingest traces and output APM Stats.
@@ -30,51 +40,102 @@ type connectorImp struct {
// from the agent to OTLP Metrics.
translator *metrics.Translator
+ enrichedTags map[string]string
+ containerTagCache *cache.Cache
+
// in specifies the channel through which the agent will output Stats Payloads
// resulting from ingested traces.
in chan *pb.StatsPayload
// exit specifies the exit channel, which will be closed upon shutdown.
exit chan struct{}
+
+ // isStarted tracks whether Start() has been called.
+ isStarted bool
}
-var _ component.Component = (*connectorImp)(nil) // testing that the connectorImp properly implements the type Component interface
+var _ component.Component = (*traceToMetricConnector)(nil) // testing that the connectorImp properly implements the type Component interface
-// function to create a new connector
-func newConnector(logger *zap.Logger, _ component.Config, metricsConsumer consumer.Metrics, tracesConsumer consumer.Traces) (*connectorImp, error) {
- logger.Info("Building datadog connector")
+// cacheExpiration is the time after which a container tag cache entry will expire
+// and be removed from the cache.
+var cacheExpiration = time.Minute * 5
- in := make(chan *pb.StatsPayload, 100)
- trans, err := metrics.NewTranslator(logger)
+// cacheCleanupInterval is the time after which the cache will be cleaned up.
+var cacheCleanupInterval = time.Minute
- ctx := context.Background()
+// function to create a new connector
+func newTraceToMetricConnector(set component.TelemetrySettings, cfg component.Config, metricsConsumer consumer.Metrics, metricsClient statsd.ClientInterface, timingReporter timing.Reporter) (*traceToMetricConnector, error) {
+ set.Logger.Info("Building datadog connector for traces to metrics")
+ in := make(chan *pb.StatsPayload, 100)
+ set.MeterProvider = noop.NewMeterProvider() // disable metrics for the connector
+ attributesTranslator, err := attributes.NewTranslator(set)
if err != nil {
- return nil, err
+ return nil, fmt.Errorf("failed to create attributes translator: %w", err)
+ }
+ trans, err := metrics.NewTranslator(set, attributesTranslator)
+ if err != nil {
+ return nil, fmt.Errorf("failed to create metrics translator: %w", err)
+ }
+
+ ctags := make(map[string]string, len(cfg.(*Config).Traces.ResourceAttributesAsContainerTags))
+ for _, val := range cfg.(*Config).Traces.ResourceAttributesAsContainerTags {
+ if v, ok := attributes.ContainerMappings[val]; ok {
+ ctags[v] = ""
+ } else {
+ ctags[val] = ""
+ }
}
- return &connectorImp{
- logger: logger,
- agent: datadog.NewAgent(ctx, in),
- translator: trans,
- in: in,
- metricsConsumer: metricsConsumer,
- tracesConsumer: tracesConsumer,
- exit: make(chan struct{}),
+ ctx := context.Background()
+ return &traceToMetricConnector{
+ logger: set.Logger,
+ agent: datadog.NewAgentWithConfig(ctx, getTraceAgentCfg(cfg.(*Config).Traces, attributesTranslator), in, metricsClient, timingReporter),
+ translator: trans,
+ in: in,
+ metricsConsumer: metricsConsumer,
+ enrichedTags: ctags,
+ containerTagCache: cache.New(cacheExpiration, cacheCleanupInterval),
+ exit: make(chan struct{}),
}, nil
}
+func getTraceAgentCfg(cfg TracesConfig, attributesTranslator *attributes.Translator) *traceconfig.AgentConfig {
+ acfg := traceconfig.New()
+ acfg.OTLPReceiver.AttributesTranslator = attributesTranslator
+ acfg.OTLPReceiver.SpanNameRemappings = cfg.SpanNameRemappings
+ acfg.OTLPReceiver.SpanNameAsResourceName = cfg.SpanNameAsResourceName
+ acfg.Ignore["resource"] = cfg.IgnoreResources
+ acfg.ComputeStatsBySpanKind = cfg.ComputeStatsBySpanKind
+ acfg.PeerTagsAggregation = cfg.PeerTagsAggregation
+ acfg.PeerTags = cfg.PeerTags
+ if len(cfg.ResourceAttributesAsContainerTags) > 0 {
+ acfg.Features["enable_cid_stats"] = struct{}{}
+ delete(acfg.Features, "disable_cid_stats")
+ }
+ if v := cfg.TraceBuffer; v > 0 {
+ acfg.TraceBuffer = v
+ }
+ return acfg
+}
+
// Start implements the component.Component interface.
-func (c *connectorImp) Start(_ context.Context, _ component.Host) error {
+func (c *traceToMetricConnector) Start(_ context.Context, _ component.Host) error {
c.logger.Info("Starting datadogconnector")
c.agent.Start()
- if c.metricsConsumer != nil {
- go c.run()
- }
+ go c.run()
+ c.isStarted = true
return nil
}
// Shutdown implements the component.Component interface.
-func (c *connectorImp) Shutdown(context.Context) error {
+func (c *traceToMetricConnector) Shutdown(context.Context) error {
+ if !c.isStarted {
+ // Note: it is not necessary to manually close c.exit, c.in and c.agent.(*datadog.TraceAgent).exit channels as these are unused.
+ c.logger.Info("Requested shutdown, but not started, ignoring.")
+ return nil
+ }
c.logger.Info("Shutting down datadog connector")
+ c.logger.Info("Stopping datadog agent")
+ // stop the agent and wait for the run loop to exit
c.agent.Stop()
c.exit <- struct{}{} // signal exit
<-c.exit // wait for close
@@ -83,21 +144,71 @@ func (c *connectorImp) Shutdown(context.Context) error {
// Capabilities implements the consumer interface.
// tells use whether the component(connector) will mutate the data passed into it. if set to true the connector does modify the data
-func (c *connectorImp) Capabilities() consumer.Capabilities {
- return consumer.Capabilities{MutatesData: true} // ConsumeTraces puts a new attribute _dd.stats_computed
+func (c *traceToMetricConnector) Capabilities() consumer.Capabilities {
+ return consumer.Capabilities{MutatesData: false}
}
-func (c *connectorImp) ConsumeTraces(ctx context.Context, traces ptrace.Traces) error {
- c.agent.Ingest(ctx, traces)
- if c.tracesConsumer != nil {
- return c.tracesConsumer.ConsumeTraces(ctx, traces)
+func (c *traceToMetricConnector) addToCache(containerID string, key string) {
+ if tags, ok := c.containerTagCache.Get(containerID); ok {
+ tagList := tags.(*sync.Map)
+ tagList.Store(key, struct{}{})
+ } else {
+ tagList := &sync.Map{}
+ tagList.Store(key, struct{}{})
+ c.containerTagCache.Set(containerID, tagList, cache.DefaultExpiration)
}
+}
+
+func (c *traceToMetricConnector) populateContainerTagsCache(traces ptrace.Traces) {
+ for i := 0; i < traces.ResourceSpans().Len(); i++ {
+ rs := traces.ResourceSpans().At(i)
+ attrs := rs.Resource().Attributes()
+
+ containerID, ok := attrs.Get(semconv.AttributeContainerID)
+ if !ok {
+ continue
+ }
+ ddContainerTags := attributes.ContainerTagsFromResourceAttributes(attrs)
+ for attr := range c.enrichedTags {
+ if val, ok := ddContainerTags[attr]; ok {
+ key := fmt.Sprintf("%s:%s", attr, val)
+ c.addToCache(containerID.AsString(), key)
+ } else if incomingVal, ok := attrs.Get(attr); ok {
+ key := fmt.Sprintf("%s:%s", attr, incomingVal.Str())
+ c.addToCache(containerID.AsString(), key)
+ }
+ }
+ }
+}
+
+func (c *traceToMetricConnector) ConsumeTraces(ctx context.Context, traces ptrace.Traces) error {
+ c.populateContainerTagsCache(traces)
+ c.agent.Ingest(ctx, traces)
return nil
}
+func (c *traceToMetricConnector) enrichStatsPayload(stats *pb.StatsPayload) {
+ for _, stat := range stats.Stats {
+ if stat.ContainerID != "" {
+ if tags, ok := c.containerTagCache.Get(stat.ContainerID); ok {
+
+ tagList := tags.(*sync.Map)
+ for _, tag := range stat.Tags {
+ tagList.Store(tag, struct{}{})
+ }
+ stat.Tags = make([]string, 0)
+ tagList.Range(func(key, _ any) bool {
+ stat.Tags = append(stat.Tags, key.(string))
+ return true
+ })
+ }
+ }
+ }
+}
+
// run awaits incoming stats resulting from the agent's ingestion, converts them
// to metrics and flushes them using the configured metrics exporter.
-func (c *connectorImp) run() {
+func (c *traceToMetricConnector) run() {
defer close(c.exit)
for {
select {
@@ -105,8 +216,21 @@ func (c *connectorImp) run() {
if len(stats.Stats) == 0 {
continue
}
+ var mx pmetric.Metrics
+ var err error
+ // Enrich the stats with container tags
+ if len(c.enrichedTags) > 0 {
+ c.enrichStatsPayload(stats)
+ }
+
+ c.logger.Debug("Received stats payload", zap.Any("stats", stats))
+
+ mx, err = c.translator.StatsToMetrics(stats)
+ if err != nil {
+ c.logger.Error("Failed to convert stats to metrics", zap.Error(err))
+ continue
+ }
// APM stats as metrics
- mx := c.translator.StatsPayloadToMetrics(stats)
ctx := context.TODO()
// send metrics to the consumer or next component in pipeline
diff --git a/connector/datadogconnector/connector_test.go b/connector/datadogconnector/connector_test.go
index d5410720be71..4fb76843df72 100644
--- a/connector/datadogconnector/connector_test.go
+++ b/connector/datadogconnector/connector_test.go
@@ -5,19 +5,30 @@ package datadogconnector
import (
"context"
+ "sync"
"testing"
+ "time"
+ pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace"
+ "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes"
+ otlpmetrics "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/connector/connectortest"
"go.opentelemetry.io/collector/consumer/consumertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ semconv "go.opentelemetry.io/collector/semconv/v1.5.0"
+ "go.uber.org/zap"
+ "google.golang.org/protobuf/proto"
)
-var _ component.Component = (*connectorImp)(nil) // testing that the connectorImp properly implements the type Component interface
+var _ component.Component = (*traceToMetricConnector)(nil) // testing that the connectorImp properly implements the type Component interface
// create test to create a connector, check that basic code compiles
func TestNewConnector(t *testing.T) {
-
factory := NewFactory()
creationParams := connectortest.NewNopCreateSettings()
@@ -26,12 +37,202 @@ func TestNewConnector(t *testing.T) {
traceToMetricsConnector, err := factory.CreateTracesToMetrics(context.Background(), creationParams, cfg, consumertest.NewNop())
assert.NoError(t, err)
- _, ok := traceToMetricsConnector.(*connectorImp)
+ _, ok := traceToMetricsConnector.(*traceToMetricConnector)
assert.True(t, ok) // checks if the created connector implements the connectorImp struct
+}
+
+func TestTraceToTraceConnector(t *testing.T) {
+ factory := NewFactory()
+
+ creationParams := connectortest.NewNopCreateSettings()
+ cfg := factory.CreateDefaultConfig().(*Config)
traceToTracesConnector, err := factory.CreateTracesToTraces(context.Background(), creationParams, cfg, consumertest.NewNop())
assert.NoError(t, err)
- _, ok = traceToTracesConnector.(*connectorImp)
+ _, ok := traceToTracesConnector.(*traceToTraceConnector)
assert.True(t, ok) // checks if the created connector implements the connectorImp struct
}
+
+var (
+ spanStartTimestamp = pcommon.NewTimestampFromTime(time.Date(2020, 2, 11, 20, 26, 12, 321, time.UTC))
+ spanEventTimestamp = pcommon.NewTimestampFromTime(time.Date(2020, 2, 11, 20, 26, 13, 123, time.UTC))
+ spanEndTimestamp = pcommon.NewTimestampFromTime(time.Date(2020, 2, 11, 20, 26, 13, 789, time.UTC))
+)
+
+func generateTrace() ptrace.Traces {
+ td := ptrace.NewTraces()
+ res := td.ResourceSpans().AppendEmpty().Resource()
+ res.Attributes().EnsureCapacity(3)
+ res.Attributes().PutStr("resource-attr1", "resource-attr-val1")
+ res.Attributes().PutStr("container.id", "my-container-id")
+ res.Attributes().PutStr("cloud.availability_zone", "my-zone")
+ res.Attributes().PutStr("cloud.region", "my-region")
+ // add a custom Resource attribute
+ res.Attributes().PutStr("az", "my-az")
+
+ ss := td.ResourceSpans().At(0).ScopeSpans().AppendEmpty().Spans()
+ ss.EnsureCapacity(1)
+ fillSpanOne(ss.AppendEmpty())
+ return td
+}
+
+func fillSpanOne(span ptrace.Span) {
+ span.SetName("operationA")
+ span.SetStartTimestamp(spanStartTimestamp)
+ span.SetEndTimestamp(spanEndTimestamp)
+ span.SetDroppedAttributesCount(1)
+ span.SetTraceID([16]byte{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10})
+ span.SetSpanID([8]byte{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18})
+ evs := span.Events()
+ ev0 := evs.AppendEmpty()
+ ev0.SetTimestamp(spanEventTimestamp)
+ ev0.SetName("event-with-attr")
+ ev0.Attributes().PutStr("span-event-attr", "span-event-attr-val")
+ ev0.SetDroppedAttributesCount(2)
+ ev1 := evs.AppendEmpty()
+ ev1.SetTimestamp(spanEventTimestamp)
+ ev1.SetName("event")
+ ev1.SetDroppedAttributesCount(2)
+ span.SetDroppedEventsCount(1)
+ status := span.Status()
+ status.SetCode(ptrace.StatusCodeError)
+ status.SetMessage("status-cancelled")
+}
+
+func creteConnector(t *testing.T) (*traceToMetricConnector, *consumertest.MetricsSink) {
+ factory := NewFactory()
+
+ creationParams := connectortest.NewNopCreateSettings()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.Traces.ResourceAttributesAsContainerTags = []string{semconv.AttributeCloudAvailabilityZone, semconv.AttributeCloudRegion, "az"}
+
+ metricsSink := &consumertest.MetricsSink{}
+
+ traceToMetricsConnector, err := factory.CreateTracesToMetrics(context.Background(), creationParams, cfg, metricsSink)
+ assert.NoError(t, err)
+
+ connector, ok := traceToMetricsConnector.(*traceToMetricConnector)
+ require.True(t, ok)
+ return connector, metricsSink
+}
+
+func TestContainerTags(t *testing.T) {
+ connector, metricsSink := creteConnector(t)
+ err := connector.Start(context.Background(), componenttest.NewNopHost())
+ if err != nil {
+ t.Errorf("Error starting connector: %v", err)
+ return
+ }
+ defer func() {
+ _ = connector.Shutdown(context.Background())
+ }()
+
+ trace1 := generateTrace()
+
+ err = connector.ConsumeTraces(context.Background(), trace1)
+ assert.NoError(t, err)
+
+ // Send two traces to ensure unique container tags are added to the cache
+ trace2 := generateTrace()
+ err = connector.ConsumeTraces(context.Background(), trace2)
+ assert.NoError(t, err)
+ // check if the container tags are added to the cache
+ assert.Equal(t, 1, len(connector.containerTagCache.Items()))
+ count := 0
+ connector.containerTagCache.Items()["my-container-id"].Object.(*sync.Map).Range(func(_, _ any) bool {
+ count++
+ return true
+ })
+ assert.Equal(t, 3, count)
+
+ for {
+ if len(metricsSink.AllMetrics()) > 0 {
+ break
+ }
+ time.Sleep(100 * time.Millisecond)
+ }
+
+ // check if the container tags are added to the metrics
+ metrics := metricsSink.AllMetrics()
+ assert.Equal(t, 1, len(metrics))
+
+ ch := make(chan []byte, 100)
+ tr := newTranslatorWithStatsChannel(t, zap.NewNop(), ch)
+ _, err = tr.MapMetrics(context.Background(), metrics[0], nil)
+ require.NoError(t, err)
+ msg := <-ch
+ sp := &pb.StatsPayload{}
+
+ err = proto.Unmarshal(msg, sp)
+ require.NoError(t, err)
+
+ tags := sp.Stats[0].Tags
+ assert.Equal(t, 3, len(tags))
+ assert.ElementsMatch(t, []string{"region:my-region", "zone:my-zone", "az:my-az"}, tags)
+}
+
+func newTranslatorWithStatsChannel(t *testing.T, logger *zap.Logger, ch chan []byte) *otlpmetrics.Translator {
+ options := []otlpmetrics.TranslatorOption{
+ otlpmetrics.WithHistogramMode(otlpmetrics.HistogramModeDistributions),
+
+ otlpmetrics.WithNumberMode(otlpmetrics.NumberModeCumulativeToDelta),
+ otlpmetrics.WithHistogramAggregations(),
+ otlpmetrics.WithStatsOut(ch),
+ }
+
+ set := componenttest.NewNopTelemetrySettings()
+ set.Logger = logger
+
+ attributesTranslator, err := attributes.NewTranslator(set)
+ require.NoError(t, err)
+ tr, err := otlpmetrics.NewTranslator(
+ set,
+ attributesTranslator,
+ options...,
+ )
+
+ require.NoError(t, err)
+ return tr
+}
+
+func TestDataRace(t *testing.T) {
+ connector, _ := creteConnector(t)
+ trace1 := generateTrace()
+ ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
+ defer cancel()
+ var wg sync.WaitGroup
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ default:
+ connector.populateContainerTagsCache(trace1)
+ }
+ }
+ }()
+
+ wg.Add(1)
+ go func() {
+ defer wg.Done()
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ default:
+ sp := &pb.StatsPayload{
+ Stats: []*pb.ClientStatsPayload{
+ {
+ ContainerID: "my-container-id",
+ },
+ },
+ }
+ connector.enrichStatsPayload(sp)
+ }
+ }
+ }()
+ wg.Wait()
+}
diff --git a/connector/datadogconnector/example_test.go b/connector/datadogconnector/example_test.go
new file mode 100644
index 000000000000..13ef46e716f0
--- /dev/null
+++ b/connector/datadogconnector/example_test.go
@@ -0,0 +1,66 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package datadogconnector
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/debugexporter"
+ "go.opentelemetry.io/collector/otelcol"
+ "go.opentelemetry.io/collector/otelcol/otelcoltest"
+ "go.opentelemetry.io/collector/processor"
+ "go.opentelemetry.io/collector/processor/batchprocessor"
+ "go.opentelemetry.io/collector/receiver"
+ "go.opentelemetry.io/collector/receiver/otlpreceiver"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor"
+)
+
+func TestExamples(t *testing.T) {
+ t.Setenv("DD_API_KEY", "testvalue")
+ factories := newTestComponents(t)
+ const configFile = "./examples/config.yaml"
+ _, err := otelcoltest.LoadConfigAndValidate(configFile, factories)
+ require.NoError(t, err, "All yaml config must validate. Please ensure that all necessary component factories are added in newTestComponents()")
+}
+
+// newTestComponents returns the minimum amount of components necessary for
+// running a collector with any of the examples/* yaml configuration files.
+func newTestComponents(t *testing.T) otelcol.Factories {
+ var (
+ factories otelcol.Factories
+ err error
+ )
+ factories.Receivers, err = receiver.MakeFactoryMap(
+ []receiver.Factory{
+ otlpreceiver.NewFactory(),
+ }...,
+ )
+ require.NoError(t, err)
+ factories.Processors, err = processor.MakeFactoryMap(
+ []processor.Factory{
+ batchprocessor.NewFactory(),
+ tailsamplingprocessor.NewFactory(),
+ }...,
+ )
+ require.NoError(t, err)
+ factories.Connectors, err = connector.MakeFactoryMap(
+ []connector.Factory{
+ NewFactory(),
+ }...,
+ )
+ require.NoError(t, err)
+ factories.Exporters, err = exporter.MakeFactoryMap(
+ []exporter.Factory{
+ datadogexporter.NewFactory(),
+ debugexporter.NewFactory(),
+ }...,
+ )
+ require.NoError(t, err)
+ return factories
+}
diff --git a/connector/datadogconnector/examples/config.yaml b/connector/datadogconnector/examples/config.yaml
new file mode 100644
index 000000000000..5d6f03374b67
--- /dev/null
+++ b/connector/datadogconnector/examples/config.yaml
@@ -0,0 +1,93 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:4318"
+ grpc:
+ endpoint: "localhost:4317"
+processors:
+ batch:
+ send_batch_size: 10
+ timeout: 5s
+ tail_sampling:
+ decision_wait: 1s
+ policies: [{name: sample_flag, type: boolean_attribute, boolean_attribute: {key: sampled, value: true}}]
+connectors:
+ datadog/connector:
+ traces:
+ ## @param ignore_resources - list of strings - optional
+ ## A blacklist of regular expressions can be provided to disable certain traces based on their resource name
+ ## all entries must be surrounded by double quotes and separated by commas.
+ #
+ ignore_resources: ["(GET|POST) /healthcheck"]
+ ## @param span_name_remappings - map of key/value pairs - optional
+ ## A map of Datadog span operation name keys and preferred name valuues to update those names to. This can be used to
+ ## automatically map Datadog Span Operation Names to an updated value, and is useful when a user wants to
+ ## shorten or modify span names to something more user friendly in the case of instrumentation libraries with
+ ## particularly verbose names.
+ #
+ span_name_remappings:
+ io.opentelemetry.javaagent.spring.client: spring.client
+ instrumentation:express.server: express
+ go.opentelemetry.io_contrib_instrumentation_net_http_otelhttp.client: http.client
+ ## @param span_name_as_resource_name - use OpenTelemetry semantic convention for span naming - optional
+ ## Option created to maintain similarity with the OpenTelemetry semantic conventions as discussed in the issue below.
+ ## https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions
+ ## https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1909
+ #
+ span_name_as_resource_name: true
+ ## @param compute_stats_by_span_kind - enables APM stats computation based on `span.kind` - optional
+ ## If set to true, enables an additional stats computation check on spans to see they have an eligible `span.kind` (server, consumer, client, producer).
+ ## If enabled, a span with an eligible `span.kind` will have stats computed. If disabled, only top-level and measured spans will have stats computed.
+ ## NOTE: For stats computed from OTel traces, only top-level spans are considered when this option is off.
+ #
+ compute_stats_by_span_kind: true
+ ## @param peer_tags_aggregation - enables aggregation of peer related tags in Datadog exporter - optional
+ ## If set to true, enables aggregation of peer related tags (e.g., `peer.service`, `db.instance`, etc.) in Datadog exporter.
+ ## If disabled, aggregated trace stats will not include these tags as dimensions on trace metrics.
+ ## For the best experience with peer tags, Datadog also recommends enabling `compute_stats_by_span_kind`.
+ ## If you are using an OTel tracer, it's best to have both enabled because client/producer spans with relevant peer tags
+ ## may not be marked by Datadog exporter as top-level spans.
+ ## If enabling both causes Datadog exporter to consume too many resources, try disabling `compute_stats_by_span_kind` first.
+ ## A high cardinality of peer tags or APM resources can also contribute to higher CPU and memory consumption.
+ ## You can check for the cardinality of these fields by making trace search queries in the Datadog UI.
+ ## The default list of peer tags can be found in https://github.com/DataDog/datadog-agent/blob/main/pkg/trace/stats/concentrator.go.
+ #
+ peer_tags_aggregation: true
+ ## @param trace_buffer - specifies the number of outgoing trace payloads to buffer before dropping - optional
+ ## If unset, the default value is 1000.
+ ## If you start seeing log messages like `Payload in channel full. Dropped 1 payload.` in the datadog exporter, consider
+ ## setting a higher `trace_buffer` to avoid traces being dropped.
+ #
+ trace_buffer: 500
+ ## @param peer_tags - [BETA] Optional list of supplementary peer tags that go beyond the defaults. The Datadog backend validates all tags
+ ## and will drop ones that are unapproved. The default set of peer tags can be found at
+ ## https://github.com/DataDog/datadog-agent/blob/505170c4ac8c3cbff1a61cf5f84b28d835c91058/pkg/trace/stats/concentrator.go#L55.
+ #
+ peer_tags: ["tag"]
+ ## @param resource_attributes_as_container_tags - enables the use of resource attributes as container tags - Optional
+ ## A list of resource attributes that should be used as container tags.
+ #
+ resource_attributes_as_container_tags: ["could.availability_zone", "could.region"]
+exporters:
+ debug:
+ verbosity: detailed
+ datadog:
+ api:
+ key: ${env:DD_API_KEY}
+ traces:
+ trace_buffer: 100
+service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [datadog/connector]
+ traces/2: # this pipeline uses sampling
+ receivers: [datadog/connector]
+ processors: [tail_sampling, batch]
+ exporters: [datadog, debug]
+ metrics:
+ receivers: [datadog/connector]
+ processors: [batch]
+ exporters: [datadog, debug]
diff --git a/connector/datadogconnector/factory.go b/connector/datadogconnector/factory.go
index 5d1d6673426c..bd7f2b7c04c2 100644
--- a/connector/datadogconnector/factory.go
+++ b/connector/datadogconnector/factory.go
@@ -8,11 +8,13 @@ package datadogconnector // import "github.com/open-telemetry/opentelemetry-coll
import (
"context"
+ "github.com/DataDog/datadog-agent/pkg/trace/timing"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/consumer"
"github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector/internal/metadata"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog"
)
// NewFactory creates a factory for tailtracer connector.
@@ -25,28 +27,27 @@ func NewFactory() connector.Factory {
connector.WithTracesToTraces(createTracesToTracesConnector, metadata.TracesToTracesStability))
}
-var _ component.Config = (*Config)(nil)
-
-type Config struct{}
-
func createDefaultConfig() component.Config {
- return &Config{}
+ return &Config{
+ Traces: TracesConfig{
+ IgnoreResources: []string{},
+ TraceBuffer: 1000,
+ },
+ }
}
// defines the consumer type of the connector
// we want to consume traces and export metrics therefore define nextConsumer as metrics, consumer is the next component in the pipeline
func createTracesToMetricsConnector(_ context.Context, params connector.CreateSettings, cfg component.Config, nextConsumer consumer.Metrics) (connector.Traces, error) {
- c, err := newConnector(params.Logger, cfg, nextConsumer, nil)
+ metricsClient := datadog.InitializeMetricClient(params.MeterProvider, datadog.ConnectorSourceTag)
+ timingReporter := timing.New(metricsClient)
+ c, err := newTraceToMetricConnector(params.TelemetrySettings, cfg, nextConsumer, metricsClient, timingReporter)
if err != nil {
return nil, err
}
return c, nil
}
-func createTracesToTracesConnector(_ context.Context, params connector.CreateSettings, cfg component.Config, nextConsumer consumer.Traces) (connector.Traces, error) {
- c, err := newConnector(params.Logger, cfg, nil, nextConsumer)
- if err != nil {
- return nil, err
- }
- return c, nil
+func createTracesToTracesConnector(_ context.Context, params connector.CreateSettings, _ component.Config, nextConsumer consumer.Traces) (connector.Traces, error) {
+ return newTraceToTraceConnector(params.Logger, nextConsumer), nil
}
diff --git a/connector/datadogconnector/factory_test.go b/connector/datadogconnector/factory_test.go
new file mode 100644
index 000000000000..8dc505d731bd
--- /dev/null
+++ b/connector/datadogconnector/factory_test.go
@@ -0,0 +1,27 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package datadogconnector
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/component/componenttest"
+)
+
+func TestCreateDefaultConfig(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ assert.Equal(t,
+ &Config{
+ Traces: TracesConfig{
+ IgnoreResources: []string{},
+ TraceBuffer: 1000,
+ },
+ },
+ cfg, "failed to create default config")
+
+ assert.NoError(t, componenttest.CheckConfigStruct(cfg))
+}
diff --git a/connector/datadogconnector/generated_component_test.go b/connector/datadogconnector/generated_component_test.go
new file mode 100644
index 000000000000..bf777c39bb36
--- /dev/null
+++ b/connector/datadogconnector/generated_component_test.go
@@ -0,0 +1,68 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package datadogconnector
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+
+ {
+ name: "traces_to_traces",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToTraces(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ firstConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ require.NoError(t, err)
+ require.NoError(t, firstConnector.Start(context.Background(), host))
+ require.NoError(t, firstConnector.Shutdown(context.Background()))
+ secondConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ require.NoError(t, secondConnector.Start(context.Background(), host))
+ require.NoError(t, secondConnector.Shutdown(context.Background()))
+ })
+ }
+}
diff --git a/connector/datadogconnector/go.mod b/connector/datadogconnector/go.mod
index 9c288c261fd0..8af2a7014262 100644
--- a/connector/datadogconnector/go.mod
+++ b/connector/datadogconnector/go.mod
@@ -1,94 +1,273 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector
-go 1.20
+go 1.21
require (
- github.com/DataDog/datadog-agent/pkg/proto v0.50.0-devel
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae
+ github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae
+ github.com/DataDog/datadog-go/v5 v5.5.0
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.98.0
+ github.com/patrickmn/go-cache v2.1.0+incompatible
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/exporter/debugexporter v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/processor v0.98.0
+ go.opentelemetry.io/collector/processor/batchprocessor v0.98.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/zap v1.27.0
+ google.golang.org/protobuf v1.33.0
)
require (
- github.com/DataDog/datadog-agent/pkg/obfuscate v0.49.0-rc.2 // indirect
- github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.49.0-rc.2 // indirect
- github.com/DataDog/datadog-agent/pkg/trace v0.50.0-devel.0.20231030140030-aa8a206e6ac7 // indirect
- github.com/DataDog/datadog-agent/pkg/util/cgroups v0.49.0-rc.2 // indirect
- github.com/DataDog/datadog-agent/pkg/util/log v0.49.0-rc.2 // indirect
- github.com/DataDog/datadog-agent/pkg/util/pointer v0.49.0-rc.2 // indirect
- github.com/DataDog/datadog-agent/pkg/util/scrubber v0.49.0-rc.2 // indirect
- github.com/DataDog/datadog-go/v5 v5.1.1 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
+ cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
+ github.com/DataDog/agent-payload/v5 v5.0.111 // indirect
+ github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-api-client-go/v2 v2.24.0 // indirect
+ github.com/DataDog/go-sqllexer v0.0.9 // indirect
github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 // indirect
- github.com/DataDog/sketches-go v1.4.3 // indirect
+ github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 // indirect
+ github.com/DataDog/sketches-go v1.4.4 // indirect
+ github.com/DataDog/zstd v1.5.2 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-20240415183253-230331014d2c // indirect
+ github.com/aws/aws-sdk-go v1.51.17 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff v2.2.1+incompatible // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
- github.com/containerd/cgroups/v3 v3.0.2 // indirect
+ github.com/containerd/cgroups/v3 v3.0.3 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
+ github.com/emicklei/go-restful/v3 v3.11.0 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
+ github.com/fsnotify/fsnotify v1.7.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-openapi/jsonpointer v0.20.2 // indirect
+ github.com/go-openapi/jsonreference v0.20.4 // indirect
+ github.com/go-openapi/swag v0.22.9 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/gobwas/glob v0.2.3 // indirect
+ github.com/goccy/go-json v0.10.2 // indirect
github.com/godbus/dbus/v5 v5.0.6 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
+ github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/gnostic-models v0.6.8 // indirect
+ github.com/google/gofuzz v1.2.0 // indirect
+ github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
+ github.com/iancoleman/strcase v0.3.0 // indirect
+ github.com/imdario/mergo v0.3.16 // indirect
+ github.com/inconshreveable/mousetrap v1.1.0 // indirect
+ 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/karrick/godirwalk v1.17.0 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
+ github.com/mailru/easyjson v0.7.7 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
+ github.com/mostynb/go-grpc-compression v1.2.2 // indirect
+ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0 // indirect
github.com/opencontainers/runtime-spec v1.1.0-rc.3 // indirect
+ github.com/openshift/api v3.9.0+incompatible // indirect
+ github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 // indirect
github.com/outcaste-io/ristretto v0.2.1 // indirect
- github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
github.com/philhofer/fwd v1.1.2 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.52.2 // indirect
+ github.com/prometheus/procfs v0.13.0 // indirect
+ github.com/rs/cors v1.10.1 // indirect
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
+ github.com/spf13/cobra v1.8.0 // indirect
+ github.com/spf13/pflag v1.0.5 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
github.com/tinylib/msgp v1.1.9 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/confmap 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/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.opencensus.io v0.24.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confighttp v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- golang.org/x/tools v0.15.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.19.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // indirect
+ gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
+ gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 // indirect
+ k8s.io/api v0.29.3 // indirect
+ k8s.io/apimachinery v0.29.3 // indirect
+ k8s.io/client-go v0.29.3 // indirect
+ k8s.io/klog/v2 v2.120.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+ k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
+ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
+ sigs.k8s.io/yaml v1.3.0 // indirect
)
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog => ../../internal/datadog
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor => ../../processor/tailsamplingprocessor
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders => ../../internal/metadataproviders
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig => ../../internal/k8sconfig
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker => ../../internal/docker
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8stest => ../../internal/k8stest
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry => ../../pkg/resourcetotelemetry
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter => ../../internal/filter
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver => ../../receiver/prometheusreceiver
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver => ../../receiver/hostmetricsreceiver
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter => ../../exporter/prometheusremotewriteexporter
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver => ../../receiver/filelogreceiver
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver => ../../receiver/dockerstatsreceiver
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil => ../../pkg/pdatautil
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest => ../../pkg/pdatatest
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../pkg/golden
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza => ../../pkg/stanza
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor => ../../processor/resourcedetectionprocessor
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl => ../../pkg/ottl
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal => ../../internal/coreinternal
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter => ../../exporter/datadogexporter
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus => ../../pkg/translator/prometheus
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite => ../../pkg/translator/prometheusremotewrite
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor => ../../processor/probabilisticsamplerprocessor
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil => ../../internal/aws/ecsutil
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor => ../../processor/k8sattributesprocessor
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
+
+replace github.com/openshift/api v3.9.0+incompatible => github.com/openshift/api v0.0.0-20180801171038-322a19404e37
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor => ../../processor/transformprocessor
diff --git a/connector/datadogconnector/go.sum b/connector/datadogconnector/go.sum
index 992b7955e5c3..b83849dff1e1 100644
--- a/connector/datadogconnector/go.sum
+++ b/connector/datadogconnector/go.sum
@@ -1,118 +1,501 @@
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.49.0-rc.2 h1:Y56sdsJotnJmxTzyHvADM2/0VpWzonQrSAeIjHCqk+s=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.49.0-rc.2/go.mod h1:HzySONXnAgSmIQfL6gOv9hWprKJkx8CicuXuUbmgWfo=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-devel h1:lGJKaJlKDbycF6jItLw8ONN8GX3dkN6S+95AvDfGF+s=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-devel/go.mod h1:A4qG1PwNPYcM391xyksJ47ZZjknSAQVvNdXAXsrR+N0=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.49.0-rc.2 h1:MXrLVVauNLDQnJ0TTY35L1rtKv7YnNU3zl8wtE5sI9g=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.49.0-rc.2/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-devel.0.20231030140030-aa8a206e6ac7 h1:ciOBHpTSHrFy/xn/+ana53F3cvPdhR3JGuoHeGa6r+4=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-devel.0.20231030140030-aa8a206e6ac7/go.mod h1:x6SswkmUaSmjAhSPUeVixs/Czr0w9Y5324Anoa6V+xE=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.49.0-rc.2 h1:X3nPQuiTkBVWaBGLb9oEycHhSzMJsgRcb3VNoxlGyYM=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.49.0-rc.2/go.mod h1:hVKZ+BweMQiL/dOCPvSPH/66vDSd3A3IeWQPuExkZw0=
-github.com/DataDog/datadog-agent/pkg/util/log v0.49.0-rc.2 h1:64AGy6AuNW/7uW+ix55S1iFqadpzLDHYk5LtbHCeSJc=
-github.com/DataDog/datadog-agent/pkg/util/log v0.49.0-rc.2/go.mod h1:RvGVny6LcLD0F9/N5OnxPoXKE8GwFtAKCD/viDv0Jw8=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.49.0-rc.2 h1:Z4PwDkI/ML5spAbG1aXbPkWiJ4T4XD2pQqKgfSy/rb8=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.49.0-rc.2/go.mod h1:eTXti9mx7qhkoi+Qg3mMmvVY5McghUUgsf4Hrk9zY8k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.49.0-rc.2 h1:SQ6pGb8ppcTnCKoTuaCfZpAhMlTWhEqdIQiVL1Jgpnk=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.49.0-rc.2/go.mod h1:EOGgNrSPskIxY3+KgCl+yEggMjrGqrA2oL5va+/p2jM=
-github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5TltWcLMU=
-github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E=
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
+cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
+cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
+cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
+cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
+cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
+cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
+cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
+cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
+cloud.google.com/go/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/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
+cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
+cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
+cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
+cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
+cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
+cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
+cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
+cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
+cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
+cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
+dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk=
+github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
+github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
+github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
+github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
+github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
+github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
+github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g=
+github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
+github.com/DataDog/agent-payload/v5 v5.0.111 h1:mM+4OBkXF9tjKV0VjwnNO5As9aKcNAEsagvKDSBaTyc=
+github.com/DataDog/agent-payload/v5 v5.0.111/go.mod h1:COngtbYYCncpIPiE5D93QlXDH/3VAKk10jDNwGHcMRE=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae h1:aVo1Uh2WQ8TvgbjqlbDvfP5AcUtnqXUUrc9pVP8MvKc=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:AVPQWekk3h9AOC7+plBlNB68Sy6UIGFoMMVUDeSoNoI=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae h1:b6lU79trCyadhkxhb51jXiqmZaHs1Z0fwWlWKFVCqJ4=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:s6zD4ZvPBta68SBCsCnnbn3VJzoQk5wNd0VJOpB84Ug=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae h1:/vfuF60+5qeGM62IDG1F6Asfa1VGAohiQVivRo9TWoo=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:JhAilx32dkIgoDkFXquCTfaWDsAOfe+vfBaxbiZoPI0=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae h1:B1E9jVLpw+Hrcv9ggzCridX3YMeUmZBE3zHghdwfTSc=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:1FTu8gSg8Pd8DVgRfxlcPN4F+d8K7A3lbMCT84FX44Y=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae h1:GL9JPEUyKDH2brURt09llrqWBmExCuqbHeWucezZ6sY=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:OnkC+HYj+NU9dmowWVtFpmnA4wVVibejbzID7TNm7jA=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae h1:sUEteYos3JjJJB1+A9inYJ3uzM18t9cygjSs0cik8x4=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:z4lpju3fhDa8JcbXxU0Bc6A6ci8xoQMuxDXbBdf4gHw=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae h1:qveAzof7ZZXvm93FL7h5mRM8B4q9w14g2fx6wcZt88k=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:HgJEYNmnFTKIuBhWxYe1coqmzoJXMxQTfK+4wIG5G1Q=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae h1:YZz6I8ym9P4MLytAdAJlafF3tgItgAGZrDqe4otbVUk=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:EVETfdJCkqy0YEvSpQd9LZdcYQ7vrUomCm+bQ6h3lc4=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0 h1:7G+eyezFM8gHq5dOHcrQcGVxrXnwPqX2yYHxsLiq3iM=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0/go.mod h1:QKOu6vscsh87fMY1lHfLEmNSunyXImj8BUaUWJXOehc=
+github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU=
+github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
+github.com/DataDog/go-sqllexer v0.0.9 h1:Cx2Cu1S0hfj4coCCA8hzjM9+UNFRkcu1avIV//RU5Qw=
+github.com/DataDog/go-sqllexer v0.0.9/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I=
github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0=
-github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.8.1 h1:0GyngySyxePf1RozAdm8p51uxT/kDsxqhzWPZGNrqVg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 h1:ly/egks++IqejMVPcp0OWV1fcL+Nsq4EHF48AAQPKu4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1/go.mod h1:8jOAAH5PrNN6zICpu65M7mNPAeOQsW5Wk/sq80txutA=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 h1:TbZDzUrW8iahevDY5Xw+j1EfrX8XZdeg/M6UYBl9mxg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1/go.mod h1:nVIKiAwP/Zd8IFxeHhEAiirJRH1kOOoZ315HQeSEkng=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 h1:4cyzwoXrnjElTIlsFbpyXQkAJs3+6ly9HExOu9lrup4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1/go.mod h1:3AEt8/uCtbpzjPOPPxIBDcR1qcUq2hBbrkrdE/qNfb0=
-github.com/DataDog/sketches-go v1.4.3 h1:ZB9nijteJRFUQixkQfatCqASartGNfiolIlMiEv3u/w=
-github.com/DataDog/sketches-go v1.4.3/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee h1:tXibLZk3G6HncIFJKaNItsdzcrk4YqILNDZlXPTNt4k=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee/go.mod h1:nTot/Iy0kW16bXgXr6blEc8gFeAS7vTqYlhAxh+dbc0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 h1:PTIZJAsfnr2XLB3V3duL+mSbZvYV8G3XQ9e57KyOuOA=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4/go.mod h1:5yS6i90MEZS3NG+o7PrQQ8i7OaEMzwQvn4bCZ9h9Rao=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4 h1:B2R7Wh791uphpltmorbvvdKk0rJOhoExwM4NnE7hXTg=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4/go.mod h1:Tk2wwdBgWeSvDPtrGGyym8CdVWSuphiToGc/tRvFoNQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 h1:10TPqpTlIkmDPFWVIEZ4ZX3rWrCrx3rEoeoAooZr6LM=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 h1:dU9oPMbAr/wYMNdzhu0pxIhAJOn1Btj1T3ZSyY6RvY0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4/go.mod h1:ud/Xr5TWUopcaGHdkh9RN8lhnCAFa95X16Rb5mrkE18=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 h1:ZuYc5Ql/GSyAEMgpKkbQiHOtIHkEpYujITW1wIVFgLE=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4/go.mod h1:YSntkplFoUM1mepnPeJFsoblqD0Wdi+Avg1/d1upgZQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 h1:t/Zh8ztLDBOMRMiuVNFthWMMG5F4POgc5M6+Y3DTX9g=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4/go.mod h1:JfdBBDreQfbIN5FYrAtZV3VmQMXnf9o4tMbaMxWqe40=
+github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8=
+github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
+github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
+github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 h1:PWcDbDjrcT/ZHLn4Bc/FuglaZZVPP8bWO/YRmJBbe38=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0/go.mod h1:XEK/YHYsi+Wk2Bk1+zi/he+gjRfDWtoIZEZwuwcYjhk=
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
+github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
+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/Showmax/go-fqdn v1.0.0 h1:0rG5IbmVliNT5O19Mfuvna9LL7zlHyRfsSvBPZmF9tM=
+github.com/Showmax/go-fqdn v1.0.0/go.mod h1:SfrFBzmDCtCGrnHhoDjuvFnKsWjEQX/Q9ARZvOrJAko=
+github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
+github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-20240415183253-230331014d2c h1:K03a1ym9+/iY//g1TuNWPn6Udc5W7UzwLXtSTAAkM4M=
+github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-20240415183253-230331014d2c/go.mod h1:t/hYoRTnlPuRjh8y0BwVGgNvNIXpU2QJME5YVppUUHQ=
+github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
+github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
+github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
+github.com/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
+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/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
+github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
+github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
+github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
+github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
+github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
+github.com/cihub/seelog v0.0.0-20151216151435-d2c6e5aa9fbf/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1c8PVE1PubbNx3mjUr09OqWGCs=
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
-github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0=
-github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
+github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
+github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
+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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
+github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
+github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU=
+github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
+github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
+github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
+github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+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.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
+github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
+github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
+github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/expr-lang/expr v1.16.3 h1:NLldf786GffptcXNxxJx5dQ+FzeWDKChBDqOOwyK8to=
+github.com/expr-lang/expr v1.16.3/go.mod h1:uCkhfG+x7fcZ5A5sXHKuQ07jGZRl6J0FCAaf2k4PtVQ=
+github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
+github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
+github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
+github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
+github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
+github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
+github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
+github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
+github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
+github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
+github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
+github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
+github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
+github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
+github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
+github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
+github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
+github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
+github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
+github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
+github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
+github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
+github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
+github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
+github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
+github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
+github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.6 h1:mkgN1ofwASrYnJ5W6U/BxG15eXXXjirgZc7CLqkcaro=
github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
+github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
+github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
+github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
+github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
+github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
+github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
+github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
+github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
+github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
+github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
+github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.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/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
+github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
+github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-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/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
+github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
+github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
+github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
+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.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
+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/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
+github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
+github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk=
+github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
+github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
+github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A=
+github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4=
+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.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
+github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
+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.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
+github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
+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-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA=
+github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
+github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
+github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
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/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0=
+github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
+github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA=
+github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
+github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
+github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
+github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
+github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
+github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 h1:2r2WiFeAwiJ/uyx1qIKnV1L4C9w/2V8ehlbJY4gjFaM=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4/go.mod h1:1yEQhaLb/cETXCqQmdh7lDjupNAReO7c83AHyK2dJ48=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
+github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
+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/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=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
+github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI=
github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
+github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
+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.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
+github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 h1:bCiVCRCs1Heq84lurVinUPy19keqGEe4jh5vtK37jcg=
+github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg=
+github.com/leoluk/perflib_exporter v0.2.1 h1:/3/ut1k/jFt5p4ypjLZKDHDqlXAK6ERZPVWtwdI389I=
+github.com/leoluk/perflib_exporter v0.2.1/go.mod h1:MinSWm88jguXFFrGsP56PtleUb4Qtm4tNRH/wXNXRTI=
github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8LbfQI7cA4=
+github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs=
+github.com/linode/linodego v1.30.0 h1:6HJli+LX7NGu+Sne2G+ux790EkVOWOV/SR4mK3jcs6k=
+github.com/linode/linodego v1.30.0/go.mod h1:/46h/XpmWi//oSA92GX2p3FIxb8HbX7grslPPQalR2o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
+github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
+github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
+github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
+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.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
+github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI=
+github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w=
+github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
+github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
+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/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
+github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
+github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
+github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
+github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
+github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/runtime-spec v1.1.0-rc.3 h1:l04uafi6kxByhbxev7OWiuUv0LZxEsYUfDWZ6bztAuU=
github.com/opencontainers/runtime-spec v1.1.0-rc.3/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
+github.com/openshift/api v0.0.0-20180801171038-322a19404e37 h1:05irGU4HK4IauGGDbsk+ZHrm1wOzMLYjMlfaiqMrBYc=
+github.com/openshift/api v0.0.0-20180801171038-322a19404e37/go.mod h1:dh9o4Fs58gpFXGSYfnVxGR9PnV53I8TW84pQaJDdGiY=
+github.com/openshift/api v0.0.0-20210521075222-e273a339932a/go.mod h1:izBmoXbUu3z5kUa4FjZhvekTsyzIWiOoaIgJiZBBMQs=
+github.com/openshift/build-machinery-go v0.0.0-20210423112049-9415d7ebd33e/go.mod h1:b1BuldmJlbA/xYtdZvKi+7j5YGB44qJUJDZ9zwiNCfE=
+github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 h1:ZHRIMCFIJN1p9LsJt4HQ+akDrys4PrYnXzOWI5LK03I=
+github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142/go.mod h1:fjS8r9mqDVsPb5td3NehsNOAWa4uiFkYEfVZioQ2gH0=
github.com/outcaste-io/ristretto v0.2.1 h1:KCItuNIGJZcursqHr3ghO7fc5ddZLEHspL9UR0cQM64=
github.com/outcaste-io/ristretto v0.2.1/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac=
+github.com/ovh/go-ovh v1.4.3 h1:Gs3V823zwTFpzgGLZNI6ILS4rmxZgJwJCz54Er9LwD0=
+github.com/ovh/go-ovh v1.4.3/go.mod h1:AkPXVtgwB6xlKblMjRKJJmjRp+ogrE7fz2lVgcQY8SY=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
+github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -121,145 +504,548 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkBTKvR5gQLgA3e0hqjkY9u1wm+iOL45VN/qI=
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
+github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
+github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
+github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o=
+github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
+github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
+github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
+github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
+github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
+github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg=
github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI=
-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/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
+github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
+github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
+github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
+github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
+github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
+github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U=
+github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc=
+github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
+github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
+github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
github.com/yuin/goldmark v1.1.27/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/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-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/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/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/consumer v0.89.0 h1:MteKhkudX2L1ylbtdpSazO8SwyHSxl6fUEElc0rRLDQ=
-go.opentelemetry.io/collector/consumer v0.89.0/go.mod h1:aOaoi6R0qVvfHu0pEPCzSE74gIPNJoCQM8Ml4Bc9NHE=
-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/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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes=
+github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss=
+go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
+go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
+go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
+go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
+go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0 h1:zAFCXYzpxDh64BIVujqntlN5RE4jDahbPfJBy/Wq7D0=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0/go.mod h1:S15ELDQFoP5da3NHzXJR2I8FGUnM2C1Hp6e/OhaCtw0=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 h1:iM4fMLGig3GKmz5XNtOPKDsnCnvbi0+UHYaWsx/aSRc=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0/go.mod h1:ROnuUkZJgpKEIDf3AIVjgRGNI7KPqCKPXsw8whL6Hzs=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0 h1:1jjiC3POfIluGLVM+6y8nolKEI95/vlHAvDmIOatags=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0/go.mod h1:VQDDrhQbIoelGF+fKzy6vCQM3hWDCH2YFaZKqgTDmGk=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0 h1:j7lfLwc5o1dtXIPXU8LjmxadejmJVRHN57ZYGH33Wq4=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0/go.mod h1:uWDBDxaWuzF1U5S2UIhstO0+Q8aUiwiUu8uO1IYN2XQ=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
+golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
+golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
+golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
+golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
+golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
+golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
+golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
+golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
+golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
+golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
+golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
+golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
+golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
+golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/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.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-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-20210330210617-4fbd30eecc44/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-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.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.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
+golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.4/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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
+golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
-golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
+google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
+google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
+google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
+google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
+google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
+google.golang.org/api v0.168.0 h1:MBRe+Ki4mMN93jhDDbpuRLjRddooArz4FeSObvUMmjY=
+google.golang.org/api v0.168.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
+google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
+google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
+google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
+google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
+google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
+google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
+google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
+google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
+google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
+google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
+google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
+google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
+google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
+google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
+google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
+google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+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/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=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/apimachinery v0.25.5 h1:SQomYHvv+aO43qdu3QKRf9YuI0oI8w3RrOQ1qPbAUGY=
+gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 h1:umQdVO0Ytx+kYadhuJNjFtDgIsIEBnKrOTvNuu8ClKI=
+gopkg.in/zorkian/go-datadog-api.v2 v2.30.0/go.mod h1:kx0CSMRpzEZfx/nFH62GLU4stZjparh/BRpM89t4XCQ=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
+honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
+k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
+k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
+k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
+k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
+k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
+k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
+k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
+k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
+k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
+k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
+rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
+rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
+sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
+sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
+sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
+sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
+sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/connector/datadogconnector/internal/metadata/generated_status.go b/connector/datadogconnector/internal/metadata/generated_status.go
index 1e601630c741..2c540857fc70 100644
--- a/connector/datadogconnector/internal/metadata/generated_status.go
+++ b/connector/datadogconnector/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("datadog")
)
const (
- Type = "datadog"
TracesToMetricsStability = component.StabilityLevelBeta
TracesToTracesStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/datadog")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/datadog")
+}
diff --git a/connector/datadogconnector/metadata.yaml b/connector/datadogconnector/metadata.yaml
index f6b1f32221ef..7feb71b52186 100644
--- a/connector/datadogconnector/metadata.yaml
+++ b/connector/datadogconnector/metadata.yaml
@@ -1,4 +1,5 @@
type: datadog
+scope_name: otelcol/datadog
status:
class: connector
@@ -6,4 +7,7 @@ status:
beta: [traces_to_metrics, traces_to_traces]
distributions: [contrib]
codeowners:
- active: [mx-psi, gbbr, dineshg13]
+ active: [mx-psi, dineshg13]
+ emeritus: [gbbr]
+
+tests:
diff --git a/connector/datadogconnector/traces_connector.go b/connector/datadogconnector/traces_connector.go
new file mode 100644
index 000000000000..34e57eb65d20
--- /dev/null
+++ b/connector/datadogconnector/traces_connector.go
@@ -0,0 +1,47 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package datadogconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector"
+
+import (
+ "context"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "go.uber.org/zap"
+)
+
+type traceToTraceConnector struct {
+ logger *zap.Logger
+ tracesConsumer consumer.Traces // the next component in the pipeline to ingest traces after connector
+}
+
+func newTraceToTraceConnector(logger *zap.Logger, nextConsumer consumer.Traces) *traceToTraceConnector {
+ logger.Info("Building datadog connector for trace to trace")
+ return &traceToTraceConnector{
+ logger: logger,
+ tracesConsumer: nextConsumer,
+ }
+}
+
+// Start implements the component interface.
+func (c *traceToTraceConnector) Start(_ context.Context, _ component.Host) error {
+ return nil
+}
+
+// Shutdown implements the component interface.
+func (c *traceToTraceConnector) Shutdown(_ context.Context) error {
+ return nil
+}
+
+// Capabilities implements the consumer interface.
+// tells use whether the component(connector) will mutate the data passed into it. if set to true the connector does modify the data
+func (c *traceToTraceConnector) Capabilities() consumer.Capabilities {
+ return consumer.Capabilities{MutatesData: false}
+}
+
+// ConsumeTraces implements the consumer interface.
+func (c *traceToTraceConnector) ConsumeTraces(ctx context.Context, traces ptrace.Traces) error {
+ return c.tracesConsumer.ConsumeTraces(ctx, traces)
+}
diff --git a/connector/exceptionsconnector/README.md b/connector/exceptionsconnector/README.md
index 1ebf392f922f..da6c0a21a6cb 100644
--- a/connector/exceptionsconnector/README.md
+++ b/connector/exceptionsconnector/README.md
@@ -5,17 +5,17 @@
| ------------- |-----------|
| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aconnector%2Fexceptions%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aconnector%2Fexceptions) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aconnector%2Fexceptions%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aconnector%2Fexceptions) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jpkrohling](https://www.github.com/jpkrohling) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jpkrohling](https://www.github.com/jpkrohling), [@marctc](https://www.github.com/marctc) |
-[development]: https://github.com/open-telemetry/opentelemetry-collector#development
+[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
## Supported Pipeline Types
| [Exporter Pipeline Type] | [Receiver Pipeline Type] | [Stability Level] |
| ------------------------ | ------------------------ | ----------------- |
-| traces | metrics | [development] |
-| traces | logs | [development] |
+| traces | metrics | [alpha] |
+| traces | logs | [alpha] |
[Exporter Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#exporter-pipeline-type
[Receiver Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#receiver-pipeline-type
@@ -37,7 +37,7 @@ With the provided default config, each **metric** and **log** will also have the
Each log will additionally have the following attributes:
- Exception stacktrace
-- HTTP attributes from spans starting with `http.`.
+- Span attributes. If you want to filter out some attributes (like only copying HTTP attributes starting with `http.`) use the [transform processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/transformprocessor/).
## Configurations
diff --git a/connector/exceptionsconnector/connector_logs.go b/connector/exceptionsconnector/connector_logs.go
index 30fc8499b064..91ead84eccce 100644
--- a/connector/exceptionsconnector/connector_logs.go
+++ b/connector/exceptionsconnector/connector_logs.go
@@ -5,7 +5,6 @@ package exceptionsconnector // import "github.com/open-telemetry/opentelemetry-c
import (
"context"
- "strings"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
@@ -103,6 +102,9 @@ func (c *logsConnector) attrToLogRecord(sl plog.ScopeLogs, serviceName string, s
eventAttrs := event.Attributes()
spanAttrs := span.Attributes()
+ // Copy span attributes to the log record.
+ spanAttrs.CopyTo(logRecord.Attributes())
+
// Add common attributes to the log record.
logRecord.Attributes().PutStr(spanKindKey, traceutil.SpanKindStr(span.Kind()))
logRecord.Attributes().PutStr(statusCodeKey, traceutil.StatusCodeStr(span.Status().Code()))
@@ -117,26 +119,9 @@ func (c *logsConnector) attrToLogRecord(sl plog.ScopeLogs, serviceName string, s
// Add stacktrace to the log record.
logRecord.Attributes().PutStr(exceptionStacktraceKey, getValue(eventAttrs, exceptionStacktraceKey))
-
- // Add HTTP context to the log record.
- for k, v := range extractHTTP(spanAttrs) {
- logRecord.Attributes().PutStr(k, v)
- }
return logRecord
}
-// extractHTTP extracts the HTTP context from span attributes.
-func extractHTTP(attr pcommon.Map) map[string]string {
- http := make(map[string]string)
- attr.Range(func(k string, v pcommon.Value) bool {
- if strings.HasPrefix(k, "http.") {
- http[k] = v.Str()
- }
- return true
- })
- return http
-}
-
// getValue returns the value of the attribute with the given key.
func getValue(attr pcommon.Map, key string) string {
if attrVal, ok := attr.Get(key); ok {
diff --git a/connector/exceptionsconnector/factory_test.go b/connector/exceptionsconnector/factory_test.go
index 37878cf024c2..642bc93d19c9 100644
--- a/connector/exceptionsconnector/factory_test.go
+++ b/connector/exceptionsconnector/factory_test.go
@@ -48,7 +48,7 @@ func TestNewConnector(t *testing.T) {
traceMetricsConnector, err := factory.CreateTracesToMetrics(context.Background(), creationParams, cfg, consumertest.NewNop())
smc := traceMetricsConnector.(*metricsConnector)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, smc)
assert.Equal(t, tc.wantDimensions, smc.dimensions)
@@ -56,7 +56,7 @@ func TestNewConnector(t *testing.T) {
traceLogsConnector, err := factory.CreateTracesToLogs(context.Background(), creationParams, cfg, consumertest.NewNop())
slc := traceLogsConnector.(*logsConnector)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, slc)
assert.Equal(t, tc.wantDimensions, smc.dimensions)
})
diff --git a/connector/exceptionsconnector/generated_component_test.go b/connector/exceptionsconnector/generated_component_test.go
new file mode 100644
index 000000000000..5e7ce302158c
--- /dev/null
+++ b/connector/exceptionsconnector/generated_component_test.go
@@ -0,0 +1,68 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package exceptionsconnector
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces_to_logs",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToLogs(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+
+ {
+ name: "traces_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ firstConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ require.NoError(t, err)
+ require.NoError(t, firstConnector.Start(context.Background(), host))
+ require.NoError(t, firstConnector.Shutdown(context.Background()))
+ secondConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ require.NoError(t, secondConnector.Start(context.Background(), host))
+ require.NoError(t, secondConnector.Shutdown(context.Background()))
+ })
+ }
+}
diff --git a/connector/exceptionsconnector/go.mod b/connector/exceptionsconnector/go.mod
index 01c2bc217b7e..1c1f8c3dd271 100644
--- a/connector/exceptionsconnector/go.mod
+++ b/connector/exceptionsconnector/go.mod
@@ -1,51 +1,60 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/connector/exceptionsconnector
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
- google.golang.org/grpc v1.59.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+ google.golang.org/grpc v1.63.2
)
require (
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/connector/exceptionsconnector/go.sum b/connector/exceptionsconnector/go.sum
index e2ea203d6593..5002883913f9 100644
--- a/connector/exceptionsconnector/go.sum
+++ b/connector/exceptionsconnector/go.sum
@@ -1,20 +1,24 @@
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -23,14 +27,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -40,42 +44,58 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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/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/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/consumer v0.89.0 h1:MteKhkudX2L1ylbtdpSazO8SwyHSxl6fUEElc0rRLDQ=
-go.opentelemetry.io/collector/consumer v0.89.0/go.mod h1:aOaoi6R0qVvfHu0pEPCzSE74gIPNJoCQM8Ml4Bc9NHE=
-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/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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -85,16 +105,16 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -107,15 +127,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-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 v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/connector/exceptionsconnector/internal/metadata/generated_status.go b/connector/exceptionsconnector/internal/metadata/generated_status.go
index 70e4fef83c5c..8868a61f603d 100644
--- a/connector/exceptionsconnector/internal/metadata/generated_status.go
+++ b/connector/exceptionsconnector/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("exceptions")
)
const (
- Type = "exceptions"
- TracesToMetricsStability = component.StabilityLevelDevelopment
- TracesToLogsStability = component.StabilityLevelDevelopment
+ TracesToMetricsStability = component.StabilityLevelAlpha
+ TracesToLogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/exceptions")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/exceptions")
+}
diff --git a/connector/exceptionsconnector/metadata.yaml b/connector/exceptionsconnector/metadata.yaml
index 5bf4696c041c..9b1d65b140e7 100644
--- a/connector/exceptionsconnector/metadata.yaml
+++ b/connector/exceptionsconnector/metadata.yaml
@@ -1,9 +1,13 @@
type: exceptions
+scope_name: otelcol/exceptions
status:
class: connector
stability:
- development: [traces_to_metrics, traces_to_logs]
+ alpha: [traces_to_metrics, traces_to_logs]
distributions: [contrib]
codeowners:
- active: [jpkrohling]
+ active: [jpkrohling, marctc]
+
+tests:
+ config:
diff --git a/connector/exceptionsconnector/package_test.go b/connector/exceptionsconnector/package_test.go
new file mode 100644
index 000000000000..08df820c3e17
--- /dev/null
+++ b/connector/exceptionsconnector/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package exceptionsconnector
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/exceptionsconnector/testdata/logs.yml b/connector/exceptionsconnector/testdata/logs.yml
index b2918264516e..e79d4d969fdb 100644
--- a/connector/exceptionsconnector/testdata/logs.yml
+++ b/connector/exceptionsconnector/testdata/logs.yml
@@ -3,6 +3,26 @@ resourceLogs:
scopeLogs:
- logRecords:
- attributes:
+ - key: stringAttrName
+ value:
+ stringValue: stringAttrValue
+ - key: intAttrName
+ value:
+ intValue: "99"
+ - key: doubleAttrName
+ value:
+ doubleValue: 99.99
+ - key: boolAttrName
+ value:
+ boolValue: true
+ - key: nullAttrName
+ value: {}
+ - key: mapAttrName
+ value:
+ kvlistValue: {}
+ - key: arrayAttrName
+ value:
+ arrayValue: {}
- key: span.kind
value:
stringValue: SPAN_KIND_SERVER
@@ -27,6 +47,26 @@ resourceLogs:
spanId: 2a00000000000000
traceId: 2a000000000000000000000000000000
- attributes:
+ - key: stringAttrName
+ value:
+ stringValue: stringAttrValue
+ - key: intAttrName
+ value:
+ intValue: "99"
+ - key: doubleAttrName
+ value:
+ doubleValue: 99.99
+ - key: boolAttrName
+ value:
+ boolValue: true
+ - key: nullAttrName
+ value: {}
+ - key: mapAttrName
+ value:
+ kvlistValue: {}
+ - key: arrayAttrName
+ value:
+ arrayValue: {}
- key: span.kind
value:
stringValue: SPAN_KIND_CLIENT
@@ -55,6 +95,26 @@ resourceLogs:
scopeLogs:
- logRecords:
- attributes:
+ - key: stringAttrName
+ value:
+ stringValue: stringAttrValue
+ - key: intAttrName
+ value:
+ intValue: "99"
+ - key: doubleAttrName
+ value:
+ doubleValue: 99.99
+ - key: boolAttrName
+ value:
+ boolValue: true
+ - key: nullAttrName
+ value: {}
+ - key: mapAttrName
+ value:
+ kvlistValue: {}
+ - key: arrayAttrName
+ value:
+ arrayValue: {}
- key: span.kind
value:
stringValue: SPAN_KIND_SERVER
diff --git a/cmd/mdatagen/Makefile b/connector/failoverconnector/Makefile
similarity index 100%
rename from cmd/mdatagen/Makefile
rename to connector/failoverconnector/Makefile
diff --git a/connector/failoverconnector/README.md b/connector/failoverconnector/README.md
new file mode 100644
index 000000000000..9694a6394f3b
--- /dev/null
+++ b/connector/failoverconnector/README.md
@@ -0,0 +1,98 @@
+# Failover Connector
+
+
+| Status | |
+| ------------- |-----------|
+| Distributions | [] |
+| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aconnector%2Ffailover%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aconnector%2Ffailover) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aconnector%2Ffailover%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aconnector%2Ffailover) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@akats7](https://www.github.com/akats7), [@djaglowski](https://www.github.com/djaglowski), [@fatsheep9146](https://www.github.com/fatsheep9146) |
+
+[development]: https://github.com/open-telemetry/opentelemetry-collector#development
+
+## Supported Pipeline Types
+
+| [Exporter Pipeline Type] | [Receiver Pipeline Type] | [Stability Level] |
+| ------------------------ | ------------------------ | ----------------- |
+| metrics | metrics | [development] |
+| traces | traces | [development] |
+| logs | logs | [development] |
+
+[Exporter Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#exporter-pipeline-type
+[Receiver Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#receiver-pipeline-type
+[Stability Level]: https://github.com/open-telemetry/opentelemetry-collector#stability-levels
+
+
+Allows for health based routing between trace, metric, and log pipelines depending on the health of target downstream exporters.
+
+## Configuration
+
+If you are not already familiar with connectors, you may find it helpful to first visit the [Connectors README].
+
+The following settings are available:
+
+- `priority_levels (required)`: list of pipeline level priorities in a 1 - n configuration, multiple pipelines can sit at a single priority level.
+- `retry_interval (optional)`: the frequency at which the pipeline levels will attempt to reestablish connection with all higher priority levels. Default value is 10 minutes. (See Example below for further explanation)
+- `retry_gap (optional)`: the amount of time between trying two separate priority levels in a single retry_interval timeframe. Default value is 30 seconds. (See Example below for further explanation)
+- `max_retries (optional)`: the maximum retries per level. Default value is 10. Set to 0 to allow unlimited retries.
+
+The connector intakes a list of `priority_levels` each of which can contain multiple pipelines.
+If any pipeline at a stable level fails, the level is considered unhealthy and the connector will move down one priority level and route all data to the new level (assuming it is stable).
+
+The connector will periodically try to reestablish a stable connection with the higher priority levels. `retry_interval` will be the frequency at which the connector will try to iterate through all unhealthy higher priority levels while `retry_gap` is how long it will wait after a failed retry at one level before retrying the next level (if retry_gap is 2m, after trying to reestablish level 1, it will wait 2m before trying level 2) It will retry a maximum of one unhealthy level before returning to the current stable level.)
+There is a `max_retries` config param as well that will track how many retries have occurred at each level, and once the max is hit, it will no longer retry that priority level.
+
+#### Configuration Example:
+
+```yaml
+connectors:
+ failover:
+ priority_levels:
+ - [traces/first, traces/also_first]
+ - [traces/second]
+ - [traces/third]
+ retry_interval: 5m
+ retry_gap: 1m
+ max_retries: 10
+
+service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ exporters: [failover]
+ traces/first:
+ receivers: [failover]
+ exporters: [otlp/first]
+ traces/second:
+ receivers: [failover]
+ exporters: [otlp/second]
+ traces/third:
+ receivers: [failover]
+ exporters: [otlp/third]
+ traces/also_first:
+ receivers: [failover]
+ exporters: [otlp/fourth]
+```
+
+#### Example with Explanation:
+
+```yaml
+connectors:
+ failover:
+ priority_levels:
+ - [traces/first]
+ - [traces/second]
+ - [traces/third]
+ - [traces/fourth]
+ retry_interval: 5m
+ retry_gap: 1m
+ max_retries: 10
+```
+
+Assume the current stable level is level 4 (traces/fourth) on the priority_level list.
+At the start of the `retry_interval`, the connector will try to reestablish the pipeline on level 1 (trace/first). If it fails, the connector will return to level 4 (traces/fourth) and wait the 1m as the `retry_gap`, when that 1m passes it will now retry level 2 (traces/second) and if that fails will first return to level 4 before waiting another 1m until trying level 3.
+Once it tries level 3 and it fails, it will return to level 4 and wait the 10m retry_interval again before repeating the process. If a retry is successful then the retried level becomes the stable level, and the connector will continue to retry any higher priority levels that haven't exceeded the `max_retries`.
+
+[Connectors README]:https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md
+[Exporter Pipeline Type]:https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#exporter-pipeline-type
+[Receiver Pipeline Type]:https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#receiver-pipeline-type
+[contrib]:https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
diff --git a/connector/failoverconnector/config.go b/connector/failoverconnector/config.go
new file mode 100644
index 000000000000..3ea82c03fe36
--- /dev/null
+++ b/connector/failoverconnector/config.go
@@ -0,0 +1,48 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+
+import (
+ "errors"
+ "time"
+
+ "go.opentelemetry.io/collector/component"
+)
+
+var (
+ errNoPipelinePriority = errors.New("No pipelines are defined in the priority list")
+ errInvalidRetryIntervals = errors.New("Retry interval must be positive, and retry_interval must be greater than retry_gap times the length of the priority list")
+)
+
+type Config struct {
+ // PipelinePriority is the list of pipeline level priorities in a 1 - n configuration, multiple pipelines can
+ // sit at a single priority level and will be routed in a fanout. If any pipeline at a level fails, the
+ // level is considered unhealthy
+ PipelinePriority [][]component.ID `mapstructure:"priority_levels"`
+
+ // RetryInterval is the frequency at which the pipeline levels will attempt to recover by going over
+ // all levels below the current
+ RetryInterval time.Duration `mapstructure:"retry_interval"`
+
+ // RetryGap is how much time will pass between trying two separate priority levels in a single RetryInterval
+ // If the priority list has 3 levels, the RetryInterval is 5m, and the retryGap is 1m, within the 5m RetryInterval,
+ // the connector will only try one level every 1m, and will return to the stable level in the interim
+ RetryGap time.Duration `mapstructure:"retry_gap"`
+
+ // MaxRetry is the maximum retries per level, once this limit is hit for a level, even if the next pipeline level fails,
+ // it will not try to recover the level that exceeded the maximum retries
+ MaxRetries int `mapstructure:"max_retries"`
+}
+
+// Validate needs to ensure RetryInterval > # elements in PriorityList * RetryGap
+func (c *Config) Validate() error {
+ if len(c.PipelinePriority) == 0 {
+ return errNoPipelinePriority
+ }
+ retryTime := c.RetryGap * time.Duration(len(c.PipelinePriority))
+ if c.RetryGap <= 0 || c.RetryInterval <= 0 || c.RetryInterval <= retryTime {
+ return errInvalidRetryIntervals
+ }
+ return nil
+}
diff --git a/connector/failoverconnector/config_test.go b/connector/failoverconnector/config_test.go
new file mode 100644
index 000000000000..4f8a886ca0a3
--- /dev/null
+++ b/connector/failoverconnector/config_test.go
@@ -0,0 +1,115 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector
+
+import (
+ "path/filepath"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector/internal/metadata"
+)
+
+func TestLoadConfig(t *testing.T) {
+ testcases := []struct {
+ id component.ID
+ expected *Config
+ }{
+ {
+ id: component.NewIDWithName(metadata.Type, "default"),
+ expected: &Config{
+ PipelinePriority: [][]component.ID{
+ {
+ component.NewIDWithName(component.DataTypeTraces, ""),
+ },
+ },
+ RetryInterval: 10 * time.Minute,
+ RetryGap: 30 * time.Second,
+ MaxRetries: 10,
+ },
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "full"),
+ expected: &Config{
+ PipelinePriority: [][]component.ID{
+ {
+ component.NewIDWithName(component.DataTypeTraces, "first"),
+ component.NewIDWithName(component.DataTypeTraces, "also_first"),
+ },
+ {
+ component.NewIDWithName(component.DataTypeTraces, "second"),
+ },
+ {
+ component.NewIDWithName(component.DataTypeTraces, "third"),
+ },
+ {
+ component.NewIDWithName(component.DataTypeTraces, "fourth"),
+ },
+ },
+ RetryInterval: 5 * time.Minute,
+ RetryGap: time.Minute,
+ MaxRetries: 10,
+ },
+ },
+ }
+
+ for _, tc := range testcases {
+ t.Run(tc.id.String(), func(t *testing.T) {
+ cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
+ require.NoError(t, err)
+
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ sub, err := cm.Sub(tc.id.String())
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ assert.NoError(t, component.ValidateConfig(cfg))
+ assert.Equal(t, tc.expected, cfg)
+ })
+ }
+}
+
+func TestValidateConfig(t *testing.T) {
+ testcases := []struct {
+ name string
+ id component.ID
+ err error
+ }{
+ {
+ name: "no priority levels provided",
+ id: component.NewIDWithName(metadata.Type, ""),
+ err: errNoPipelinePriority,
+ },
+ {
+ name: "invalid ratio of retry_gap to retry_interval",
+ id: component.NewIDWithName(metadata.Type, "invalid"),
+ err: errInvalidRetryIntervals,
+ },
+ }
+
+ for _, tc := range testcases {
+ t.Run(tc.id.String(), func(t *testing.T) {
+ t.Run(tc.name, func(t *testing.T) {
+ cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
+ require.NoError(t, err)
+
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ sub, err := cm.Sub(tc.id.String())
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ assert.EqualError(t, component.ValidateConfig(cfg), tc.err.Error())
+ })
+ })
+ }
+}
diff --git a/connector/failoverconnector/doc.go b/connector/failoverconnector/doc.go
new file mode 100644
index 000000000000..1d7bd66015c5
--- /dev/null
+++ b/connector/failoverconnector/doc.go
@@ -0,0 +1,6 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+//go:generate mdatagen metadata.yaml
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
diff --git a/connector/failoverconnector/factory.go b/connector/failoverconnector/factory.go
new file mode 100644
index 000000000000..0ad9b4d7eecc
--- /dev/null
+++ b/connector/failoverconnector/factory.go
@@ -0,0 +1,60 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+
+import (
+ "context"
+ "time"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/consumer"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector/internal/metadata"
+)
+
+func NewFactory() connector.Factory {
+ return connector.NewFactory(
+ metadata.Type,
+ createDefaultConfig,
+ connector.WithTracesToTraces(createTracesToTraces, metadata.TracesToTracesStability),
+ connector.WithMetricsToMetrics(createMetricsToMetrics, metadata.MetricsToMetricsStability),
+ connector.WithLogsToLogs(createLogsToLogs, metadata.LogsToLogsStability),
+ )
+}
+
+func createDefaultConfig() component.Config {
+ return &Config{
+ RetryGap: 30 * time.Second,
+ RetryInterval: 10 * time.Minute,
+ MaxRetries: 10,
+ }
+}
+
+func createTracesToTraces(
+ _ context.Context,
+ set connector.CreateSettings,
+ cfg component.Config,
+ traces consumer.Traces,
+) (connector.Traces, error) {
+ return newTracesToTraces(set, cfg, traces)
+}
+
+func createMetricsToMetrics(
+ _ context.Context,
+ set connector.CreateSettings,
+ cfg component.Config,
+ metrics consumer.Metrics,
+) (connector.Metrics, error) {
+ return newMetricsToMetrics(set, cfg, metrics)
+}
+
+func createLogsToLogs(
+ _ context.Context,
+ set connector.CreateSettings,
+ cfg component.Config,
+ logs consumer.Logs,
+) (connector.Logs, error) {
+ return newLogsToLogs(set, cfg, logs)
+}
diff --git a/connector/failoverconnector/factory_test.go b/connector/failoverconnector/factory_test.go
new file mode 100644
index 000000000000..1990eee65329
--- /dev/null
+++ b/connector/failoverconnector/factory_test.go
@@ -0,0 +1,44 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestNewFactory(t *testing.T) {
+ traces0 := component.NewIDWithName(component.DataTypeTraces, "0")
+ traces1 := component.NewIDWithName(component.DataTypeTraces, "1")
+ traces2 := component.NewIDWithName(component.DataTypeTraces, "2")
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{traces0, traces1}, {traces2}},
+ RetryInterval: 5 * time.Minute,
+ RetryGap: 10 * time.Second,
+ MaxRetries: 5,
+ }
+
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ traces0: consumertest.NewNop(),
+ traces1: consumertest.NewNop(),
+ traces2: consumertest.NewNop(),
+ })
+
+ conn, err := NewFactory().CreateTracesToTraces(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Traces))
+ defer func() {
+ assert.NoError(t, conn.Shutdown(context.Background()))
+ }()
+
+ assert.NoError(t, err)
+ assert.NotNil(t, conn)
+}
diff --git a/connector/failoverconnector/failover.go b/connector/failoverconnector/failover.go
new file mode 100644
index 000000000000..f76341646d72
--- /dev/null
+++ b/connector/failoverconnector/failover.go
@@ -0,0 +1,88 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+
+import (
+ "errors"
+ "sync"
+
+ "go.opentelemetry.io/collector/component"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector/internal/state"
+)
+
+type consumerProvider[C any] func(...component.ID) (C, error)
+
+type failoverRouter[C any] struct {
+ consumerProvider consumerProvider[C]
+ cfg *Config
+ pS *state.PipelineSelector
+ wg *sync.WaitGroup
+ consumers []C
+
+ done chan struct{}
+}
+
+var (
+ errNoValidPipeline = errors.New("All provided pipelines return errors")
+ errConsumer = errors.New("Error registering consumer")
+)
+
+func newFailoverRouter[C any](provider consumerProvider[C], cfg *Config) *failoverRouter[C] {
+ var wg sync.WaitGroup
+ done := make(chan struct{})
+ pSConstants := state.PSConstants{
+ RetryInterval: cfg.RetryInterval,
+ RetryGap: cfg.RetryGap,
+ MaxRetries: cfg.MaxRetries,
+ }
+
+ selector := state.NewPipelineSelector(len(cfg.PipelinePriority), pSConstants)
+ selector.Start(done, &wg)
+ return &failoverRouter[C]{
+ consumerProvider: provider,
+ cfg: cfg,
+ pS: selector,
+ done: done,
+ wg: &wg,
+ }
+}
+
+func (f *failoverRouter[C]) getCurrentConsumer() (C, chan bool, bool) {
+ var nilConsumer C
+ pl, ch := f.pS.SelectedPipeline()
+ if pl >= len(f.cfg.PipelinePriority) {
+ return nilConsumer, nil, false
+ }
+ return f.consumers[pl], ch, true
+}
+
+func (f *failoverRouter[C]) registerConsumers() error {
+ consumers := make([]C, 0)
+ for _, pipelines := range f.cfg.PipelinePriority {
+ newConsumer, err := f.consumerProvider(pipelines...)
+ if err != nil {
+ return errConsumer
+ }
+ consumers = append(consumers, newConsumer)
+ }
+ f.consumers = consumers
+ return nil
+}
+
+func (f *failoverRouter[C]) Shutdown() {
+ f.pS.RS.InvokeCancel()
+
+ close(f.done)
+ f.wg.Wait()
+}
+
+// For Testing
+func (f *failoverRouter[C]) GetConsumerAtIndex(idx int) C {
+ return f.consumers[idx]
+}
+
+func (f *failoverRouter[C]) ModifyConsumerAtIndex(idx int, c C) {
+ f.consumers[idx] = c
+}
diff --git a/connector/failoverconnector/failover_test.go b/connector/failoverconnector/failover_test.go
new file mode 100644
index 000000000000..9afa2b2b865c
--- /dev/null
+++ b/connector/failoverconnector/failover_test.go
@@ -0,0 +1,205 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestFailoverRecovery(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird, sinkFourth consumertest.TracesSink
+ tracesFirst := component.NewIDWithName(component.DataTypeTraces, "traces/first")
+ tracesSecond := component.NewIDWithName(component.DataTypeTraces, "traces/second")
+ tracesThird := component.NewIDWithName(component.DataTypeTraces, "traces/third")
+ tracesFourth := component.NewIDWithName(component.DataTypeTraces, "traces/fourth")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{tracesFirst}, {tracesSecond}, {tracesThird}, {tracesFourth}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesFirst: &sinkFirst,
+ tracesSecond: &sinkSecond,
+ tracesThird: &sinkThird,
+ tracesFourth: &sinkFourth,
+ })
+
+ conn, err := NewFactory().CreateTracesToTraces(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Traces))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*tracesFailover)
+
+ tr := sampleTrace()
+
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ t.Run("single failover recovery to primary consumer: level 2 -> 1", func(t *testing.T) {
+ defer func() {
+ resetConsumers(failoverConnector, &sinkFirst, &sinkSecond, &sinkThird, &sinkFourth)
+ }()
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errTracesConsumer))
+
+ require.NoError(t, conn.ConsumeTraces(context.Background(), tr))
+ idx := failoverConnector.failover.pS.TestStableIndex()
+ require.Equal(t, idx, 1)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(0, &sinkFirst)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 0, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+ })
+
+ t.Run("double failover recovery: level 3 -> 2 -> 1", func(t *testing.T) {
+ defer func() {
+ resetConsumers(failoverConnector, &sinkFirst, &sinkSecond, &sinkThird, &sinkFourth)
+ }()
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errTracesConsumer))
+
+ require.NoError(t, conn.ConsumeTraces(context.Background(), tr))
+ idx := failoverConnector.failover.pS.TestStableIndex()
+ require.Equal(t, idx, 2)
+
+ // Simulate recovery of exporter
+ failoverConnector.failover.ModifyConsumerAtIndex(1, &sinkSecond)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 1, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(0, &sinkFirst)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 0, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+ })
+
+ t.Run("multiple failover recovery: level 3 -> 2 -> 4 -> 3 -> 1", func(t *testing.T) {
+ defer func() {
+ resetConsumers(failoverConnector, &sinkFirst, &sinkSecond, &sinkThird, &sinkFourth)
+ }()
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errTracesConsumer))
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 2, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ // Simulate recovery of exporter
+ failoverConnector.failover.ModifyConsumerAtIndex(1, &sinkSecond)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 1, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(2, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errTracesConsumer))
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 3, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(2, &sinkThird)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 2, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(0, &sinkThird)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 0, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+ })
+}
+
+func TestFailoverRecovery_MaxRetries(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird, sinkFourth consumertest.TracesSink
+ tracesFirst := component.NewIDWithName(component.DataTypeTraces, "traces/first")
+ tracesSecond := component.NewIDWithName(component.DataTypeTraces, "traces/second")
+ tracesThird := component.NewIDWithName(component.DataTypeTraces, "traces/third")
+ tracesFourth := component.NewIDWithName(component.DataTypeTraces, "traces/fourth")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{tracesFirst}, {tracesSecond}, {tracesThird}, {tracesFourth}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesFirst: &sinkFirst,
+ tracesSecond: &sinkSecond,
+ tracesThird: &sinkThird,
+ tracesFourth: &sinkFourth,
+ })
+
+ conn, err := NewFactory().CreateTracesToTraces(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Traces))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*tracesFailover)
+
+ tr := sampleTrace()
+
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errTracesConsumer))
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 2, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(0, &sinkFirst)
+ failoverConnector.failover.ModifyConsumerAtIndex(1, &sinkSecond)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 0, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.pS.SetRetryCountToMax(0)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 2, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+ failoverConnector.failover.ModifyConsumerAtIndex(0, &sinkFirst)
+ failoverConnector.failover.ModifyConsumerAtIndex(1, &sinkSecond)
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 1, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+
+}
+
+func resetConsumers(conn *tracesFailover, consumers ...consumer.Traces) {
+ for i, sink := range consumers {
+
+ conn.failover.ModifyConsumerAtIndex(i, sink)
+ }
+ conn.failover.pS.TestSetStableIndex(0)
+}
diff --git a/connector/failoverconnector/go.mod b/connector/failoverconnector/go.mod
new file mode 100644
index 000000000000..7fc73c67b566
--- /dev/null
+++ b/connector/failoverconnector/go.mod
@@ -0,0 +1,55 @@
+module github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector
+
+go 1.21
+
+require (
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+)
+
+require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/golang/protobuf v1.5.3 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/json-iterator/go v1.1.12 // 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.1.1 // indirect
+ github.com/mitchellh/copystructure v1.2.0 // 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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
+ golang.org/x/text v0.14.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/connector/failoverconnector/go.sum b/connector/failoverconnector/go.sum
new file mode 100644
index 000000000000..85d58c46a27b
--- /dev/null
+++ b/connector/failoverconnector/go.sum
@@ -0,0 +1,146 @@
+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/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+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/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/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/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.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+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/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/connector/failoverconnector/internal/metadata/generated_status.go b/connector/failoverconnector/internal/metadata/generated_status.go
new file mode 100644
index 000000000000..10fdcbe7b9fb
--- /dev/null
+++ b/connector/failoverconnector/internal/metadata/generated_status.go
@@ -0,0 +1,27 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package metadata
+
+import (
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("failover")
+)
+
+const (
+ MetricsToMetricsStability = component.StabilityLevelDevelopment
+ TracesToTracesStability = component.StabilityLevelDevelopment
+ LogsToLogsStability = component.StabilityLevelDevelopment
+)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/failover")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/failover")
+}
diff --git a/connector/failoverconnector/internal/state/pipeline_selector.go b/connector/failoverconnector/internal/state/pipeline_selector.go
new file mode 100644
index 000000000000..2ccba6023e14
--- /dev/null
+++ b/connector/failoverconnector/internal/state/pipeline_selector.go
@@ -0,0 +1,251 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package state // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector/internal/state"
+
+import (
+ "context"
+ "reflect"
+ "sync"
+ "sync/atomic"
+ "time"
+)
+
+// PipelineSelector is meant to serve as the source of truth for the target priority level
+type PipelineSelector struct {
+ currentIndex atomic.Int32
+ stableIndex atomic.Int32
+ pipelineRetries []atomic.Int32
+ constants PSConstants
+ RS *RetryState
+
+ errTryLock *TryLock
+ stableTryLock *TryLock
+ chans []chan bool
+}
+
+func (p *PipelineSelector) handlePipelineError(idx int) {
+ if idx != p.loadCurrent() {
+ return
+ }
+ doRetry := p.indexIsStable(idx)
+ p.updatePipelineIndex(idx)
+ if !doRetry {
+ return
+ }
+ ctx, cancel := context.WithCancel(context.Background())
+ p.RS.InvokeCancel()
+ p.RS.UpdateCancelFunc(cancel)
+ p.enableRetry(ctx)
+}
+
+func (p *PipelineSelector) enableRetry(ctx context.Context) {
+ go func() {
+ ticker := time.NewTicker(p.constants.RetryInterval)
+ defer ticker.Stop()
+
+ var cancelFunc context.CancelFunc
+ for p.checkContinueRetry(p.loadStable()) {
+ select {
+ case <-ticker.C:
+ if cancelFunc != nil {
+ cancelFunc()
+ }
+ cancelFunc = p.handleRetry(ctx)
+ case <-ctx.Done():
+ return
+ }
+ }
+ p.RS.InvokeCancel()
+ }()
+}
+
+// handleRetry is responsible for launching goroutine and returning cancelFunc
+func (p *PipelineSelector) handleRetry(parentCtx context.Context) context.CancelFunc {
+ retryCtx, cancelFunc := context.WithCancel(parentCtx)
+ go p.retryHighPriorityPipelines(retryCtx, p.constants.RetryGap)
+ return cancelFunc
+}
+
+// UpdatePipelineIndex is the main function that updates the pipeline indexes due to an error
+func (p *PipelineSelector) updatePipelineIndex(idx int) {
+ if p.indexIsStable(idx) {
+ p.setToNextPriorityPipeline(idx)
+ return
+ }
+ p.setToStableIndex(idx)
+}
+
+// NextPipeline skips through any lower priority pipelines that have exceeded their maxRetries
+func (p *PipelineSelector) setToNextPriorityPipeline(idx int) {
+ for ok := true; ok; ok = p.exceededMaxRetries(idx) {
+ idx++
+ }
+ p.stableIndex.Store(int32(idx))
+ p.currentIndex.Store(int32(idx))
+}
+
+// RetryHighPriorityPipelines responsible for single iteration through all higher priority pipelines
+func (p *PipelineSelector) retryHighPriorityPipelines(ctx context.Context, retryGap time.Duration) {
+
+ ticker := time.NewTicker(retryGap)
+
+ defer ticker.Stop()
+
+ for i := 0; i < len(p.pipelineRetries); i++ {
+ if i > p.loadStable() {
+ return
+ }
+ if p.maxRetriesUsed(i) {
+ continue
+ }
+ select {
+ case <-ctx.Done():
+ return
+ case <-ticker.C:
+ p.currentIndex.Store(int32(i))
+ }
+ }
+}
+
+// checkStopRetry checks if retry should be suspended if all higher priority levels have exceeded their max retries
+func (p *PipelineSelector) checkContinueRetry(index int) bool {
+ for i := 0; i < index; i++ {
+ if p.loadRetryCount(i) < p.constants.MaxRetries {
+ return true
+ }
+ }
+ return false
+}
+
+func (p *PipelineSelector) exceededMaxRetries(idx int) bool {
+ return p.constants.MaxRetries > 0 && idx < len(p.pipelineRetries) && (p.loadRetryCount(idx) >= p.constants.MaxRetries)
+}
+
+// SetToStableIndex returns the CurrentIndex to the known Stable Index
+func (p *PipelineSelector) setToStableIndex(idx int) {
+ p.incrementRetryCount(idx)
+ p.currentIndex.Store(p.stableIndex.Load())
+}
+
+// MaxRetriesUsed exported access to maxRetriesUsed
+func (p *PipelineSelector) maxRetriesUsed(idx int) bool {
+ return p.loadRetryCount(idx) >= p.constants.MaxRetries
+}
+
+// SetNewStableIndex Update stableIndex to the passed stable index
+func (p *PipelineSelector) setNewStableIndex(idx int) {
+ p.resetRetryCount(idx)
+ p.stableIndex.Store(int32(idx))
+}
+
+// IndexIsStable returns if index passed is the stable index
+func (p *PipelineSelector) indexIsStable(idx int) bool {
+ return p.loadStable() == idx
+}
+
+func (p *PipelineSelector) loadStable() int {
+ return int(p.stableIndex.Load())
+}
+
+func (p *PipelineSelector) loadCurrent() int {
+ return int(p.currentIndex.Load())
+}
+
+func (p *PipelineSelector) loadRetryCount(idx int) int {
+ return int(p.pipelineRetries[idx].Load())
+}
+
+func (p *PipelineSelector) incrementRetryCount(idx int) {
+ p.pipelineRetries[idx].Add(1)
+}
+
+func (p *PipelineSelector) resetRetryCount(idx int) {
+ p.pipelineRetries[idx].Store(0)
+}
+
+// ReportStable reports back to the failoverRouter that the current priority was stable
+func (p *PipelineSelector) reportStable(idx int) {
+ if p.indexIsStable(idx) {
+ return
+ }
+ p.setNewStableIndex(idx)
+}
+
+func NewPipelineSelector(lenPriority int, consts PSConstants) *PipelineSelector {
+ chans := make([]chan bool, lenPriority)
+
+ for i := 0; i < lenPriority; i++ {
+ chans[i] = make(chan bool)
+ }
+
+ ps := &PipelineSelector{
+ pipelineRetries: make([]atomic.Int32, lenPriority),
+ constants: consts,
+ RS: &RetryState{},
+ errTryLock: NewTryLock(),
+ stableTryLock: NewTryLock(),
+ chans: chans,
+ }
+ return ps
+}
+
+func (p *PipelineSelector) Start(done chan struct{}, wg *sync.WaitGroup) {
+ wg.Add(1)
+ go p.ListenToChannels(done, wg)
+}
+
+func (p *PipelineSelector) ListenToChannels(done chan struct{}, wg *sync.WaitGroup) {
+ defer wg.Done()
+ cases := make([]reflect.SelectCase, len(p.chans)+1)
+ for i, ch := range p.chans {
+ cases[i] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: reflect.ValueOf(ch)}
+ }
+ cases[len(p.chans)] = reflect.SelectCase{Dir: reflect.SelectRecv, Chan: reflect.ValueOf(done)}
+
+ for {
+ chosen, value, ok := reflect.Select(cases)
+ if !ok {
+ return
+ }
+ if value.Bool() {
+ p.stableTryLock.TryExecute(p.reportStable, chosen)
+ } else {
+ p.errTryLock.TryExecute(p.handlePipelineError, chosen)
+ }
+ }
+}
+
+func (p *PipelineSelector) SelectedPipeline() (int, chan bool) {
+ idx := p.loadCurrent()
+ if idx < len(p.chans) {
+ return idx, p.chans[idx]
+ }
+ return idx, nil
+}
+
+// For Testing
+func (p *PipelineSelector) ChannelIndex(ch chan bool) int {
+ for i, ch1 := range p.chans {
+ if ch == ch1 {
+ return i
+ }
+ }
+ return -1
+}
+
+func (p *PipelineSelector) TestStableIndex() int {
+ return p.loadStable()
+}
+
+func (p *PipelineSelector) TestSetStableIndex(idx int32) {
+ p.stableIndex.Store(idx)
+}
+
+func (p *PipelineSelector) SetRetryCountToMax(idx int) {
+ p.pipelineRetries[idx].Store(int32(p.constants.MaxRetries))
+}
+
+func (p *PipelineSelector) ResetRetryCount(idx int) {
+ p.pipelineRetries[idx].Store(0)
+}
diff --git a/connector/failoverconnector/internal/state/pipeline_selector_test.go b/connector/failoverconnector/internal/state/pipeline_selector_test.go
new file mode 100644
index 000000000000..eb32a458f3d3
--- /dev/null
+++ b/connector/failoverconnector/internal/state/pipeline_selector_test.go
@@ -0,0 +1,89 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package state
+
+import (
+ "sync"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+)
+
+func TestSelectPipeline(t *testing.T) {
+ constants := PSConstants{
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 1000,
+ }
+ pS := NewPipelineSelector(5, constants)
+
+ idx, ch := pS.SelectedPipeline()
+
+ require.Equal(t, idx, 0)
+ require.Equal(t, pS.ChannelIndex(ch), 0)
+}
+
+func TestHandlePipelineError(t *testing.T) {
+ var wg sync.WaitGroup
+ done := make(chan struct{})
+ constants := PSConstants{
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 1000,
+ }
+ pS := NewPipelineSelector(5, constants)
+
+ wg.Add(1)
+ go pS.ListenToChannels(done, &wg)
+ defer func() {
+ close(done)
+ wg.Wait()
+ }()
+
+ idx, ch := pS.SelectedPipeline()
+ require.Equal(t, idx, 0)
+ ch <- false
+
+ require.Eventually(t, func() bool {
+ idx, _ = pS.SelectedPipeline()
+ return idx == 1
+ }, 3*time.Minute, 5*time.Millisecond)
+}
+
+func TestCurrentPipelineWithRetry(t *testing.T) {
+ var wg sync.WaitGroup
+ done := make(chan struct{})
+ constants := PSConstants{
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 1000,
+ }
+ pS := NewPipelineSelector(5, constants)
+
+ wg.Add(1)
+ go pS.ListenToChannels(done, &wg)
+ defer func() {
+ close(done)
+ wg.Wait()
+ }()
+
+ _, ch := pS.SelectedPipeline()
+ ch <- false
+
+ require.Eventually(t, func() bool {
+ idx, _ := pS.SelectedPipeline()
+ return idx == 0
+ }, 3*time.Second, 5*time.Millisecond)
+
+ require.Eventually(t, func() bool {
+ idx, _ := pS.SelectedPipeline()
+ return idx == 1
+ }, 3*time.Second, 5*time.Millisecond)
+
+ require.Eventually(t, func() bool {
+ idx, _ := pS.SelectedPipeline()
+ return idx == 0
+ }, 3*time.Second, 5*time.Millisecond)
+}
diff --git a/connector/failoverconnector/internal/state/utils.go b/connector/failoverconnector/internal/state/utils.go
new file mode 100644
index 000000000000..6283f544d41b
--- /dev/null
+++ b/connector/failoverconnector/internal/state/utils.go
@@ -0,0 +1,51 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package state // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector/internal/state"
+
+import (
+ "context"
+ "sync"
+ "time"
+)
+
+type PSConstants struct {
+ RetryInterval time.Duration
+ RetryGap time.Duration
+ MaxRetries int
+}
+
+type TryLock struct {
+ lock sync.Mutex
+}
+
+func (t *TryLock) TryExecute(fn func(int), arg int) {
+ if t.lock.TryLock() {
+ defer t.lock.Unlock()
+ fn(arg)
+ }
+}
+
+func NewTryLock() *TryLock {
+ return &TryLock{}
+}
+
+// Manages cancel function for retry goroutine, ends up cleaner than using channels
+type RetryState struct {
+ lock sync.Mutex
+ cancelRetry context.CancelFunc
+}
+
+func (m *RetryState) UpdateCancelFunc(newCancelFunc context.CancelFunc) {
+ m.lock.Lock()
+ defer m.lock.Unlock()
+ m.cancelRetry = newCancelFunc
+}
+
+func (m *RetryState) InvokeCancel() {
+ m.lock.Lock()
+ defer m.lock.Unlock()
+ if m.cancelRetry != nil {
+ m.cancelRetry()
+ }
+}
diff --git a/connector/failoverconnector/logs.go b/connector/failoverconnector/logs.go
new file mode 100644
index 000000000000..540e10ff6175
--- /dev/null
+++ b/connector/failoverconnector/logs.go
@@ -0,0 +1,83 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+
+import (
+ "context"
+ "errors"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.uber.org/zap"
+)
+
+type logsFailover struct {
+ component.StartFunc
+ component.ShutdownFunc
+
+ config *Config
+ failover *failoverRouter[consumer.Logs]
+ logger *zap.Logger
+}
+
+func (f *logsFailover) Capabilities() consumer.Capabilities {
+ return consumer.Capabilities{MutatesData: false}
+}
+
+// ConsumeLogs will try to export to the current set priority level and handle failover in the case of an error
+func (f *logsFailover) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
+ tc, ch, ok := f.failover.getCurrentConsumer()
+ if !ok {
+ return errNoValidPipeline
+ }
+ err := tc.ConsumeLogs(ctx, ld)
+ if err == nil {
+ ch <- true
+ return nil
+ }
+ return f.FailoverLogs(ctx, ld)
+}
+
+// FailoverLogs is the function responsible for handling errors returned by the nextConsumer
+func (f *logsFailover) FailoverLogs(ctx context.Context, ld plog.Logs) error {
+ for tc, ch, ok := f.failover.getCurrentConsumer(); ok; tc, ch, ok = f.failover.getCurrentConsumer() {
+ err := tc.ConsumeLogs(ctx, ld)
+ if err != nil {
+ ch <- false
+ continue
+ }
+ ch <- true
+ return nil
+ }
+ f.logger.Error("All provided pipelines return errors, dropping data")
+ return errNoValidPipeline
+}
+
+func (f *logsFailover) Shutdown(_ context.Context) error {
+ if f.failover != nil {
+ f.failover.Shutdown()
+ }
+ return nil
+}
+
+func newLogsToLogs(set connector.CreateSettings, cfg component.Config, logs consumer.Logs) (connector.Logs, error) {
+ config := cfg.(*Config)
+ lr, ok := logs.(connector.LogsRouterAndConsumer)
+ if !ok {
+ return nil, errors.New("consumer is not of type LogsRouter")
+ }
+
+ failover := newFailoverRouter[consumer.Logs](lr.Consumer, config)
+ err := failover.registerConsumers()
+ if err != nil {
+ return nil, err
+ }
+ return &logsFailover{
+ config: config,
+ failover: failover,
+ logger: set.TelemetrySettings.Logger,
+ }, nil
+}
diff --git a/connector/failoverconnector/logs_test.go b/connector/failoverconnector/logs_test.go
new file mode 100644
index 000000000000..7039f844d2e9
--- /dev/null
+++ b/connector/failoverconnector/logs_test.go
@@ -0,0 +1,149 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+import (
+ "context"
+ "errors"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+ "go.opentelemetry.io/collector/pdata/plog"
+)
+
+var errLogsConsumer = errors.New("Error from ConsumeLogs")
+
+func TestLogsRegisterConsumers(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird consumertest.LogsSink
+ logsFirst := component.NewIDWithName(component.DataTypeLogs, "logs/first")
+ logsSecond := component.NewIDWithName(component.DataTypeLogs, "logs/second")
+ logsThird := component.NewIDWithName(component.DataTypeLogs, "logs/third")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{logsFirst}, {logsSecond}, {logsThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsFirst: &sinkFirst,
+ logsSecond: &sinkSecond,
+ logsThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateLogsToLogs(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Logs))
+
+ failoverConnector := conn.(*logsFailover)
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ require.NoError(t, err)
+ require.NotNil(t, conn)
+
+ lc, _, ok := failoverConnector.failover.getCurrentConsumer()
+ lc1 := failoverConnector.failover.GetConsumerAtIndex(1)
+ lc2 := failoverConnector.failover.GetConsumerAtIndex(2)
+
+ assert.True(t, ok)
+ require.Implements(t, (*consumer.Logs)(nil), lc)
+ require.Implements(t, (*consumer.Logs)(nil), lc1)
+ require.Implements(t, (*consumer.Logs)(nil), lc2)
+}
+
+func TestLogsWithValidFailover(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird consumertest.LogsSink
+ logsFirst := component.NewIDWithName(component.DataTypeLogs, "logs/first")
+ logsSecond := component.NewIDWithName(component.DataTypeLogs, "logs/second")
+ logsThird := component.NewIDWithName(component.DataTypeLogs, "logs/third")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{logsFirst}, {logsSecond}, {logsThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsFirst: &sinkFirst,
+ logsSecond: &sinkSecond,
+ logsThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateLogsToLogs(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Logs))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*logsFailover)
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errLogsConsumer))
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ ld := sampleLog()
+
+ require.Eventually(t, func() bool {
+ return consumeLogsAndCheckStable(failoverConnector, 1, ld)
+ }, 3*time.Second, 5*time.Millisecond)
+}
+
+func TestLogsWithFailoverError(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird consumertest.LogsSink
+ logsFirst := component.NewIDWithName(component.DataTypeLogs, "logs/first")
+ logsSecond := component.NewIDWithName(component.DataTypeLogs, "logs/second")
+ logsThird := component.NewIDWithName(component.DataTypeLogs, "logs/third")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{logsFirst}, {logsSecond}, {logsThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsFirst: &sinkFirst,
+ logsSecond: &sinkSecond,
+ logsThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateLogsToLogs(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Logs))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*logsFailover)
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errLogsConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errLogsConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(2, consumertest.NewErr(errLogsConsumer))
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ ld := sampleLog()
+
+ assert.EqualError(t, conn.ConsumeLogs(context.Background(), ld), "All provided pipelines return errors")
+}
+
+func consumeLogsAndCheckStable(conn *logsFailover, idx int, lr plog.Logs) bool {
+ _ = conn.ConsumeLogs(context.Background(), lr)
+ stableIndex := conn.failover.pS.TestStableIndex()
+ return stableIndex == idx
+}
+
+func sampleLog() plog.Logs {
+ l := plog.NewLogs()
+ rl := l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("test", "logs-test")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ return l
+}
diff --git a/connector/failoverconnector/metadata.yaml b/connector/failoverconnector/metadata.yaml
new file mode 100644
index 000000000000..0558c7a0c2eb
--- /dev/null
+++ b/connector/failoverconnector/metadata.yaml
@@ -0,0 +1,14 @@
+type: failover
+scope_name: otelcol/failover
+
+status:
+ class: connector
+ stability:
+ development: [metrics_to_metrics, traces_to_traces, logs_to_logs]
+ distributions: []
+ codeowners:
+ active: [akats7, djaglowski, fatsheep9146]
+
+tests:
+ skip_lifecycle: true
+ skip_shutdown: true
diff --git a/connector/failoverconnector/metrics.go b/connector/failoverconnector/metrics.go
new file mode 100644
index 000000000000..0e0e42777838
--- /dev/null
+++ b/connector/failoverconnector/metrics.go
@@ -0,0 +1,83 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+
+import (
+ "context"
+ "errors"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.uber.org/zap"
+)
+
+type metricsFailover struct {
+ component.StartFunc
+ component.ShutdownFunc
+
+ config *Config
+ failover *failoverRouter[consumer.Metrics]
+ logger *zap.Logger
+}
+
+func (f *metricsFailover) Capabilities() consumer.Capabilities {
+ return consumer.Capabilities{MutatesData: false}
+}
+
+// ConsumeMetrics will try to export to the current set priority level and handle failover in the case of an error
+func (f *metricsFailover) ConsumeMetrics(ctx context.Context, md pmetric.Metrics) error {
+ tc, ch, ok := f.failover.getCurrentConsumer()
+ if !ok {
+ return errNoValidPipeline
+ }
+ err := tc.ConsumeMetrics(ctx, md)
+ if err == nil {
+ ch <- true
+ return nil
+ }
+ return f.FailoverMetrics(ctx, md)
+}
+
+// FailoverMetrics is the function responsible for handling errors returned by the nextConsumer
+func (f *metricsFailover) FailoverMetrics(ctx context.Context, md pmetric.Metrics) error {
+ for tc, ch, ok := f.failover.getCurrentConsumer(); ok; tc, ch, ok = f.failover.getCurrentConsumer() {
+ err := tc.ConsumeMetrics(ctx, md)
+ if err != nil {
+ ch <- false
+ continue
+ }
+ ch <- true
+ return nil
+ }
+ f.logger.Error("All provided pipelines return errors, dropping data")
+ return errNoValidPipeline
+}
+
+func (f *metricsFailover) Shutdown(_ context.Context) error {
+ if f.failover != nil {
+ f.failover.Shutdown()
+ }
+ return nil
+}
+
+func newMetricsToMetrics(set connector.CreateSettings, cfg component.Config, metrics consumer.Metrics) (connector.Metrics, error) {
+ config := cfg.(*Config)
+ mr, ok := metrics.(connector.MetricsRouterAndConsumer)
+ if !ok {
+ return nil, errors.New("consumer is not of type MetricsRouter")
+ }
+
+ failover := newFailoverRouter[consumer.Metrics](mr.Consumer, config)
+ err := failover.registerConsumers()
+ if err != nil {
+ return nil, err
+ }
+ return &metricsFailover{
+ config: config,
+ failover: failover,
+ logger: set.TelemetrySettings.Logger,
+ }, nil
+}
diff --git a/connector/failoverconnector/metrics_test.go b/connector/failoverconnector/metrics_test.go
new file mode 100644
index 000000000000..179ab8f3f35b
--- /dev/null
+++ b/connector/failoverconnector/metrics_test.go
@@ -0,0 +1,151 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+import (
+ "context"
+ "errors"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+)
+
+var errMetricsConsumer = errors.New("Error from ConsumeMetrics")
+
+func TestMetricsRegisterConsumers(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird consumertest.MetricsSink
+ metricsFirst := component.NewIDWithName(component.DataTypeMetrics, "metrics/first")
+ metricsSecond := component.NewIDWithName(component.DataTypeMetrics, "metrics/second")
+ metricsThird := component.NewIDWithName(component.DataTypeMetrics, "metrics/third")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{metricsFirst}, {metricsSecond}, {metricsThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsFirst: &sinkFirst,
+ metricsSecond: &sinkSecond,
+ metricsThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateMetricsToMetrics(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Metrics))
+
+ failoverConnector := conn.(*metricsFailover)
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ require.NoError(t, err)
+ require.NotNil(t, conn)
+
+ mc, _, ok := failoverConnector.failover.getCurrentConsumer()
+ mc1 := failoverConnector.failover.GetConsumerAtIndex(1)
+ mc2 := failoverConnector.failover.GetConsumerAtIndex(2)
+
+ assert.True(t, ok)
+ require.Implements(t, (*consumer.Metrics)(nil), mc)
+ require.Implements(t, (*consumer.Metrics)(nil), mc1)
+ require.Implements(t, (*consumer.Metrics)(nil), mc2)
+}
+
+func TestMetricsWithValidFailover(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird consumertest.MetricsSink
+ metricsFirst := component.NewIDWithName(component.DataTypeMetrics, "metrics/first")
+ metricsSecond := component.NewIDWithName(component.DataTypeMetrics, "metrics/second")
+ metricsThird := component.NewIDWithName(component.DataTypeMetrics, "metrics/third")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{metricsFirst}, {metricsSecond}, {metricsThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsFirst: &sinkFirst,
+ metricsSecond: &sinkSecond,
+ metricsThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateMetricsToMetrics(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Metrics))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*metricsFailover)
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errMetricsConsumer))
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ md := sampleMetric()
+
+ require.Eventually(t, func() bool {
+ return consumeMetricsAndCheckStable(failoverConnector, 1, md)
+ }, 3*time.Second, 5*time.Millisecond)
+}
+
+func TestMetricsWithFailoverError(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird consumertest.MetricsSink
+ metricsFirst := component.NewIDWithName(component.DataTypeMetrics, "metrics/first")
+ metricsSecond := component.NewIDWithName(component.DataTypeMetrics, "metrics/second")
+ metricsThird := component.NewIDWithName(component.DataTypeMetrics, "metrics/third")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{metricsFirst}, {metricsSecond}, {metricsThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsFirst: &sinkFirst,
+ metricsSecond: &sinkSecond,
+ metricsThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateMetricsToMetrics(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Metrics))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*metricsFailover)
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errMetricsConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errMetricsConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(2, consumertest.NewErr(errMetricsConsumer))
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ md := sampleMetric()
+
+ assert.EqualError(t, conn.ConsumeMetrics(context.Background(), md), "All provided pipelines return errors")
+}
+
+func consumeMetricsAndCheckStable(conn *metricsFailover, idx int, mr pmetric.Metrics) bool {
+ _ = conn.ConsumeMetrics(context.Background(), mr)
+ stableIndex := conn.failover.pS.TestStableIndex()
+ return stableIndex == idx
+}
+
+func sampleMetric() pmetric.Metrics {
+ m := pmetric.NewMetrics()
+ rm := m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutInt("sample", 1)
+ metric := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptySum()
+ metric.SetName("test")
+ return m
+}
diff --git a/connector/failoverconnector/package_test.go b/connector/failoverconnector/package_test.go
new file mode 100644
index 000000000000..bd8e101d2a05
--- /dev/null
+++ b/connector/failoverconnector/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/failoverconnector/testdata/config.yaml b/connector/failoverconnector/testdata/config.yaml
new file mode 100644
index 000000000000..f221350848a9
--- /dev/null
+++ b/connector/failoverconnector/testdata/config.yaml
@@ -0,0 +1,22 @@
+failover:
+
+failover/default:
+ priority_levels: [traces]
+
+failover/full:
+ priority_levels:
+ - [ traces/first, traces/also_first ]
+ - [ traces/second ]
+ - [ traces/third ]
+ - [ traces/fourth ]
+ retry_interval: 5m
+ retry_gap: 1m
+ max_retries: 10
+
+failover/invalid:
+ priority_levels:
+ - [ traces/first ]
+ - [ traces/second ]
+ retry_interval: 3m
+ retry_gap: 2m
+ max_retries: 10
\ No newline at end of file
diff --git a/connector/failoverconnector/traces.go b/connector/failoverconnector/traces.go
new file mode 100644
index 000000000000..957bc8eb12f1
--- /dev/null
+++ b/connector/failoverconnector/traces.go
@@ -0,0 +1,84 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+
+import (
+ "context"
+ "errors"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "go.uber.org/zap"
+)
+
+type tracesFailover struct {
+ component.StartFunc
+ component.ShutdownFunc
+
+ config *Config
+ failover *failoverRouter[consumer.Traces]
+ logger *zap.Logger
+}
+
+func (f *tracesFailover) Capabilities() consumer.Capabilities {
+ return consumer.Capabilities{MutatesData: false}
+}
+
+// ConsumeTraces will try to export to the current set priority level and handle failover in the case of an error
+func (f *tracesFailover) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
+ tc, ch, ok := f.failover.getCurrentConsumer()
+ if !ok {
+ return errNoValidPipeline
+ }
+ err := tc.ConsumeTraces(ctx, td)
+ if err == nil {
+ ch <- true
+ return nil
+ }
+ return f.FailoverTraces(ctx, td)
+}
+
+// FailoverTraces is the function responsible for handling errors returned by the nextConsumer
+func (f *tracesFailover) FailoverTraces(ctx context.Context, td ptrace.Traces) error {
+ for tc, ch, ok := f.failover.getCurrentConsumer(); ok; tc, ch, ok = f.failover.getCurrentConsumer() {
+ err := tc.ConsumeTraces(ctx, td)
+ if err != nil {
+ ch <- false
+ continue
+ }
+ ch <- true
+ return nil
+ }
+ f.logger.Error("All provided pipelines return errors, dropping data")
+ return errNoValidPipeline
+}
+
+func (f *tracesFailover) Shutdown(_ context.Context) error {
+ if f.failover != nil {
+ f.failover.Shutdown()
+ }
+ return nil
+}
+
+func newTracesToTraces(set connector.CreateSettings, cfg component.Config, traces consumer.Traces) (connector.Traces, error) {
+ config := cfg.(*Config)
+ tr, ok := traces.(connector.TracesRouterAndConsumer)
+ if !ok {
+ return nil, errors.New("consumer is not of type TracesRouter")
+ }
+
+ failover := newFailoverRouter[consumer.Traces](tr.Consumer, config)
+ err := failover.registerConsumers()
+ if err != nil {
+ return nil, err
+ }
+
+ return &tracesFailover{
+ config: config,
+ failover: failover,
+ logger: set.TelemetrySettings.Logger,
+ }, nil
+}
diff --git a/connector/failoverconnector/traces_test.go b/connector/failoverconnector/traces_test.go
new file mode 100644
index 000000000000..8b9e68369414
--- /dev/null
+++ b/connector/failoverconnector/traces_test.go
@@ -0,0 +1,153 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package failoverconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/failoverconnector"
+import (
+ "context"
+ "errors"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+var errTracesConsumer = errors.New("Error from ConsumeTraces")
+
+func TestTracesRegisterConsumers(t *testing.T) {
+ var sinkFirst, sinkSecond, sinkThird consumertest.TracesSink
+ tracesFirst := component.NewIDWithName(component.DataTypeTraces, "traces/first")
+ tracesSecond := component.NewIDWithName(component.DataTypeTraces, "traces/second")
+ tracesThird := component.NewIDWithName(component.DataTypeTraces, "traces/third")
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{tracesFirst}, {tracesSecond}, {tracesThird}},
+ RetryInterval: 25 * time.Millisecond,
+ RetryGap: 5 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesFirst: &sinkFirst,
+ tracesSecond: &sinkSecond,
+ tracesThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateTracesToTraces(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Traces))
+
+ failoverConnector := conn.(*tracesFailover)
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ require.NoError(t, err)
+ require.NotNil(t, conn)
+
+ tc, _, ok := failoverConnector.failover.getCurrentConsumer()
+ tc1 := failoverConnector.failover.GetConsumerAtIndex(1)
+ tc2 := failoverConnector.failover.GetConsumerAtIndex(2)
+
+ assert.True(t, ok)
+ require.Implements(t, (*consumer.Traces)(nil), tc)
+ require.Implements(t, (*consumer.Traces)(nil), tc1)
+ require.Implements(t, (*consumer.Traces)(nil), tc2)
+}
+
+func TestTracesWithValidFailover(t *testing.T) {
+ var sinkSecond, sinkThird consumertest.TracesSink
+
+ tracesFirst := component.NewIDWithName(component.DataTypeTraces, "traces/first")
+ tracesSecond := component.NewIDWithName(component.DataTypeTraces, "traces/second")
+ tracesThird := component.NewIDWithName(component.DataTypeTraces, "traces/third")
+ noOp := consumertest.NewNop()
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{tracesFirst}, {tracesSecond}, {tracesThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesFirst: noOp,
+ tracesSecond: &sinkSecond,
+ tracesThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateTracesToTraces(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Traces))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*tracesFailover)
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errTracesConsumer))
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ tr := sampleTrace()
+
+ require.Eventually(t, func() bool {
+ return consumeTracesAndCheckStable(failoverConnector, 1, tr)
+ }, 3*time.Second, 5*time.Millisecond)
+}
+
+func TestTracesWithFailoverError(t *testing.T) {
+ var sinkSecond, sinkThird consumertest.TracesSink
+ tracesFirst := component.NewIDWithName(component.DataTypeTraces, "traces/first")
+ tracesSecond := component.NewIDWithName(component.DataTypeTraces, "traces/second")
+ tracesThird := component.NewIDWithName(component.DataTypeTraces, "traces/third")
+ noOp := consumertest.NewNop()
+
+ cfg := &Config{
+ PipelinePriority: [][]component.ID{{tracesFirst}, {tracesSecond}, {tracesThird}},
+ RetryInterval: 50 * time.Millisecond,
+ RetryGap: 10 * time.Millisecond,
+ MaxRetries: 10000,
+ }
+
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesFirst: noOp,
+ tracesSecond: &sinkSecond,
+ tracesThird: &sinkThird,
+ })
+
+ conn, err := NewFactory().CreateTracesToTraces(context.Background(),
+ connectortest.NewNopCreateSettings(), cfg, router.(consumer.Traces))
+
+ require.NoError(t, err)
+
+ failoverConnector := conn.(*tracesFailover)
+ failoverConnector.failover.ModifyConsumerAtIndex(0, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(1, consumertest.NewErr(errTracesConsumer))
+ failoverConnector.failover.ModifyConsumerAtIndex(2, consumertest.NewErr(errTracesConsumer))
+ defer func() {
+ assert.NoError(t, failoverConnector.Shutdown(context.Background()))
+ }()
+
+ tr := sampleTrace()
+
+ assert.EqualError(t, conn.ConsumeTraces(context.Background(), tr), "All provided pipelines return errors")
+}
+
+func consumeTracesAndCheckStable(conn *tracesFailover, idx int, tr ptrace.Traces) bool {
+ _ = conn.ConsumeTraces(context.Background(), tr)
+ stableIndex := conn.failover.pS.TestStableIndex()
+ return stableIndex == idx
+}
+
+func sampleTrace() ptrace.Traces {
+ tr := ptrace.NewTraces()
+ rl := tr.ResourceSpans().AppendEmpty()
+ rl.Resource().Attributes().PutStr("conn", "failover")
+ span := rl.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.SetName("SampleSpan")
+ return tr
+}
diff --git a/exporter/f5cloudexporter/Makefile b/connector/grafanacloudconnector/Makefile
similarity index 100%
rename from exporter/f5cloudexporter/Makefile
rename to connector/grafanacloudconnector/Makefile
diff --git a/connector/grafanacloudconnector/README.md b/connector/grafanacloudconnector/README.md
new file mode 100644
index 000000000000..41c415c8d770
--- /dev/null
+++ b/connector/grafanacloudconnector/README.md
@@ -0,0 +1,38 @@
+# Grafana Cloud Connector
+
+
+| Status | |
+| ------------- |-----------|
+| Distributions | [contrib] |
+| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aconnector%2Fgrafanacloud%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aconnector%2Fgrafanacloud) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aconnector%2Fgrafanacloud%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aconnector%2Fgrafanacloud) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jpkrohling](https://www.github.com/jpkrohling), [@rlankfo](https://www.github.com/rlankfo), [@jcreixell](https://www.github.com/jcreixell) \| Seeking more code owners! |
+
+[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
+[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
+
+## Supported Pipeline Types
+
+| [Exporter Pipeline Type] | [Receiver Pipeline Type] | [Stability Level] |
+| ------------------------ | ------------------------ | ----------------- |
+| traces | metrics | [alpha] |
+
+[Exporter Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#exporter-pipeline-type
+[Receiver Pipeline Type]: https://github.com/open-telemetry/opentelemetry-collector/blob/main/connector/README.md#receiver-pipeline-type
+[Stability Level]: https://github.com/open-telemetry/opentelemetry-collector#stability-levels
+
+
+## Overview
+
+The Grafana Cloud Connector (grafanacloudconnector) is a connector component that can analyze telemetry in pipelines to generate usage metrics for the following Grafana Cloud products:
+* Application Observability
+
+#### Example configuration for the component
+
+```yaml
+connectors:
+ grafanacloud:
+ host_identifiers: ["host.id"]
+ metrics_flush_interval: 60s
+```
+
+This connector will generate a host info metric based on the first "host_identifiers" resource attribute found on spans. The rest are skipped. Valid flush intervals are between 15s and 5m.
diff --git a/connector/grafanacloudconnector/config.go b/connector/grafanacloudconnector/config.go
new file mode 100644
index 000000000000..b6ddcc913888
--- /dev/null
+++ b/connector/grafanacloudconnector/config.go
@@ -0,0 +1,34 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector"
+
+import (
+ "fmt"
+ "time"
+
+ "go.opentelemetry.io/collector/component"
+)
+
+// Config defines the configuration options for the Grafana Cloud connector.
+type Config struct {
+ // HostIdentifiers defines the list of resource attributes used to derive
+ // a unique `grafana.host.id` value. In most cases, this should be [ "host.id" ]
+ HostIdentifiers []string `mapstructure:"host_identifiers"`
+ MetricsFlushInterval time.Duration `mapstructure:"metrics_flush_interval"`
+}
+
+var _ component.ConfigValidator = (*Config)(nil)
+
+// Validate checks if the configuration is valid
+func (c Config) Validate() error {
+ if len(c.HostIdentifiers) == 0 {
+ return fmt.Errorf("at least one host identifier is required")
+ }
+
+ if c.MetricsFlushInterval > 5*time.Minute || c.MetricsFlushInterval < 15*time.Second {
+ return fmt.Errorf("%q is not a valid flush interval between 15s and 5m", c.MetricsFlushInterval)
+ }
+
+ return nil
+}
diff --git a/connector/grafanacloudconnector/config_test.go b/connector/grafanacloudconnector/config_test.go
new file mode 100644
index 000000000000..9c0a4a6792d4
--- /dev/null
+++ b/connector/grafanacloudconnector/config_test.go
@@ -0,0 +1,88 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector
+
+import (
+ "path/filepath"
+ "testing"
+ "time"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "gotest.tools/assert"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector/internal/metadata"
+)
+
+func TestLoadConfig(t *testing.T) {
+ testCases := []struct {
+ name string
+ expect *Config
+ }{
+ {
+ name: "",
+ expect: createDefaultConfig().(*Config),
+ },
+ {
+ name: "custom",
+ expect: &Config{
+ HostIdentifiers: []string{"k8s.node.name", "host.name", "host.id"},
+ MetricsFlushInterval: 30 * time.Second,
+ },
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
+ assert.NilError(t, err)
+
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ sub, err := cm.Sub(component.NewIDWithName(metadata.Type, tc.name).String())
+ assert.NilError(t, err)
+ assert.NilError(t, component.UnmarshalConfig(sub, cfg))
+ assert.DeepEqual(t, tc.expect, cfg)
+ })
+ }
+}
+
+func TestValidate(t *testing.T) {
+ testCases := []struct {
+ name string
+ cfg *Config
+ errMsg string
+ }{
+ {
+ name: "valid",
+ cfg: createDefaultConfig().(*Config),
+ errMsg: "",
+ },
+ {
+ name: "missing identifiers",
+ cfg: &Config{},
+ errMsg: "at least one host identifier is required",
+ },
+ {
+ name: "invalid flush interval",
+ cfg: &Config{
+ HostIdentifiers: []string{"host.id"},
+ MetricsFlushInterval: time.Hour,
+ },
+ errMsg: "\"1h0m0s\" is not a valid flush interval between 15s and 5m",
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ err := tc.cfg.Validate()
+ if tc.errMsg != "" {
+ assert.Equal(t, tc.errMsg, err.Error())
+ } else {
+ assert.NilError(t, err)
+ }
+ })
+ }
+}
diff --git a/connector/grafanacloudconnector/connector.go b/connector/grafanacloudconnector/connector.go
new file mode 100644
index 000000000000..ac0056c884dd
--- /dev/null
+++ b/connector/grafanacloudconnector/connector.go
@@ -0,0 +1,163 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector"
+
+import (
+ "context"
+ "sync"
+ "time"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "go.opentelemetry.io/otel/metric"
+ "go.uber.org/zap"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector/internal/metadata"
+)
+
+const (
+ hostInfoMetric = "traces_host_info"
+ hostIdentifierAttr = "grafana.host.id"
+)
+
+var _ connector.Traces = (*connectorImp)(nil)
+
+type connectorImp struct {
+ config Config
+ logger *zap.Logger
+
+ started bool
+ done chan struct{}
+ shutdownOnce sync.Once
+
+ metricsConsumer consumer.Metrics
+ hostMetrics *hostMetrics
+
+ metricHostCount metric.Int64ObservableGauge
+ metricFlushCount metric.Int64Counter
+ metricDatapointCount metric.Int64Counter
+}
+
+func newConnector(logger *zap.Logger, set component.TelemetrySettings, config component.Config) (*connectorImp, error) {
+ hm := newHostMetrics()
+ mHostCount, err := metadata.Meter(set).Int64ObservableGauge(
+ "grafanacloud_host_count",
+ metric.WithDescription("Number of unique hosts"),
+ metric.WithUnit("1"),
+ metric.WithInt64Callback(func(_ context.Context, result metric.Int64Observer) error {
+ result.Observe(int64(hm.count()))
+ return nil
+ }),
+ )
+
+ if err != nil {
+ return nil, err
+ }
+
+ mFlushCount, err := metadata.Meter(set).Int64Counter(
+ "grafanacloud_flush_count",
+ metric.WithDescription("Number of metrics flushes"),
+ metric.WithUnit("1"),
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ mDatapointCount, err := metadata.Meter(set).Int64Counter(
+ "grafanacloud_datapoint_count",
+ metric.WithDescription("Number of datapoints sent to Grafana Cloud"),
+ metric.WithUnit("1"),
+ )
+ if err != nil {
+ return nil, err
+ }
+
+ cfg := config.(*Config)
+ return &connectorImp{
+ config: *cfg,
+ logger: logger,
+ done: make(chan struct{}),
+ hostMetrics: hm,
+ metricHostCount: mHostCount,
+ metricFlushCount: mFlushCount,
+ metricDatapointCount: mDatapointCount,
+ }, nil
+}
+
+// Capabilities implements connector.Traces.
+func (c *connectorImp) Capabilities() consumer.Capabilities {
+ return consumer.Capabilities{MutatesData: false}
+}
+
+// ConsumeTraces implements connector.Traces.
+func (c *connectorImp) ConsumeTraces(_ context.Context, td ptrace.Traces) error {
+ for i := 0; i < td.ResourceSpans().Len(); i++ {
+ resourceSpan := td.ResourceSpans().At(i)
+ attrs := resourceSpan.Resource().Attributes()
+ mapping := attrs.AsRaw()
+
+ for _, attrName := range c.config.HostIdentifiers {
+ if val, ok := mapping[attrName]; ok {
+ if v, ok := val.(string); ok {
+ c.hostMetrics.add(v)
+ }
+ break
+ }
+ }
+ }
+ return nil
+}
+
+// Start implements connector.Traces.
+func (c *connectorImp) Start(ctx context.Context, _ component.Host) error {
+ c.logger.Info("Starting Grafana Cloud connector")
+ c.started = true
+ ticker := time.NewTicker(c.config.MetricsFlushInterval)
+ go func() {
+ for {
+ select {
+ case <-c.done:
+ ticker.Stop()
+ return
+ case <-ticker.C:
+ if err := c.flush(ctx); err != nil {
+ c.logger.Error("Error consuming metrics", zap.Error(err))
+ }
+ }
+ }
+ }()
+ return nil
+}
+
+// Shutdown implements connector.Traces.
+func (c *connectorImp) Shutdown(ctx context.Context) error {
+ c.shutdownOnce.Do(func() {
+ c.logger.Info("Stopping Grafana Cloud connector")
+ if c.started {
+ // flush metrics on shutdown
+ if err := c.flush(ctx); err != nil {
+ c.logger.Error("Error consuming metrics", zap.Error(err))
+ }
+ c.done <- struct{}{}
+ c.started = false
+ }
+ })
+ return nil
+}
+
+func (c *connectorImp) flush(ctx context.Context) error {
+ var err error
+
+ metrics, count := c.hostMetrics.metrics()
+ if count > 0 {
+ c.hostMetrics.reset()
+ c.logger.Debug("Flushing metrics", zap.Int("count", count))
+ c.metricDatapointCount.Add(ctx, int64(metrics.DataPointCount()))
+ err = c.metricsConsumer.ConsumeMetrics(ctx, *metrics)
+ }
+ c.metricFlushCount.Add(ctx, int64(1))
+ return err
+}
diff --git a/connector/grafanacloudconnector/connector_test.go b/connector/grafanacloudconnector/connector_test.go
new file mode 100644
index 000000000000..1c191680e13b
--- /dev/null
+++ b/connector/grafanacloudconnector/connector_test.go
@@ -0,0 +1,110 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "gotest.tools/assert"
+)
+
+func TestNewConnector(t *testing.T) {
+ for _, tc := range []struct {
+ name string
+ hostIdentifiers []string
+ metricsFlushInterval *time.Duration
+ expectedConfig *Config
+ }{
+ {
+ name: "default config",
+ expectedConfig: createDefaultConfig().(*Config),
+ },
+ {
+ name: "other config",
+ hostIdentifiers: []string{"host.id", "host.name", "k8s.node.uid"},
+ metricsFlushInterval: durationPtr(15 * time.Second),
+ expectedConfig: &Config{
+ HostIdentifiers: []string{"host.id", "host.name", "k8s.node.uid"},
+ MetricsFlushInterval: 15 * time.Second,
+ },
+ },
+ } {
+ t.Run(tc.name, func(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ if tc.hostIdentifiers != nil {
+ cfg.HostIdentifiers = tc.hostIdentifiers
+ }
+ if tc.metricsFlushInterval != nil {
+ cfg.MetricsFlushInterval = *tc.metricsFlushInterval
+ }
+
+ c, err := factory.CreateTracesToMetrics(context.Background(), connectortest.NewNopCreateSettings(), cfg, consumertest.NewNop())
+ imp := c.(*connectorImp)
+
+ assert.NilError(t, err)
+ assert.Assert(t, imp != nil)
+ assert.DeepEqual(t, tc.expectedConfig.HostIdentifiers, imp.config.HostIdentifiers)
+ assert.DeepEqual(t, tc.expectedConfig.MetricsFlushInterval, imp.config.MetricsFlushInterval)
+ })
+ }
+}
+
+func TestConsumeTraces(t *testing.T) {
+ testCases := []struct {
+ name string
+ input ptrace.Traces
+ output []pmetric.Metrics
+ }{
+ {
+ name: "sample",
+ input: testTraces(),
+ },
+ }
+
+ for _, tc := range testCases {
+ t.Run(tc.name, func(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.MetricsFlushInterval = 50 * time.Millisecond
+
+ sink := &consumertest.MetricsSink{}
+ c, err := factory.CreateTracesToMetrics(context.Background(), connectortest.NewNopCreateSettings(), cfg, sink)
+ assert.NilError(t, err)
+
+ ctx := context.Background()
+ assert.NilError(t, c.Start(ctx, nil))
+ err = c.ConsumeTraces(ctx, tc.input)
+ assert.NilError(t, err)
+ assert.NilError(t, c.Shutdown(ctx))
+
+ metrics := sink.AllMetrics()
+ assert.Assert(t, len(metrics) > 0)
+
+ sm := metrics[0].ResourceMetrics().At(0).ScopeMetrics().At(0).Metrics().At(0)
+ assert.Equal(t, hostInfoMetric, sm.Name())
+
+ val, ok := sm.Gauge().DataPoints().At(0).Attributes().Get(hostIdentifierAttr)
+ assert.Assert(t, ok)
+ assert.Equal(t, "foo", val.AsString())
+ })
+ }
+}
+
+func testTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ resourceSpans := traces.ResourceSpans().AppendEmpty()
+ resourceSpans.Resource().Attributes().PutStr("host.id", "foo")
+ return traces
+}
+
+func durationPtr(t time.Duration) *time.Duration {
+ return &t
+}
diff --git a/connector/grafanacloudconnector/doc.go b/connector/grafanacloudconnector/doc.go
new file mode 100644
index 000000000000..56307a15e0dd
--- /dev/null
+++ b/connector/grafanacloudconnector/doc.go
@@ -0,0 +1,6 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+//go:generate mdatagen metadata.yaml
+
+package grafanacloudconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector"
diff --git a/connector/grafanacloudconnector/factory.go b/connector/grafanacloudconnector/factory.go
new file mode 100644
index 000000000000..d2bac2b00dac
--- /dev/null
+++ b/connector/grafanacloudconnector/factory.go
@@ -0,0 +1,39 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector"
+
+import (
+ "context"
+ "time"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/consumer"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector/internal/metadata"
+)
+
+func NewFactory() connector.Factory {
+ return connector.NewFactory(
+ metadata.Type,
+ createDefaultConfig,
+ connector.WithTracesToMetrics(createTracesToMetricsConnector, metadata.TracesToMetricsStability),
+ )
+}
+
+func createDefaultConfig() component.Config {
+ return &Config{
+ HostIdentifiers: []string{"host.id"},
+ MetricsFlushInterval: 60 * time.Second,
+ }
+}
+
+func createTracesToMetricsConnector(_ context.Context, params connector.CreateSettings, cfg component.Config, next consumer.Metrics) (connector.Traces, error) {
+ c, err := newConnector(params.Logger, params.TelemetrySettings, cfg)
+ if err != nil {
+ return nil, err
+ }
+ c.metricsConsumer = next
+ return c, nil
+}
diff --git a/connector/grafanacloudconnector/factory_test.go b/connector/grafanacloudconnector/factory_test.go
new file mode 100644
index 000000000000..40141cf7eeaf
--- /dev/null
+++ b/connector/grafanacloudconnector/factory_test.go
@@ -0,0 +1,24 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector
+
+import (
+ "testing"
+ "time"
+
+ "go.opentelemetry.io/collector/component/componenttest"
+ "gotest.tools/assert"
+)
+
+func TestCreateDefaultConfig(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ assert.DeepEqual(t, &Config{
+ HostIdentifiers: []string{"host.id"},
+ MetricsFlushInterval: 60 * time.Second,
+ }, cfg)
+
+ assert.NilError(t, componenttest.CheckConfigStruct(cfg))
+}
diff --git a/connector/grafanacloudconnector/generated_component_test.go b/connector/grafanacloudconnector/generated_component_test.go
new file mode 100644
index 000000000000..e5e0fd8e4f86
--- /dev/null
+++ b/connector/grafanacloudconnector/generated_component_test.go
@@ -0,0 +1,61 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package grafanacloudconnector
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ firstConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ require.NoError(t, err)
+ require.NoError(t, firstConnector.Start(context.Background(), host))
+ require.NoError(t, firstConnector.Shutdown(context.Background()))
+ secondConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ require.NoError(t, secondConnector.Start(context.Background(), host))
+ require.NoError(t, secondConnector.Shutdown(context.Background()))
+ })
+ }
+}
diff --git a/connector/grafanacloudconnector/go.mod b/connector/grafanacloudconnector/go.mod
new file mode 100644
index 000000000000..f1cd33429d03
--- /dev/null
+++ b/connector/grafanacloudconnector/go.mod
@@ -0,0 +1,58 @@
+module github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector
+
+go 1.21
+
+require (
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+ gotest.tools v2.2.0+incompatible
+)
+
+require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/golang/protobuf v1.5.3 // indirect
+ github.com/google/go-cmp v0.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/json-iterator/go v1.1.12 // 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.1.1 // indirect
+ github.com/mitchellh/copystructure v1.2.0 // 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/pkg/errors v0.9.1 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
+ golang.org/x/text v0.14.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/connector/grafanacloudconnector/go.sum b/connector/grafanacloudconnector/go.sum
new file mode 100644
index 000000000000..c40d8723b97a
--- /dev/null
+++ b/connector/grafanacloudconnector/go.sum
@@ -0,0 +1,148 @@
+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/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+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/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/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/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.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+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/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
+gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
diff --git a/connector/grafanacloudconnector/host_metrics.go b/connector/grafanacloudconnector/host_metrics.go
new file mode 100644
index 000000000000..c927f87891b9
--- /dev/null
+++ b/connector/grafanacloudconnector/host_metrics.go
@@ -0,0 +1,78 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/grafanacloudconnector"
+
+import (
+ "sync"
+ "time"
+
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+)
+
+type hostMetrics struct {
+ mutex sync.RWMutex
+ hosts map[string]struct{}
+}
+
+func newHostMetrics() *hostMetrics {
+ return &hostMetrics{
+ hosts: make(map[string]struct{}),
+ }
+}
+
+func (h *hostMetrics) add(hostName string) {
+ h.mutex.RLock()
+ if _, ok := h.hosts[hostName]; !ok {
+ h.mutex.RUnlock()
+ h.mutex.Lock()
+ defer h.mutex.Unlock()
+ h.hosts[hostName] = struct{}{}
+ } else {
+ h.mutex.RUnlock()
+ }
+}
+
+func (h *hostMetrics) count() int {
+ h.mutex.RLock()
+ defer h.mutex.RUnlock()
+ return len(h.hosts)
+}
+
+func (h *hostMetrics) metrics() (*pmetric.Metrics, int) {
+ h.mutex.RLock()
+ defer h.mutex.RUnlock()
+
+ count := len(h.hosts)
+ var pm *pmetric.Metrics
+
+ if count > 0 {
+ metrics := pmetric.NewMetrics()
+ pm = &metrics
+
+ ilm := metrics.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty()
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName(hostInfoMetric)
+ m.SetEmptyGauge()
+ dps := m.Gauge().DataPoints()
+
+ dps.EnsureCapacity(count)
+ timestamp := pcommon.NewTimestampFromTime(time.Now())
+ for k := range h.hosts {
+ dpCalls := dps.AppendEmpty()
+ dpCalls.SetStartTimestamp(timestamp)
+ dpCalls.SetTimestamp(timestamp)
+ dpCalls.Attributes().PutStr(hostIdentifierAttr, k)
+ dpCalls.SetIntValue(int64(1))
+ }
+ }
+
+ return pm, count
+}
+
+func (h *hostMetrics) reset() {
+ h.mutex.Lock()
+ defer h.mutex.Unlock()
+ h.hosts = make(map[string]struct{})
+}
diff --git a/connector/grafanacloudconnector/host_metrics_test.go b/connector/grafanacloudconnector/host_metrics_test.go
new file mode 100644
index 000000000000..ac790f1c7045
--- /dev/null
+++ b/connector/grafanacloudconnector/host_metrics_test.go
@@ -0,0 +1,65 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector
+
+import (
+ "strings"
+ "testing"
+
+ "gotest.tools/assert"
+)
+
+func TestHostMetrics(t *testing.T) {
+ for _, tc := range []struct {
+ name string
+ hosts []string
+ expectedHostCount int
+ expectedMetricCount int
+ expectedDatapointCount int
+ }{
+ {
+ name: "single host",
+ hosts: []string{"hostA"},
+ expectedHostCount: 1,
+ expectedMetricCount: 1,
+ expectedDatapointCount: 1,
+ },
+ {
+ name: "multiple hosts",
+ hosts: []string{"hostA", "hostB", "hostC", "hostA", "hostB"},
+ expectedHostCount: 3,
+ expectedMetricCount: 1,
+ expectedDatapointCount: 3,
+ },
+ {
+ name: "none",
+ hosts: []string{},
+ },
+ } {
+ t.Run(tc.name, func(t *testing.T) {
+ hm := newHostMetrics()
+ for _, h := range tc.hosts {
+ hm.add(h)
+ }
+
+ metrics, count := hm.metrics()
+ hm.reset()
+ assert.Equal(t, tc.expectedHostCount, count)
+ if metrics != nil {
+ assert.Equal(t, tc.expectedMetricCount, metrics.MetricCount())
+ assert.Equal(t, tc.expectedDatapointCount, metrics.DataPointCount())
+ rm := metrics.ResourceMetrics()
+ metric := rm.At(0).ScopeMetrics().At(0).Metrics().At(0)
+ assert.Equal(t, hostInfoMetric, metric.Name())
+ for i := 0; i < count; i++ {
+ dp := metric.Gauge().DataPoints().At(i)
+ val, ok := dp.Attributes().Get(hostIdentifierAttr)
+ assert.Assert(t, ok)
+ assert.Assert(t, strings.HasPrefix(val.AsString(), "host"))
+ assert.Equal(t, int64(1), dp.IntValue())
+ }
+ }
+ })
+ }
+}
diff --git a/connector/grafanacloudconnector/internal/metadata/generated_status.go b/connector/grafanacloudconnector/internal/metadata/generated_status.go
new file mode 100644
index 000000000000..78efdb31a113
--- /dev/null
+++ b/connector/grafanacloudconnector/internal/metadata/generated_status.go
@@ -0,0 +1,25 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package metadata
+
+import (
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("grafanacloud")
+)
+
+const (
+ TracesToMetricsStability = component.StabilityLevelAlpha
+)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/grafanacloud")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/grafanacloud")
+}
diff --git a/connector/grafanacloudconnector/metadata.yaml b/connector/grafanacloudconnector/metadata.yaml
new file mode 100644
index 000000000000..df5a33ad6cc2
--- /dev/null
+++ b/connector/grafanacloudconnector/metadata.yaml
@@ -0,0 +1,15 @@
+type: grafanacloud
+scope_name: otelcol/grafanacloud
+
+status:
+ class: connector
+ stability:
+ alpha: [traces_to_metrics]
+ distributions: [contrib]
+ codeowners:
+ active: [jpkrohling, rlankfo, jcreixell]
+ emeritus: []
+ seeking_new: true
+
+tests:
+ config:
diff --git a/connector/grafanacloudconnector/package_test.go b/connector/grafanacloudconnector/package_test.go
new file mode 100644
index 000000000000..23858a7b92ce
--- /dev/null
+++ b/connector/grafanacloudconnector/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package grafanacloudconnector
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/grafanacloudconnector/testdata/config.yaml b/connector/grafanacloudconnector/testdata/config.yaml
new file mode 100644
index 000000000000..4b138a7b873f
--- /dev/null
+++ b/connector/grafanacloudconnector/testdata/config.yaml
@@ -0,0 +1,10 @@
+# default configuration
+grafanacloud:
+
+# custom configuration
+grafanacloud/custom:
+ host_identifiers:
+ - k8s.node.name
+ - host.name
+ - host.id
+ metrics_flush_interval: 30s
diff --git a/connector/routingconnector/README.md b/connector/routingconnector/README.md
index 1a3f04da41a5..7ce1b0dd9937 100644
--- a/connector/routingconnector/README.md
+++ b/connector/routingconnector/README.md
@@ -35,7 +35,8 @@ The following settings are available:
- `table.statement (required)`: the routing condition provided as the [OTTL] statement.
- `table.pipelines (required)`: the list of pipelines to use when the routing condition is met.
- `default_pipelines (optional)`: contains the list of pipelines to use when a record does not meet any of specified conditions.
-- `error_mode (optional)`: determines how errors returned from OTTL statements are handled. Valid values are `ignore` and `propagate`. If `ignored` is used and a statement's condition has an error then the payload will be routed to the default pipelines. If not supplied, `propagate` is used.
+- `error_mode (optional)`: determines how errors returned from OTTL statements are handled. Valid values are `propagate`, `ignore` and `silent`. If `ignore` or `silent` is used and a statement's condition has an error then the payload will be routed to the default pipelines. When `silent` is used the error is not logged. If not supplied, `propagate` is used.
+- `match_once (optional, default: false)`: determines whether the connector matches multiple statements or not. If enabled, the payload will be routed to the first pipeline in the `table` whose routing condition is met.
Example:
@@ -55,12 +56,23 @@ connectors:
routing:
default_pipelines: [traces/jaeger]
error_mode: ignore
+ match_once: false
table:
- statement: route() where attributes["X-Tenant"] == "acme"
pipelines: [traces/jaeger-acme]
- statement: delete_key(attributes, "X-Tenant") where IsMatch(attributes["X-Tenant"], ".*corp")
pipelines: [traces/jaeger-ecorp]
+ routing/match_once:
+ default_pipelines: [traces/jaeger]
+ error_mode: ignore
+ match_once: true
+ table:
+ - statement: route() where attributes["X-Tenant"] == "acme"
+ pipelines: [traces/jaeger-acme]
+ - statement: route() where attributes["X-Tenant"] == ".*acme"
+ pipelines: [traces/jaeger-ecorp]
+
service:
pipelines:
traces/in:
diff --git a/connector/routingconnector/config.go b/connector/routingconnector/config.go
index 58c5102dff5c..5f79cdcde6e1 100644
--- a/connector/routingconnector/config.go
+++ b/connector/routingconnector/config.go
@@ -29,7 +29,7 @@ type Config struct {
// condition.
// Valid values are `ignore` and `propagate`.
// `ignore` means the processor ignores errors returned by conditions and continues on to the
- // next condition. This is the recommended mode. If `ignored` is used and a statement's
+ // next condition. This is the recommended mode. If `ignore` is used and a statement's
// condition has an error then the payload will be routed to the default exporter. `propagate`
// means the processor returns the error up the pipeline. This will result in the payload being
// dropped from the collector.
@@ -39,6 +39,10 @@ type Config struct {
// Table contains the routing table for this processor.
// Required.
Table []RoutingTableItem `mapstructure:"table"`
+
+ // MatchOnce determines whether the connector matches multiple statements.
+ // Optional.
+ MatchOnce bool `mapstructure:"match_once"`
}
// Validate checks if the processor configuration is valid.
diff --git a/connector/routingconnector/factory_test.go b/connector/routingconnector/factory_test.go
index cdb27656d228..56f436223b2c 100644
--- a/connector/routingconnector/factory_test.go
+++ b/connector/routingconnector/factory_test.go
@@ -9,6 +9,7 @@ import (
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/connector/connectortest"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumertest"
@@ -24,10 +25,10 @@ func TestConnectorCreatedWithValidConfiguration(t *testing.T) {
}},
}
- router := connectortest.NewTracesRouter(
- connectortest.WithNopTraces(component.NewIDWithName(component.DataTypeTraces, "default")),
- connectortest.WithNopTraces(component.NewIDWithName(component.DataTypeTraces, "0")),
- )
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ component.NewIDWithName(component.DataTypeTraces, "default"): consumertest.NewNop(),
+ component.NewIDWithName(component.DataTypeTraces, "0"): consumertest.NewNop(),
+ })
factory := NewFactory()
conn, err := factory.CreateTracesToTraces(context.Background(),
diff --git a/connector/routingconnector/go.mod b/connector/routingconnector/go.mod
index a8f4fb44f554..1b16c1576926 100644
--- a/connector/routingconnector/go.mod
+++ b/connector/routingconnector/go.mod
@@ -1,52 +1,62 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/connector/routingconnector
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/alecthomas/participle/v2 v2.1.0 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/uuid v1.4.0 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/connector/routingconnector/go.sum b/connector/routingconnector/go.sum
index 2aee1203d80a..f4c9dc410deb 100644
--- a/connector/routingconnector/go.sum
+++ b/connector/routingconnector/go.sum
@@ -1,13 +1,24 @@
github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
-github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4=
-github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
+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/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@@ -17,12 +28,12 @@ github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -33,14 +44,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -51,61 +62,77 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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/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/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/consumer v0.89.0 h1:MteKhkudX2L1ylbtdpSazO8SwyHSxl6fUEElc0rRLDQ=
-go.opentelemetry.io/collector/consumer v0.89.0/go.mod h1:aOaoi6R0qVvfHu0pEPCzSE74gIPNJoCQM8Ml4Bc9NHE=
-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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -118,15 +145,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-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/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/connector/routingconnector/internal/metadata/generated_status.go b/connector/routingconnector/internal/metadata/generated_status.go
index c118c256ee31..ddf7e9c1c51d 100644
--- a/connector/routingconnector/internal/metadata/generated_status.go
+++ b/connector/routingconnector/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("routing")
)
const (
- Type = "routing"
TracesToTracesStability = component.StabilityLevelAlpha
MetricsToMetricsStability = component.StabilityLevelAlpha
LogsToLogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/routing")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/routing")
+}
diff --git a/connector/routingconnector/logs.go b/connector/routingconnector/logs.go
index e1db011eefda..b5a38fcc05e3 100644
--- a/connector/routingconnector/logs.go
+++ b/connector/routingconnector/logs.go
@@ -33,7 +33,7 @@ func newLogsConnector(
) (*logsConnector, error) {
cfg := config.(*Config)
- lr, ok := logs.(connector.LogsRouter)
+ lr, ok := logs.(connector.LogsRouterAndConsumer)
if !ok {
return nil, errUnexpectedConsumer
}
@@ -72,7 +72,7 @@ func (c *logsConnector) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
rtx := ottlresource.NewTransformContext(rlogs.Resource())
noRoutesMatch := true
- for _, route := range c.router.routes {
+ for _, route := range c.router.routeSlice {
_, isMatch, err := route.statement.Execute(ctx, rtx)
if err != nil {
if c.config.ErrorMode == ottl.PropagateError {
@@ -84,6 +84,9 @@ func (c *logsConnector) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
if isMatch {
noRoutesMatch = false
c.group(groups, route.consumer, rlogs)
+ if c.config.MatchOnce {
+ break
+ }
}
}
diff --git a/connector/routingconnector/logs_test.go b/connector/routingconnector/logs_test.go
index ed2c8dcc0cba..bcd97da62ba1 100644
--- a/connector/routingconnector/logs_test.go
+++ b/connector/routingconnector/logs_test.go
@@ -11,6 +11,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/connector/connectortest"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumertest"
@@ -40,11 +41,11 @@ func TestLogsRegisterConsumersForValidRoute(t *testing.T) {
var defaultSink, sink0, sink1 consumertest.LogsSink
- router := connectortest.NewLogsRouter(
- connectortest.WithLogsSink(logsDefault, &defaultSink),
- connectortest.WithLogsSink(logs0, &sink0),
- connectortest.WithLogsSink(logs1, &sink1),
- )
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsDefault: &defaultSink,
+ logs0: &sink0,
+ logs1: &sink1,
+ })
conn, err := NewFactory().CreateLogsToLogs(context.Background(),
connectortest.NewNopCreateSettings(), cfg, router.(consumer.Logs))
@@ -99,11 +100,11 @@ func TestLogsAreCorrectlySplitPerResourceAttributeWithOTTL(t *testing.T) {
var defaultSink, sink0, sink1 consumertest.LogsSink
- router := connectortest.NewLogsRouter(
- connectortest.WithLogsSink(logsDefault, &defaultSink),
- connectortest.WithLogsSink(logs0, &sink0),
- connectortest.WithLogsSink(logs1, &sink1),
- )
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsDefault: &defaultSink,
+ logs0: &sink0,
+ logs1: &sink1,
+ })
resetSinks := func() {
defaultSink.Reset()
@@ -229,6 +230,158 @@ func TestLogsAreCorrectlySplitPerResourceAttributeWithOTTL(t *testing.T) {
})
}
+func TestLogsAreCorrectlyMatchOnceWithOTTL(t *testing.T) {
+ logsDefault := component.NewIDWithName(component.DataTypeLogs, "default")
+ logs0 := component.NewIDWithName(component.DataTypeLogs, "0")
+ logs1 := component.NewIDWithName(component.DataTypeLogs, "1")
+
+ cfg := &Config{
+ DefaultPipelines: []component.ID{logsDefault},
+ Table: []RoutingTableItem{
+ {
+ Statement: `route() where IsMatch(attributes["X-Tenant"], ".*acme") == true`,
+ Pipelines: []component.ID{logs0},
+ },
+ {
+ Statement: `route() where IsMatch(attributes["X-Tenant"], "_acme") == true`,
+ Pipelines: []component.ID{logs1},
+ },
+ {
+ Statement: `route() where attributes["X-Tenant"] == "ecorp"`,
+ Pipelines: []component.ID{logsDefault, logs0},
+ },
+ },
+ MatchOnce: true,
+ }
+
+ var defaultSink, sink0, sink1 consumertest.LogsSink
+
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsDefault: &defaultSink,
+ logs0: &sink0,
+ logs1: &sink1,
+ })
+
+ resetSinks := func() {
+ defaultSink.Reset()
+ sink0.Reset()
+ sink1.Reset()
+ }
+
+ factory := NewFactory()
+ conn, err := factory.CreateLogsToLogs(
+ context.Background(),
+ connectortest.NewNopCreateSettings(),
+ cfg,
+ router.(consumer.Logs),
+ )
+
+ require.NoError(t, err)
+ require.NotNil(t, conn)
+ require.NoError(t, conn.Start(context.Background(), componenttest.NewNopHost()))
+ defer func() {
+ assert.NoError(t, conn.Shutdown(context.Background()))
+ }()
+
+ t.Run("logs matched by no expressions", func(t *testing.T) {
+ resetSinks()
+
+ l := plog.NewLogs()
+ rl := l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("X-Tenant", "something-else")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+
+ require.NoError(t, conn.ConsumeLogs(context.Background(), l))
+
+ assert.Len(t, defaultSink.AllLogs(), 1)
+ assert.Len(t, sink0.AllLogs(), 0)
+ assert.Len(t, sink1.AllLogs(), 0)
+ })
+
+ t.Run("logs matched one expression", func(t *testing.T) {
+ resetSinks()
+
+ l := plog.NewLogs()
+
+ rl := l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("X-Tenant", "xacme")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+
+ require.NoError(t, conn.ConsumeLogs(context.Background(), l))
+
+ assert.Len(t, defaultSink.AllLogs(), 0)
+ assert.Len(t, sink0.AllLogs(), 1)
+ assert.Len(t, sink1.AllLogs(), 0)
+ })
+
+ t.Run("logs matched by two expressions, but sinks to one", func(t *testing.T) {
+ resetSinks()
+
+ l := plog.NewLogs()
+
+ rl := l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("X-Tenant", "x_acme")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+
+ rl = l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("X-Tenant", "_acme")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+
+ require.NoError(t, conn.ConsumeLogs(context.Background(), l))
+
+ assert.Len(t, defaultSink.AllLogs(), 0)
+ assert.Len(t, sink0.AllLogs(), 1)
+ assert.Len(t, sink1.AllLogs(), 0)
+
+ assert.Equal(t, sink0.AllLogs()[0].LogRecordCount(), 2)
+ })
+
+ t.Run("one log matched by multiple expressions, other matched none", func(t *testing.T) {
+ resetSinks()
+
+ l := plog.NewLogs()
+
+ rl := l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("X-Tenant", "_acme")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+
+ rl = l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("X-Tenant", "something-else")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+
+ require.NoError(t, conn.ConsumeLogs(context.Background(), l))
+
+ assert.Len(t, defaultSink.AllLogs(), 1)
+ assert.Len(t, sink0.AllLogs(), 1)
+ assert.Len(t, sink1.AllLogs(), 0)
+
+ rlog := defaultSink.AllLogs()[0].ResourceLogs().At(0)
+ attr, ok := rlog.Resource().Attributes().Get("X-Tenant")
+ assert.True(t, ok, "routing attribute must exists")
+ assert.Equal(t, attr.AsString(), "something-else")
+ })
+
+ t.Run("logs matched by one expression, multiple pipelines", func(t *testing.T) {
+ resetSinks()
+
+ l := plog.NewLogs()
+
+ rl := l.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("X-Tenant", "ecorp")
+ rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+
+ require.NoError(t, conn.ConsumeLogs(context.Background(), l))
+
+ assert.Len(t, defaultSink.AllLogs(), 1)
+ assert.Len(t, sink0.AllLogs(), 1)
+ assert.Len(t, sink1.AllLogs(), 0)
+
+ assert.Equal(t, defaultSink.AllLogs()[0].LogRecordCount(), 1)
+ assert.Equal(t, sink0.AllLogs()[0].LogRecordCount(), 1)
+ assert.Equal(t, defaultSink.AllLogs(), sink0.AllLogs())
+ })
+}
+
func TestLogsResourceAttributeDroppedByOTTL(t *testing.T) {
logsDefault := component.NewIDWithName(component.DataTypeLogs, "default")
logsOther := component.NewIDWithName(component.DataTypeLogs, "other")
@@ -245,10 +398,10 @@ func TestLogsResourceAttributeDroppedByOTTL(t *testing.T) {
var sink0, sink1 consumertest.LogsSink
- router := connectortest.NewLogsRouter(
- connectortest.WithLogsSink(logsDefault, &sink0),
- connectortest.WithLogsSink(logsOther, &sink1),
- )
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsDefault: &sink0,
+ logsOther: &sink1,
+ })
factory := NewFactory()
conn, err := factory.CreateLogsToLogs(
@@ -296,10 +449,10 @@ func TestLogsConnectorCapabilities(t *testing.T) {
}},
}
- router := connectortest.NewLogsRouter(
- connectortest.WithNopLogs(logsDefault),
- connectortest.WithNopLogs(logsOther),
- )
+ router := connector.NewLogsRouter(map[component.ID]consumer.Logs{
+ logsDefault: consumertest.NewNop(),
+ logsOther: consumertest.NewNop(),
+ })
factory := NewFactory()
conn, err := factory.CreateLogsToLogs(
diff --git a/connector/routingconnector/metadata.yaml b/connector/routingconnector/metadata.yaml
index b65774a79be5..0251ca2da379 100644
--- a/connector/routingconnector/metadata.yaml
+++ b/connector/routingconnector/metadata.yaml
@@ -1,4 +1,5 @@
type: routing
+scope_name: otelcol/routing
status:
class: connector
@@ -7,3 +8,7 @@ status:
distributions: [contrib]
codeowners:
active: [jpkrohling, mwear]
+
+tests:
+ skip_lifecycle: true
+ skip_shutdown: true
diff --git a/connector/routingconnector/metrics.go b/connector/routingconnector/metrics.go
index c0c7fdad5e7e..853d88a34361 100644
--- a/connector/routingconnector/metrics.go
+++ b/connector/routingconnector/metrics.go
@@ -33,7 +33,7 @@ func newMetricsConnector(
) (*metricsConnector, error) {
cfg := config.(*Config)
- mr, ok := metrics.(connector.MetricsRouter)
+ mr, ok := metrics.(connector.MetricsRouterAndConsumer)
if !ok {
return nil, errUnexpectedConsumer
}
@@ -72,7 +72,7 @@ func (c *metricsConnector) ConsumeMetrics(ctx context.Context, md pmetric.Metric
rtx := ottlresource.NewTransformContext(rmetrics.Resource())
noRoutesMatch := true
- for _, route := range c.router.routes {
+ for _, route := range c.router.routeSlice {
_, isMatch, err := route.statement.Execute(ctx, rtx)
if err != nil {
if c.config.ErrorMode == ottl.PropagateError {
@@ -84,6 +84,9 @@ func (c *metricsConnector) ConsumeMetrics(ctx context.Context, md pmetric.Metric
if isMatch {
noRoutesMatch = false
c.group(groups, route.consumer, rmetrics)
+ if c.config.MatchOnce {
+ break
+ }
}
}
diff --git a/connector/routingconnector/metrics_test.go b/connector/routingconnector/metrics_test.go
index 377d966865f8..db2421b285d6 100644
--- a/connector/routingconnector/metrics_test.go
+++ b/connector/routingconnector/metrics_test.go
@@ -11,6 +11,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/connector/connectortest"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumertest"
@@ -40,11 +41,11 @@ func TestMetricsRegisterConsumersForValidRoute(t *testing.T) {
var defaultSink, sink0, sink1 consumertest.MetricsSink
- router := connectortest.NewMetricsRouter(
- connectortest.WithMetricsSink(metricsDefault, &defaultSink),
- connectortest.WithMetricsSink(metrics0, &sink0),
- connectortest.WithMetricsSink(metrics1, &sink1),
- )
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsDefault: &defaultSink,
+ metrics0: &sink0,
+ metrics1: &sink1,
+ })
conn, err := NewFactory().CreateMetricsToMetrics(context.Background(),
connectortest.NewNopCreateSettings(), cfg, router.(consumer.Metrics))
@@ -99,11 +100,11 @@ func TestMetricsAreCorrectlySplitPerResourceAttributeWithOTTL(t *testing.T) {
var defaultSink, sink0, sink1 consumertest.MetricsSink
- router := connectortest.NewMetricsRouter(
- connectortest.WithMetricsSink(metricsDefault, &defaultSink),
- connectortest.WithMetricsSink(metrics0, &sink0),
- connectortest.WithMetricsSink(metrics1, &sink1),
- )
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsDefault: &defaultSink,
+ metrics0: &sink0,
+ metrics1: &sink1,
+ })
resetSinks := func() {
defaultSink.Reset()
@@ -244,6 +245,173 @@ func TestMetricsAreCorrectlySplitPerResourceAttributeWithOTTL(t *testing.T) {
})
}
+func TestMetricsAreCorrectlyMatchOnceWithOTTL(t *testing.T) {
+ metricsDefault := component.NewIDWithName(component.DataTypeMetrics, "default")
+ metrics0 := component.NewIDWithName(component.DataTypeMetrics, "0")
+ metrics1 := component.NewIDWithName(component.DataTypeMetrics, "1")
+
+ cfg := &Config{
+ DefaultPipelines: []component.ID{metricsDefault},
+ Table: []RoutingTableItem{
+ {
+ Statement: `route() where attributes["value"] > 2.5`,
+ Pipelines: []component.ID{metrics0},
+ },
+ {
+ Statement: `route() where attributes["value"] > 3.0`,
+ Pipelines: []component.ID{metrics1},
+ },
+ {
+ Statement: `route() where attributes["value"] == 1.0`,
+ Pipelines: []component.ID{metricsDefault, metrics0},
+ },
+ },
+ MatchOnce: true,
+ }
+
+ var defaultSink, sink0, sink1 consumertest.MetricsSink
+
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsDefault: &defaultSink,
+ metrics0: &sink0,
+ metrics1: &sink1,
+ })
+
+ resetSinks := func() {
+ defaultSink.Reset()
+ sink0.Reset()
+ sink1.Reset()
+ }
+
+ factory := NewFactory()
+ conn, err := factory.CreateMetricsToMetrics(
+ context.Background(),
+ connectortest.NewNopCreateSettings(),
+ cfg,
+ router.(consumer.Metrics),
+ )
+
+ require.NoError(t, err)
+ require.NotNil(t, conn)
+ require.NoError(t, conn.Start(context.Background(), componenttest.NewNopHost()))
+ defer func() {
+ assert.NoError(t, conn.Shutdown(context.Background()))
+ }()
+
+ t.Run("metric matched by no expressions", func(t *testing.T) {
+ resetSinks()
+
+ m := pmetric.NewMetrics()
+
+ rm := m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutDouble("value", 0.0)
+ metric := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptyGauge()
+ metric.SetName("cpu")
+
+ require.NoError(t, conn.ConsumeMetrics(context.Background(), m))
+
+ assert.Len(t, defaultSink.AllMetrics(), 1)
+ assert.Len(t, sink0.AllMetrics(), 0)
+ assert.Len(t, sink1.AllMetrics(), 0)
+ })
+
+ t.Run("metric matched by one of two expressions", func(t *testing.T) {
+ resetSinks()
+
+ m := pmetric.NewMetrics()
+
+ rm := m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutDouble("value", 2.7)
+ metric := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptyGauge()
+ metric.SetName("cpu")
+
+ require.NoError(t, conn.ConsumeMetrics(context.Background(), m))
+
+ assert.Len(t, defaultSink.AllMetrics(), 0)
+ assert.Len(t, sink0.AllMetrics(), 1)
+ assert.Len(t, sink1.AllMetrics(), 0)
+ })
+
+ t.Run("metric matched by two expressions, but sinks to one", func(t *testing.T) {
+ resetSinks()
+
+ m := pmetric.NewMetrics()
+
+ rm := m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutDouble("value", 5.0)
+ metric := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptyGauge()
+ metric.SetName("cpu")
+
+ rm = m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutDouble("value", 3.1)
+ metric = rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptyGauge()
+ metric.SetName("cpu1")
+
+ require.NoError(t, conn.ConsumeMetrics(context.Background(), m))
+
+ assert.Len(t, defaultSink.AllMetrics(), 0)
+ assert.Len(t, sink0.AllMetrics(), 1)
+ assert.Len(t, sink1.AllMetrics(), 0)
+
+ assert.Equal(t, sink0.AllMetrics()[0].MetricCount(), 2)
+ })
+
+ t.Run("one metric matched by 2 expressions, others matched by none", func(t *testing.T) {
+ resetSinks()
+
+ m := pmetric.NewMetrics()
+
+ rm := m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutDouble("value", 5.0)
+ metric := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptyGauge()
+ metric.SetName("cpu")
+
+ rm = m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutDouble("value", -1.0)
+ metric = rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptyGauge()
+ metric.SetName("cpu1")
+
+ require.NoError(t, conn.ConsumeMetrics(context.Background(), m))
+
+ assert.Len(t, defaultSink.AllMetrics(), 1)
+ assert.Len(t, sink0.AllMetrics(), 1)
+ assert.Len(t, sink1.AllMetrics(), 0)
+
+ rmetric := defaultSink.AllMetrics()[0].ResourceMetrics().At(0)
+ attr, ok := rmetric.Resource().Attributes().Get("value")
+ assert.True(t, ok, "routing attribute must exist")
+ assert.Equal(t, attr.Double(), float64(-1.0))
+ })
+
+ t.Run("metric matched by one expression, multiple pipelines", func(t *testing.T) {
+ resetSinks()
+
+ m := pmetric.NewMetrics()
+
+ rm := m.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutDouble("value", 1.0)
+ metric := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ metric.SetEmptyGauge()
+ metric.SetName("cpu")
+
+ require.NoError(t, conn.ConsumeMetrics(context.Background(), m))
+
+ assert.Len(t, defaultSink.AllMetrics(), 1)
+ assert.Len(t, sink0.AllMetrics(), 1)
+ assert.Len(t, sink1.AllMetrics(), 0)
+
+ assert.Equal(t, defaultSink.AllMetrics()[0].MetricCount(), 1)
+ assert.Equal(t, sink0.AllMetrics()[0].MetricCount(), 1)
+ assert.Equal(t, defaultSink.AllMetrics(), sink0.AllMetrics())
+ })
+}
+
func TestMetricsResourceAttributeDroppedByOTTL(t *testing.T) {
metricsDefault := component.NewIDWithName(component.DataTypeMetrics, "default")
metricsOther := component.NewIDWithName(component.DataTypeMetrics, "other")
@@ -260,10 +428,10 @@ func TestMetricsResourceAttributeDroppedByOTTL(t *testing.T) {
var sink0, sink1 consumertest.MetricsSink
- router := connectortest.NewMetricsRouter(
- connectortest.WithMetricsSink(metricsDefault, &sink0),
- connectortest.WithMetricsSink(metricsOther, &sink1),
- )
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsDefault: &sink0,
+ metricsOther: &sink1,
+ })
factory := NewFactory()
conn, err := factory.CreateMetricsToMetrics(
@@ -311,10 +479,10 @@ func TestMetricsConnectorCapabilities(t *testing.T) {
}},
}
- router := connectortest.NewMetricsRouter(
- connectortest.WithNopMetrics(metricsDefault),
- connectortest.WithNopMetrics(metricsOther),
- )
+ router := connector.NewMetricsRouter(map[component.ID]consumer.Metrics{
+ metricsDefault: consumertest.NewNop(),
+ metricsOther: consumertest.NewNop(),
+ })
factory := NewFactory()
conn, err := factory.CreateMetricsToMetrics(
diff --git a/connector/routingconnector/package_test.go b/connector/routingconnector/package_test.go
new file mode 100644
index 000000000000..badf42ea5d43
--- /dev/null
+++ b/connector/routingconnector/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package routingconnector
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/routingconnector/router.go b/connector/routingconnector/router.go
index 65a4b639d1d6..24fc5978a0b6 100644
--- a/connector/routingconnector/router.go
+++ b/connector/routingconnector/router.go
@@ -6,6 +6,7 @@ package routingconnector // import "github.com/open-telemetry/opentelemetry-coll
import (
"errors"
"fmt"
+ "strings"
"go.opentelemetry.io/collector/component"
"go.uber.org/zap"
@@ -29,8 +30,9 @@ type router[C any] struct {
logger *zap.Logger
parser ottl.Parser[ottlresource.TransformContext]
- table []RoutingTableItem
- routes map[string]routingItem[C]
+ table []RoutingTableItem
+ routes map[string]routingItem[C]
+ routeSlice []routingItem[C]
defaultConsumer C
consumerProvider consumerProvider[C]
@@ -118,6 +120,13 @@ func (r *router[C]) registerRouteConsumers() error {
route, ok := r.routes[key(item)]
if !ok {
route.statement = statement
+ } else {
+ pipelineNames := []string{}
+ for _, pipeline := range item.Pipelines {
+ pipelineNames = append(pipelineNames, pipeline.String())
+ }
+ exporters := strings.Join(pipelineNames, ", ")
+ r.logger.Warn(fmt.Sprintf(`Statement %q already exists in the routing table, the route with target pipeline(s) %q will be ignored.`, item.Statement, exporters))
}
consumer, err := r.consumerProvider(item.Pipelines...)
@@ -125,6 +134,9 @@ func (r *router[C]) registerRouteConsumers() error {
return fmt.Errorf("%w: %s", errPipelineNotFound, err.Error())
}
route.consumer = consumer
+ if !ok {
+ r.routeSlice = append(r.routeSlice, route)
+ }
r.routes[key(item)] = route
}
diff --git a/connector/routingconnector/traces.go b/connector/routingconnector/traces.go
index 99397d4482ab..1d1b4f2083b0 100644
--- a/connector/routingconnector/traces.go
+++ b/connector/routingconnector/traces.go
@@ -33,7 +33,7 @@ func newTracesConnector(
) (*tracesConnector, error) {
cfg := config.(*Config)
- tr, ok := traces.(connector.TracesRouter)
+ tr, ok := traces.(connector.TracesRouterAndConsumer)
if !ok {
return nil, errUnexpectedConsumer
}
@@ -71,7 +71,7 @@ func (c *tracesConnector) ConsumeTraces(ctx context.Context, t ptrace.Traces) er
rtx := ottlresource.NewTransformContext(rspans.Resource())
noRoutesMatch := true
- for _, route := range c.router.routes {
+ for _, route := range c.router.routeSlice {
_, isMatch, err := route.statement.Execute(ctx, rtx)
if err != nil {
if c.config.ErrorMode == ottl.PropagateError {
@@ -83,6 +83,9 @@ func (c *tracesConnector) ConsumeTraces(ctx context.Context, t ptrace.Traces) er
if isMatch {
noRoutesMatch = false
c.group(groups, route.consumer, rspans)
+ if c.config.MatchOnce {
+ break
+ }
}
}
diff --git a/connector/routingconnector/traces_test.go b/connector/routingconnector/traces_test.go
index f45c6fcb7c51..502997a65790 100644
--- a/connector/routingconnector/traces_test.go
+++ b/connector/routingconnector/traces_test.go
@@ -11,6 +11,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/connector/connectortest"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/consumer/consumertest"
@@ -40,11 +41,11 @@ func TestTracesRegisterConsumersForValidRoute(t *testing.T) {
var defaultSink, sink0, sink1 consumertest.TracesSink
- router := connectortest.NewTracesRouter(
- connectortest.WithTracesSink(tracesDefault, &defaultSink),
- connectortest.WithTracesSink(traces0, &sink0),
- connectortest.WithTracesSink(traces1, &sink1),
- )
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesDefault: &defaultSink,
+ traces0: &sink0,
+ traces1: &sink1,
+ })
conn, err := NewFactory().CreateTracesToTraces(context.Background(),
connectortest.NewNopCreateSettings(), cfg, router.(consumer.Traces))
@@ -105,11 +106,11 @@ func TestTracesCorrectlySplitPerResourceAttributeWithOTTL(t *testing.T) {
sink1.Reset()
}
- router := connectortest.NewTracesRouter(
- connectortest.WithTracesSink(tracesDefault, &defaultSink),
- connectortest.WithTracesSink(traces0, &sink0),
- connectortest.WithTracesSink(traces1, &sink1),
- )
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesDefault: &defaultSink,
+ traces1: &sink1,
+ traces0: &sink0,
+ })
factory := NewFactory()
conn, err := factory.CreateTracesToTraces(
@@ -204,6 +205,135 @@ func TestTracesCorrectlySplitPerResourceAttributeWithOTTL(t *testing.T) {
})
}
+func TestTracesCorrectlyMatchOnceWithOTTL(t *testing.T) {
+ tracesDefault := component.NewIDWithName(component.DataTypeTraces, "default")
+ traces0 := component.NewIDWithName(component.DataTypeTraces, "0")
+ traces1 := component.NewIDWithName(component.DataTypeTraces, "1")
+
+ cfg := &Config{
+ DefaultPipelines: []component.ID{tracesDefault},
+ MatchOnce: true,
+ Table: []RoutingTableItem{
+ {
+ Statement: `route() where attributes["value"] > 0 and attributes["value"] < 4`,
+ Pipelines: []component.ID{traces0},
+ },
+ {
+ Statement: `route() where attributes["value"] > 1 and attributes["value"] < 4`,
+ Pipelines: []component.ID{traces1},
+ },
+ {
+ Statement: `route() where attributes["value"] == 5`,
+ Pipelines: []component.ID{tracesDefault, traces0},
+ },
+ },
+ }
+
+ var defaultSink, sink0, sink1 consumertest.TracesSink
+
+ resetSinks := func() {
+ defaultSink.Reset()
+ sink0.Reset()
+ sink1.Reset()
+ }
+
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesDefault: &defaultSink,
+ traces0: &sink0,
+ traces1: &sink1,
+ })
+
+ factory := NewFactory()
+ conn, err := factory.CreateTracesToTraces(
+ context.Background(),
+ connectortest.NewNopCreateSettings(),
+ cfg,
+ router.(consumer.Traces),
+ )
+
+ require.NoError(t, err)
+ require.NotNil(t, conn)
+ require.NoError(t, conn.Start(context.Background(), componenttest.NewNopHost()))
+ defer func() {
+ assert.NoError(t, conn.Shutdown(context.Background()))
+ }()
+
+ t.Run("span matched by 0 expressions", func(t *testing.T) {
+ resetSinks()
+
+ tr := ptrace.NewTraces()
+ rl := tr.ResourceSpans().AppendEmpty()
+ rl.Resource().Attributes().PutInt("value", 10)
+ span := rl.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.SetName("span")
+
+ require.NoError(t, conn.ConsumeTraces(context.Background(), tr))
+
+ assert.Len(t, defaultSink.AllTraces(), 1)
+ assert.Len(t, sink0.AllTraces(), 0)
+ assert.Len(t, sink1.AllTraces(), 0)
+ })
+
+ t.Run("span matched by one of two expressions", func(t *testing.T) {
+ resetSinks()
+
+ tr := ptrace.NewTraces()
+ rl := tr.ResourceSpans().AppendEmpty()
+ rl.Resource().Attributes().PutInt("value", 1)
+ span := rl.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.SetName("span")
+
+ require.NoError(t, conn.ConsumeTraces(context.Background(), tr))
+
+ assert.Len(t, defaultSink.AllTraces(), 0)
+ assert.Len(t, sink0.AllTraces(), 1)
+ assert.Len(t, sink1.AllTraces(), 0)
+ })
+
+ t.Run("span matched by all expressions, but sinks to one", func(t *testing.T) {
+ resetSinks()
+
+ tr := ptrace.NewTraces()
+ rl := tr.ResourceSpans().AppendEmpty()
+ rl.Resource().Attributes().PutInt("value", 2)
+ span := rl.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.SetName("span")
+
+ rl = tr.ResourceSpans().AppendEmpty()
+ rl.Resource().Attributes().PutInt("value", 3)
+ span = rl.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.SetName("span1")
+
+ require.NoError(t, conn.ConsumeTraces(context.Background(), tr))
+
+ assert.Len(t, defaultSink.AllTraces(), 0)
+ assert.Len(t, sink0.AllTraces(), 1)
+ assert.Len(t, sink1.AllTraces(), 0)
+
+ assert.Equal(t, sink0.AllTraces()[0].SpanCount(), 2)
+ })
+
+ t.Run("span matched by one expression, multiple pipelines", func(t *testing.T) {
+ resetSinks()
+
+ tr := ptrace.NewTraces()
+ rl := tr.ResourceSpans().AppendEmpty()
+ rl.Resource().Attributes().PutInt("value", 5)
+ span := rl.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.SetName("span")
+
+ require.NoError(t, conn.ConsumeTraces(context.Background(), tr))
+
+ assert.Len(t, defaultSink.AllTraces(), 1)
+ assert.Len(t, sink0.AllTraces(), 1)
+ assert.Len(t, sink1.AllTraces(), 0)
+
+ assert.Equal(t, defaultSink.AllTraces()[0].SpanCount(), 1)
+ assert.Equal(t, sink0.AllTraces()[0].SpanCount(), 1)
+ assert.Equal(t, defaultSink.AllTraces(), sink0.AllTraces())
+ })
+}
+
func TestTracesResourceAttributeDroppedByOTTL(t *testing.T) {
tracesDefault := component.NewIDWithName(component.DataTypeTraces, "default")
tracesOther := component.NewIDWithName(component.DataTypeTraces, "other")
@@ -220,10 +350,10 @@ func TestTracesResourceAttributeDroppedByOTTL(t *testing.T) {
var sink0, sink1 consumertest.TracesSink
- router := connectortest.NewTracesRouter(
- connectortest.WithTracesSink(tracesDefault, &sink0),
- connectortest.WithTracesSink(tracesOther, &sink1),
- )
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesDefault: &sink0,
+ tracesOther: &sink1,
+ })
factory := NewFactory()
conn, err := factory.CreateTracesToTraces(
@@ -273,10 +403,10 @@ func TestTraceConnectorCapabilities(t *testing.T) {
}},
}
- router := connectortest.NewTracesRouter(
- connectortest.WithNopTraces(tracesDefault),
- connectortest.WithNopTraces(tracesOther),
- )
+ router := connector.NewTracesRouter(map[component.ID]consumer.Traces{
+ tracesDefault: consumertest.NewNop(),
+ tracesOther: consumertest.NewNop(),
+ })
factory := NewFactory()
conn, err := factory.CreateTracesToTraces(
diff --git a/connector/servicegraphconnector/README.md b/connector/servicegraphconnector/README.md
index 78a909bac2c2..3c163a88977b 100644
--- a/connector/servicegraphconnector/README.md
+++ b/connector/servicegraphconnector/README.md
@@ -3,14 +3,12 @@
| Status | |
| ------------- |-----------|
-| Distributions | [contrib], [grafana], [sumo] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aconnector%2Fservicegraph%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aconnector%2Fservicegraph) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aconnector%2Fservicegraph%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aconnector%2Fservicegraph) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jpkrohling](https://www.github.com/jpkrohling), [@mapno](https://www.github.com/mapno) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[grafana]: https://github.com/grafana/agent
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
## Supported Pipeline Types
@@ -116,6 +114,33 @@ datasources:
version: 1
```
+## Configuration
+
+The following settings are required:
+
+- `metrics_exporter`: the name of the exporter that this processor will write metrics to. This exporter **must** be present in a pipeline.
+- `latency_histogram_buckets`: the list of durations defining the latency histogram buckets.
+ - Default: `[2ms, 4ms, 6ms, 8ms, 10ms, 50ms, 100ms, 200ms, 400ms, 800ms, 1s, 1400ms, 2s, 5s, 10s, 15s]`
+- `dimensions`: the list of dimensions to add together with the default dimensions defined above.
+
+The following settings can be optionally configured:
+
+- `store`: defines the config for the in-memory store used to find requests between services by pairing spans.
+ - `ttl`: TTL is the time to live for items in the store.
+ - Default: `2s`
+ - `max_items`: MaxItems is the maximum number of items to keep in the store.
+ - Default: `1000`
+- `cache_loop`: the interval at which to clean the cache.
+ - Default: `1m`
+- `store_expiration_loop`: the time to expire old entries from the store periodically.
+ - Default: `2s`
+- `virtual_node_peer_attributes`: the list of attributes need to match for building virtual server node, the higher the front, the higher the priority.
+ - Default: `[db.name, net.sock.peer.addr, net.peer.name, rpc.service, net.sock.peer.name, net.peer.name, http.url, http.target]`
+- `metrics_flush_interval`: the interval at which metrics are flushed to the exporter.
+ - Default: Metrics are flushed on every received batch of traces.
+- `database_name_attribute`: the attribute name used to identify the database name from span attributes.
+ - Default: `db.name`
+
## Example configuration
```yaml
@@ -126,7 +151,7 @@ receivers:
connectors:
servicegraph:
- latency_histogram_buckets: [1,2,3,4,5]
+ latency_histogram_buckets: [100ms, 250ms, 1s, 5s, 10s]
dimensions:
- dimension-1
- dimension-2
diff --git a/processor/servicegraphprocessor/config.go b/connector/servicegraphconnector/config.go
similarity index 85%
rename from processor/servicegraphprocessor/config.go
rename to connector/servicegraphconnector/config.go
index ab2172bff0c1..5f27ea7444df 100644
--- a/processor/servicegraphprocessor/config.go
+++ b/connector/servicegraphconnector/config.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-package servicegraphprocessor // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor"
+package servicegraphconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector"
import (
"time"
@@ -38,6 +38,10 @@ type Config struct {
// MetricsFlushInterval is the interval at which metrics are flushed to the exporter.
// If set to 0, metrics are flushed on every received batch of traces.
MetricsFlushInterval time.Duration `mapstructure:"metrics_flush_interval"`
+
+ // DatabaseNameAttribute is the attribute name used to identify the database name from span attributes.
+ // The default value is db.name.
+ DatabaseNameAttribute string `mapstructure:"database_name_attribute"`
}
type StoreConfig struct {
diff --git a/connector/servicegraphconnector/config_test.go b/connector/servicegraphconnector/config_test.go
new file mode 100644
index 000000000000..8357c09535f8
--- /dev/null
+++ b/connector/servicegraphconnector/config_test.go
@@ -0,0 +1,46 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package servicegraphconnector
+
+import (
+ "path/filepath"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/otelcol/otelcoltest"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector/internal/metadata"
+)
+
+func TestLoadConfig(t *testing.T) {
+ // Prepare
+ factories, err := otelcoltest.NopFactories()
+ require.NoError(t, err)
+
+ factories.Connectors[metadata.Type] = NewFactory()
+
+ cfg, err := otelcoltest.LoadConfigAndValidate(filepath.Join("testdata", "service-graph-connector-config.yaml"), factories)
+
+ // Verify
+ require.NoError(t, err)
+ require.NotNil(t, cfg)
+ assert.Equal(t,
+ &Config{
+ LatencyHistogramBuckets: []time.Duration{1, 2, 3, 4, 5},
+ Dimensions: []string{"dimension-1", "dimension-2"},
+ Store: StoreConfig{
+ TTL: time.Second,
+ MaxItems: 10,
+ },
+ CacheLoop: time.Minute,
+ StoreExpirationLoop: 2 * time.Second,
+ DatabaseNameAttribute: "db.name",
+ },
+ cfg.Connectors[component.NewID(metadata.Type)],
+ )
+
+}
diff --git a/processor/servicegraphprocessor/processor.go b/connector/servicegraphconnector/connector.go
similarity index 82%
rename from processor/servicegraphprocessor/processor.go
rename to connector/servicegraphconnector/connector.go
index 866b49009647..bd8a22a431be 100644
--- a/processor/servicegraphprocessor/processor.go
+++ b/connector/servicegraphconnector/connector.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-package servicegraphprocessor // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor"
+package servicegraphconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector"
import (
"context"
@@ -12,7 +12,6 @@ import (
"sync"
"time"
- "go.opencensus.io/stats"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
@@ -21,9 +20,11 @@ import (
"go.opentelemetry.io/collector/pdata/ptrace"
"go.opentelemetry.io/collector/processor"
semconv "go.opentelemetry.io/collector/semconv/v1.13.0"
+ "go.opentelemetry.io/otel/metric"
"go.uber.org/zap"
- "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor/internal/store"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector/internal/metadata"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector/internal/store"
)
const (
@@ -43,6 +44,8 @@ var (
defaultPeerAttributes = []string{
semconv.AttributeDBName, semconv.AttributeNetSockPeerAddr, semconv.AttributeNetPeerName, semconv.AttributeRPCService, semconv.AttributeNetSockPeerName, semconv.AttributeNetPeerName, semconv.AttributeHTTPURL, semconv.AttributeHTTPTarget,
}
+
+ defaultDatabaseNameAttribute = semconv.AttributeDBName
)
type metricSeries struct {
@@ -50,13 +53,12 @@ type metricSeries struct {
lastUpdated int64 // Used to remove stale series
}
-var _ processor.Traces = (*serviceGraphProcessor)(nil)
+var _ processor.Traces = (*serviceGraphConnector)(nil)
-type serviceGraphProcessor struct {
+type serviceGraphConnector struct {
config *Config
logger *zap.Logger
metricsConsumer consumer.Metrics
- tracesConsumer consumer.Traces
store *store.Store
@@ -76,10 +78,18 @@ type serviceGraphProcessor struct {
metricMutex sync.RWMutex
keyToMetric map[string]metricSeries
+ statDroppedSpans metric.Int64Counter
+ statTotalEdges metric.Int64Counter
+ statExpiredEdges metric.Int64Counter
+
shutdownCh chan any
}
-func newProcessor(logger *zap.Logger, config component.Config) *serviceGraphProcessor {
+func customMetricName(name string) string {
+ return "connector/" + metadata.Type.String() + "/" + name
+}
+
+func newConnector(set component.TelemetrySettings, config component.Config) *serviceGraphConnector {
pConfig := config.(*Config)
bounds := defaultLatencyHistogramBuckets
@@ -102,9 +112,31 @@ func newProcessor(logger *zap.Logger, config component.Config) *serviceGraphProc
pConfig.VirtualNodePeerAttributes = defaultPeerAttributes
}
- return &serviceGraphProcessor{
+ if pConfig.DatabaseNameAttribute == "" {
+ pConfig.DatabaseNameAttribute = defaultDatabaseNameAttribute
+ }
+
+ meter := metadata.Meter(set)
+
+ droppedSpan, _ := meter.Int64Counter(
+ customMetricName("dropped_spans"),
+ metric.WithDescription("Number of spans dropped when trying to add edges"),
+ metric.WithUnit("1"),
+ )
+ totalEdges, _ := meter.Int64Counter(
+ customMetricName("total_edges"),
+ metric.WithDescription("Total number of unique edges"),
+ metric.WithUnit("1"),
+ )
+ expiredEdges, _ := meter.Int64Counter(
+ customMetricName("expired_edges"),
+ metric.WithDescription("Number of edges that expired before finding its matching span"),
+ metric.WithUnit("1"),
+ )
+
+ return &serviceGraphConnector{
config: pConfig,
- logger: logger,
+ logger: set.Logger,
startTime: time.Now(),
reqTotal: make(map[string]int64),
reqFailedTotal: make(map[string]int64),
@@ -117,10 +149,13 @@ func newProcessor(logger *zap.Logger, config component.Config) *serviceGraphProc
reqDurationBounds: bounds,
keyToMetric: make(map[string]metricSeries),
shutdownCh: make(chan any),
+ statDroppedSpans: droppedSpan,
+ statTotalEdges: totalEdges,
+ statExpiredEdges: expiredEdges,
}
}
-func (p *serviceGraphProcessor) Start(_ context.Context, host component.Host) error {
+func (p *serviceGraphConnector) Start(_ context.Context, host component.Host) error {
p.store = store.NewStore(p.config.Store.TTL, p.config.Store.MaxItems, p.onComplete, p.onExpire)
if p.metricsConsumer == nil {
@@ -147,15 +182,11 @@ func (p *serviceGraphProcessor) Start(_ context.Context, host component.Host) er
go p.storeExpirationLoop(p.config.StoreExpirationLoop)
- if p.tracesConsumer == nil {
- p.logger.Info("Started servicegraphconnector")
- } else {
- p.logger.Info("Started servicegraphprocessor")
- }
+ p.logger.Info("Started servicegraphconnector")
return nil
}
-func (p *serviceGraphProcessor) metricFlushLoop(flushInterval time.Duration) {
+func (p *serviceGraphConnector) metricFlushLoop(flushInterval time.Duration) {
if flushInterval <= 0 {
return
}
@@ -175,7 +206,7 @@ func (p *serviceGraphProcessor) metricFlushLoop(flushInterval time.Duration) {
}
}
-func (p *serviceGraphProcessor) flushMetrics(ctx context.Context) error {
+func (p *serviceGraphConnector) flushMetrics(ctx context.Context) error {
md, err := p.buildMetrics()
if err != nil {
return fmt.Errorf("failed to build metrics: %w", err)
@@ -186,25 +217,21 @@ func (p *serviceGraphProcessor) flushMetrics(ctx context.Context) error {
return nil
}
- // Firstly, export md to avoid being impacted by downstream trace serviceGraphProcessor errors/latency.
+ // Firstly, export md to avoid being impacted by downstream trace serviceGraphConnector errors/latency.
return p.metricsConsumer.ConsumeMetrics(ctx, md)
}
-func (p *serviceGraphProcessor) Shutdown(_ context.Context) error {
- if p.tracesConsumer == nil {
- p.logger.Info("Shutting down servicegraphconnector")
- } else {
- p.logger.Info("Shutting down servicegraphprocessor")
- }
+func (p *serviceGraphConnector) Shutdown(_ context.Context) error {
+ p.logger.Info("Shutting down servicegraphconnector")
close(p.shutdownCh)
return nil
}
-func (p *serviceGraphProcessor) Capabilities() consumer.Capabilities {
+func (p *serviceGraphConnector) Capabilities() consumer.Capabilities {
return consumer.Capabilities{MutatesData: false}
}
-func (p *serviceGraphProcessor) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
+func (p *serviceGraphConnector) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
if err := p.aggregateMetrics(ctx, td); err != nil {
return fmt.Errorf("failed to aggregate metrics: %w", err)
}
@@ -217,13 +244,10 @@ func (p *serviceGraphProcessor) ConsumeTraces(ctx context.Context, td ptrace.Tra
}
}
- if p.tracesConsumer == nil { // True if p is a connector
- return nil
- }
- return p.tracesConsumer.ConsumeTraces(ctx, td)
+ return nil
}
-func (p *serviceGraphProcessor) aggregateMetrics(ctx context.Context, td ptrace.Traces) (err error) {
+func (p *serviceGraphConnector) aggregateMetrics(ctx context.Context, td ptrace.Traces) (err error) {
var (
isNew bool
totalDroppedSpans int
@@ -271,7 +295,7 @@ func (p *serviceGraphProcessor) aggregateMetrics(ctx context.Context, td ptrace.
// A database request will only have one span, we don't wait for the server
// span but just copy details from the client span
- if dbName, ok := findAttributeValue(semconv.AttributeDBName, rAttributes, span.Attributes()); ok {
+ if dbName, ok := findAttributeValue(p.config.DatabaseNameAttribute, rAttributes, span.Attributes()); ok {
e.ConnectionType = store.Database
e.ServerService = dbName
e.ServerLatencySec = spanDuration(span)
@@ -299,7 +323,7 @@ func (p *serviceGraphProcessor) aggregateMetrics(ctx context.Context, td ptrace.
if errors.Is(err, store.ErrTooManyItems) {
totalDroppedSpans++
- stats.Record(ctx, statDroppedSpans.M(1))
+ p.statDroppedSpans.Add(ctx, 1)
continue
}
@@ -309,7 +333,7 @@ func (p *serviceGraphProcessor) aggregateMetrics(ctx context.Context, td ptrace.
}
if isNew {
- stats.Record(ctx, statTotalEdges.M(1))
+ p.statTotalEdges.Add(ctx, 1)
}
}
}
@@ -317,7 +341,7 @@ func (p *serviceGraphProcessor) aggregateMetrics(ctx context.Context, td ptrace.
return nil
}
-func (p *serviceGraphProcessor) upsertDimensions(kind string, m map[string]string, resourceAttr pcommon.Map, spanAttr pcommon.Map) {
+func (p *serviceGraphConnector) upsertDimensions(kind string, m map[string]string, resourceAttr pcommon.Map, spanAttr pcommon.Map) {
for _, dim := range p.config.Dimensions {
if v, ok := findAttributeValue(dim, resourceAttr, spanAttr); ok {
m[kind+"_"+dim] = v
@@ -325,7 +349,7 @@ func (p *serviceGraphProcessor) upsertDimensions(kind string, m map[string]strin
}
}
-func (p *serviceGraphProcessor) upsertPeerAttributes(m []string, peers map[string]string, spanAttr pcommon.Map) {
+func (p *serviceGraphConnector) upsertPeerAttributes(m []string, peers map[string]string, spanAttr pcommon.Map) {
for _, s := range m {
if v, ok := findAttributeValue(s, spanAttr); ok {
peers[s] = v
@@ -334,7 +358,7 @@ func (p *serviceGraphProcessor) upsertPeerAttributes(m []string, peers map[strin
}
}
-func (p *serviceGraphProcessor) onComplete(e *store.Edge) {
+func (p *serviceGraphConnector) onComplete(e *store.Edge) {
p.logger.Debug(
"edge completed",
zap.String("client_service", e.ClientService),
@@ -345,7 +369,7 @@ func (p *serviceGraphProcessor) onComplete(e *store.Edge) {
p.aggregateMetricsForEdge(e)
}
-func (p *serviceGraphProcessor) onExpire(e *store.Edge) {
+func (p *serviceGraphConnector) onExpire(e *store.Edge) {
p.logger.Debug(
"edge expired",
zap.String("client_service", e.ClientService),
@@ -354,7 +378,7 @@ func (p *serviceGraphProcessor) onExpire(e *store.Edge) {
zap.Stringer("trace_id", e.TraceID),
)
- stats.Record(context.Background(), statExpiredEdges.M(1))
+ p.statExpiredEdges.Add(context.Background(), 1)
if virtualNodeFeatureGate.IsEnabled() {
e.ConnectionType = store.VirtualNode
@@ -370,7 +394,7 @@ func (p *serviceGraphProcessor) onExpire(e *store.Edge) {
}
}
-func (p *serviceGraphProcessor) aggregateMetricsForEdge(e *store.Edge) {
+func (p *serviceGraphConnector) aggregateMetricsForEdge(e *store.Edge) {
metricKey := p.buildMetricKey(e.ClientService, e.ServerService, string(e.ConnectionType), e.Dimensions)
dimensions := buildDimensions(e)
@@ -384,7 +408,7 @@ func (p *serviceGraphProcessor) aggregateMetricsForEdge(e *store.Edge) {
p.updateDurationMetrics(metricKey, e.ServerLatencySec, e.ClientLatencySec)
}
-func (p *serviceGraphProcessor) updateSeries(key string, dimensions pcommon.Map) {
+func (p *serviceGraphConnector) updateSeries(key string, dimensions pcommon.Map) {
p.metricMutex.Lock()
defer p.metricMutex.Unlock()
// Overwrite the series if it already exists
@@ -394,7 +418,7 @@ func (p *serviceGraphProcessor) updateSeries(key string, dimensions pcommon.Map)
}
}
-func (p *serviceGraphProcessor) dimensionsForSeries(key string) (pcommon.Map, bool) {
+func (p *serviceGraphConnector) dimensionsForSeries(key string) (pcommon.Map, bool) {
p.metricMutex.RLock()
defer p.metricMutex.RUnlock()
if series, ok := p.keyToMetric[key]; ok {
@@ -404,16 +428,16 @@ func (p *serviceGraphProcessor) dimensionsForSeries(key string) (pcommon.Map, bo
return pcommon.Map{}, false
}
-func (p *serviceGraphProcessor) updateCountMetrics(key string) { p.reqTotal[key]++ }
+func (p *serviceGraphConnector) updateCountMetrics(key string) { p.reqTotal[key]++ }
-func (p *serviceGraphProcessor) updateErrorMetrics(key string) { p.reqFailedTotal[key]++ }
+func (p *serviceGraphConnector) updateErrorMetrics(key string) { p.reqFailedTotal[key]++ }
-func (p *serviceGraphProcessor) updateDurationMetrics(key string, serverDuration, clientDuration float64) {
+func (p *serviceGraphConnector) updateDurationMetrics(key string, serverDuration, clientDuration float64) {
p.updateServerDurationMetrics(key, serverDuration)
p.updateClientDurationMetrics(key, clientDuration)
}
-func (p *serviceGraphProcessor) updateServerDurationMetrics(key string, duration float64) {
+func (p *serviceGraphConnector) updateServerDurationMetrics(key string, duration float64) {
index := sort.SearchFloat64s(p.reqDurationBounds, duration) // Search bucket index
if _, ok := p.reqServerDurationSecondsBucketCounts[key]; !ok {
p.reqServerDurationSecondsBucketCounts[key] = make([]uint64, len(p.reqDurationBounds)+1)
@@ -423,7 +447,7 @@ func (p *serviceGraphProcessor) updateServerDurationMetrics(key string, duration
p.reqServerDurationSecondsBucketCounts[key][index]++
}
-func (p *serviceGraphProcessor) updateClientDurationMetrics(key string, duration float64) {
+func (p *serviceGraphConnector) updateClientDurationMetrics(key string, duration float64) {
index := sort.SearchFloat64s(p.reqDurationBounds, duration) // Search bucket index
if _, ok := p.reqClientDurationSecondsBucketCounts[key]; !ok {
p.reqClientDurationSecondsBucketCounts[key] = make([]uint64, len(p.reqDurationBounds)+1)
@@ -445,7 +469,7 @@ func buildDimensions(e *store.Edge) pcommon.Map {
return dims
}
-func (p *serviceGraphProcessor) buildMetrics() (pmetric.Metrics, error) {
+func (p *serviceGraphConnector) buildMetrics() (pmetric.Metrics, error) {
m := pmetric.NewMetrics()
ilm := m.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty()
ilm.Scope().SetName("traces_service_graph")
@@ -465,7 +489,7 @@ func (p *serviceGraphProcessor) buildMetrics() (pmetric.Metrics, error) {
return m, nil
}
-func (p *serviceGraphProcessor) collectCountMetrics(ilm pmetric.ScopeMetrics) error {
+func (p *serviceGraphConnector) collectCountMetrics(ilm pmetric.ScopeMetrics) error {
for key, c := range p.reqTotal {
mCount := ilm.Metrics().AppendEmpty()
mCount.SetName("traces_service_graph_request_total")
@@ -509,7 +533,7 @@ func (p *serviceGraphProcessor) collectCountMetrics(ilm pmetric.ScopeMetrics) er
return nil
}
-func (p *serviceGraphProcessor) collectLatencyMetrics(ilm pmetric.ScopeMetrics) error {
+func (p *serviceGraphConnector) collectLatencyMetrics(ilm pmetric.ScopeMetrics) error {
// TODO: Remove this once legacy metric names are removed
if legacyMetricNamesFeatureGate.IsEnabled() {
return p.collectServerLatencyMetrics(ilm, "traces_service_graph_request_duration_seconds")
@@ -522,7 +546,7 @@ func (p *serviceGraphProcessor) collectLatencyMetrics(ilm pmetric.ScopeMetrics)
return p.collectClientLatencyMetrics(ilm)
}
-func (p *serviceGraphProcessor) collectClientLatencyMetrics(ilm pmetric.ScopeMetrics) error {
+func (p *serviceGraphConnector) collectClientLatencyMetrics(ilm pmetric.ScopeMetrics) error {
for key := range p.reqServerDurationSecondsCount {
mDuration := ilm.Metrics().AppendEmpty()
mDuration.SetName("traces_service_graph_request_client_seconds")
@@ -550,7 +574,7 @@ func (p *serviceGraphProcessor) collectClientLatencyMetrics(ilm pmetric.ScopeMet
return nil
}
-func (p *serviceGraphProcessor) collectServerLatencyMetrics(ilm pmetric.ScopeMetrics, mName string) error {
+func (p *serviceGraphConnector) collectServerLatencyMetrics(ilm pmetric.ScopeMetrics, mName string) error {
for key := range p.reqServerDurationSecondsCount {
mDuration := ilm.Metrics().AppendEmpty()
mDuration.SetName(mName)
@@ -578,7 +602,7 @@ func (p *serviceGraphProcessor) collectServerLatencyMetrics(ilm pmetric.ScopeMet
return nil
}
-func (p *serviceGraphProcessor) buildMetricKey(clientName, serverName, connectionType string, edgeDimensions map[string]string) string {
+func (p *serviceGraphConnector) buildMetricKey(clientName, serverName, connectionType string, edgeDimensions map[string]string) string {
var metricKey strings.Builder
metricKey.WriteString(clientName + metricKeySeparator + serverName + metricKeySeparator + connectionType)
@@ -594,7 +618,7 @@ func (p *serviceGraphProcessor) buildMetricKey(clientName, serverName, connectio
}
// storeExpirationLoop periodically expires old entries from the store.
-func (p *serviceGraphProcessor) storeExpirationLoop(d time.Duration) {
+func (p *serviceGraphConnector) storeExpirationLoop(d time.Duration) {
t := time.NewTicker(d)
for {
select {
@@ -606,7 +630,7 @@ func (p *serviceGraphProcessor) storeExpirationLoop(d time.Duration) {
}
}
-func (p *serviceGraphProcessor) getPeerHost(m []string, peers map[string]string) string {
+func (p *serviceGraphConnector) getPeerHost(m []string, peers map[string]string) string {
peerStr := "unknown"
for _, s := range m {
if peer, ok := peers[s]; ok {
@@ -618,7 +642,7 @@ func (p *serviceGraphProcessor) getPeerHost(m []string, peers map[string]string)
}
// cacheLoop periodically cleans the cache
-func (p *serviceGraphProcessor) cacheLoop(d time.Duration) {
+func (p *serviceGraphConnector) cacheLoop(d time.Duration) {
t := time.NewTicker(d)
for {
select {
@@ -632,7 +656,7 @@ func (p *serviceGraphProcessor) cacheLoop(d time.Duration) {
}
// cleanCache removes series that have not been updated in 15 minutes
-func (p *serviceGraphProcessor) cleanCache() {
+func (p *serviceGraphConnector) cleanCache() {
var staleSeries []string
p.metricMutex.RLock()
for key, series := range p.keyToMetric {
@@ -642,12 +666,6 @@ func (p *serviceGraphProcessor) cleanCache() {
}
p.metricMutex.RUnlock()
- p.metricMutex.Lock()
- for _, key := range staleSeries {
- delete(p.keyToMetric, key)
- }
- p.metricMutex.Unlock()
-
p.seriesMutex.Lock()
for _, key := range staleSeries {
delete(p.reqTotal, key)
@@ -660,6 +678,12 @@ func (p *serviceGraphProcessor) cleanCache() {
delete(p.reqServerDurationSecondsBucketCounts, key)
}
p.seriesMutex.Unlock()
+
+ p.metricMutex.Lock()
+ for _, key := range staleSeries {
+ delete(p.keyToMetric, key)
+ }
+ p.metricMutex.Unlock()
}
// spanDuration returns the duration of the given span in seconds (legacy ms).
diff --git a/connector/servicegraphconnector/connector_test.go b/connector/servicegraphconnector/connector_test.go
new file mode 100644
index 000000000000..9537104ced61
--- /dev/null
+++ b/connector/servicegraphconnector/connector_test.go
@@ -0,0 +1,479 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package servicegraphconnector
+
+import (
+ "context"
+ "crypto/rand"
+ "sync"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/configtelemetry"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ semconv "go.opentelemetry.io/collector/semconv/v1.13.0"
+ sdkmetric "go.opentelemetry.io/otel/sdk/metric"
+ "go.opentelemetry.io/otel/sdk/metric/metricdata"
+ "go.opentelemetry.io/otel/sdk/metric/metricdata/metricdatatest"
+ "go.uber.org/zap/zaptest"
+)
+
+func TestConnectorStart(t *testing.T) {
+ // Create servicegraph connector
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+
+ procCreationParams := connectortest.NewNopCreateSettings()
+ traceConnector, err := factory.CreateTracesToMetrics(context.Background(), procCreationParams, cfg, consumertest.NewNop())
+ require.NoError(t, err)
+
+ // Test
+ smp := traceConnector.(*serviceGraphConnector)
+ err = smp.Start(context.Background(), componenttest.NewNopHost())
+ defer require.NoError(t, smp.Shutdown(context.Background()))
+
+ // Verify
+ assert.NoError(t, err)
+}
+
+func TestConnectorShutdown(t *testing.T) {
+ // Prepare
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+
+ // Test
+ next := new(consumertest.MetricsSink)
+ set := componenttest.NewNopTelemetrySettings()
+ set.Logger = zaptest.NewLogger(t)
+ p := newConnector(set, cfg)
+ p.metricsConsumer = next
+ err := p.Shutdown(context.Background())
+
+ // Verify
+ assert.NoError(t, err)
+}
+
+func TestConnectorConsume(t *testing.T) {
+ // Prepare
+ cfg := &Config{
+ Dimensions: []string{"some-attribute", "non-existing-attribute"},
+ Store: StoreConfig{MaxItems: 10},
+ }
+
+ set := componenttest.NewNopTelemetrySettings()
+ set.Logger = zaptest.NewLogger(t)
+ conn := newConnector(set, cfg)
+ conn.metricsConsumer = newMockMetricsExporter()
+
+ assert.NoError(t, conn.Start(context.Background(), componenttest.NewNopHost()))
+
+ // Test & verify
+ td := buildSampleTrace(t, "val")
+ // The assertion is part of verifyHappyCaseMetrics func.
+ assert.NoError(t, conn.ConsumeTraces(context.Background(), td))
+
+ // Force collection
+ conn.store.Expire()
+ md, err := conn.buildMetrics()
+ assert.NoError(t, err)
+ verifyHappyCaseMetrics(t, md)
+
+ // Shutdown the connector
+ assert.NoError(t, conn.Shutdown(context.Background()))
+}
+
+func verifyHappyCaseMetrics(t *testing.T, md pmetric.Metrics) {
+ verifyHappyCaseMetricsWithDuration(1)(t, md)
+}
+
+func verifyHappyCaseMetricsWithDuration(durationSum float64) func(t *testing.T, md pmetric.Metrics) {
+ return func(t *testing.T, md pmetric.Metrics) {
+ assert.Equal(t, 3, md.MetricCount())
+
+ rms := md.ResourceMetrics()
+ assert.Equal(t, 1, rms.Len())
+
+ sms := rms.At(0).ScopeMetrics()
+ assert.Equal(t, 1, sms.Len())
+
+ ms := sms.At(0).Metrics()
+ assert.Equal(t, 3, ms.Len())
+
+ mCount := ms.At(0)
+ verifyCount(t, mCount)
+
+ mServerDuration := ms.At(1)
+ assert.Equal(t, "traces_service_graph_request_server_seconds", mServerDuration.Name())
+ verifyDuration(t, mServerDuration, durationSum)
+
+ mClientDuration := ms.At(2)
+ assert.Equal(t, "traces_service_graph_request_client_seconds", mClientDuration.Name())
+ verifyDuration(t, mClientDuration, durationSum)
+ }
+}
+
+func verifyCount(t *testing.T, m pmetric.Metric) {
+ assert.Equal(t, "traces_service_graph_request_total", m.Name())
+
+ assert.Equal(t, pmetric.MetricTypeSum, m.Type())
+ dps := m.Sum().DataPoints()
+ assert.Equal(t, 1, dps.Len())
+
+ dp := dps.At(0)
+ assert.Equal(t, pmetric.NumberDataPointValueTypeInt, dp.ValueType())
+ assert.Equal(t, int64(1), dp.IntValue())
+
+ attributes := dp.Attributes()
+ assert.Equal(t, 5, attributes.Len())
+ verifyAttr(t, attributes, "client", "some-service")
+ verifyAttr(t, attributes, "server", "some-service")
+ verifyAttr(t, attributes, "connection_type", "")
+ verifyAttr(t, attributes, "failed", "false")
+ verifyAttr(t, attributes, "client_some-attribute", "val")
+}
+
+func verifyDuration(t *testing.T, m pmetric.Metric, durationSum float64) {
+ assert.Equal(t, pmetric.MetricTypeHistogram, m.Type())
+ dps := m.Histogram().DataPoints()
+ assert.Equal(t, 1, dps.Len())
+
+ dp := dps.At(0)
+ assert.Equal(t, durationSum, dp.Sum()) // Duration: 1sec
+ assert.Equal(t, uint64(1), dp.Count())
+ buckets := pcommon.NewUInt64Slice()
+ buckets.FromRaw([]uint64{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0})
+ assert.Equal(t, buckets, dp.BucketCounts())
+
+ attributes := dp.Attributes()
+ assert.Equal(t, 5, attributes.Len())
+ verifyAttr(t, attributes, "client", "some-service")
+ verifyAttr(t, attributes, "server", "some-service")
+ verifyAttr(t, attributes, "connection_type", "")
+ verifyAttr(t, attributes, "client_some-attribute", "val")
+}
+
+func verifyAttr(t *testing.T, attrs pcommon.Map, k, expected string) {
+ v, ok := attrs.Get(k)
+ assert.True(t, ok)
+ assert.Equal(t, expected, v.AsString())
+}
+
+func buildSampleTrace(t *testing.T, attrValue string) ptrace.Traces {
+ tStart := time.Date(2022, 1, 2, 3, 4, 5, 6, time.UTC)
+ tEnd := time.Date(2022, 1, 2, 3, 4, 6, 6, time.UTC)
+
+ traces := ptrace.NewTraces()
+
+ resourceSpans := traces.ResourceSpans().AppendEmpty()
+ resourceSpans.Resource().Attributes().PutStr(semconv.AttributeServiceName, "some-service")
+
+ scopeSpans := resourceSpans.ScopeSpans().AppendEmpty()
+
+ var traceID pcommon.TraceID
+ _, err := rand.Read(traceID[:])
+ assert.NoError(t, err)
+
+ var clientSpanID, serverSpanID pcommon.SpanID
+ _, err = rand.Read(clientSpanID[:])
+ assert.NoError(t, err)
+ _, err = rand.Read(serverSpanID[:])
+ assert.NoError(t, err)
+
+ clientSpan := scopeSpans.Spans().AppendEmpty()
+ clientSpan.SetName("client span")
+ clientSpan.SetSpanID(clientSpanID)
+ clientSpan.SetTraceID(traceID)
+ clientSpan.SetKind(ptrace.SpanKindClient)
+ clientSpan.SetStartTimestamp(pcommon.NewTimestampFromTime(tStart))
+ clientSpan.SetEndTimestamp(pcommon.NewTimestampFromTime(tEnd))
+ clientSpan.Attributes().PutStr("some-attribute", attrValue) // Attribute selected as dimension for metrics
+
+ serverSpan := scopeSpans.Spans().AppendEmpty()
+ serverSpan.SetName("server span")
+ serverSpan.SetSpanID(serverSpanID)
+ serverSpan.SetTraceID(traceID)
+ serverSpan.SetParentSpanID(clientSpanID)
+ serverSpan.SetKind(ptrace.SpanKindServer)
+ serverSpan.SetStartTimestamp(pcommon.NewTimestampFromTime(tStart))
+ serverSpan.SetEndTimestamp(pcommon.NewTimestampFromTime(tEnd))
+
+ return traces
+}
+
+type mockHost struct {
+ component.Host
+ exps map[component.DataType]map[component.ID]component.Component
+}
+
+func newMockHost(exps map[component.DataType]map[component.ID]component.Component) component.Host {
+ return &mockHost{
+ Host: componenttest.NewNopHost(),
+ exps: exps,
+ }
+}
+
+func (m *mockHost) GetExporters() map[component.DataType]map[component.ID]component.Component {
+ return m.exps
+}
+
+var _ exporter.Metrics = (*mockMetricsExporter)(nil)
+
+func newMockMetricsExporter() *mockMetricsExporter {
+ return &mockMetricsExporter{}
+}
+
+type mockMetricsExporter struct {
+ mtx sync.Mutex
+ md []pmetric.Metrics
+}
+
+func (m *mockMetricsExporter) Start(context.Context, component.Host) error { return nil }
+
+func (m *mockMetricsExporter) Shutdown(context.Context) error { return nil }
+
+func (m *mockMetricsExporter) Capabilities() consumer.Capabilities { return consumer.Capabilities{} }
+
+func (m *mockMetricsExporter) ConsumeMetrics(_ context.Context, md pmetric.Metrics) error {
+ m.mtx.Lock()
+ defer m.mtx.Unlock()
+ m.md = append(m.md, md)
+ return nil
+}
+
+func TestUpdateDurationMetrics(t *testing.T) {
+ p := serviceGraphConnector{
+ reqTotal: make(map[string]int64),
+ reqFailedTotal: make(map[string]int64),
+ reqServerDurationSecondsSum: make(map[string]float64),
+ reqServerDurationSecondsCount: make(map[string]uint64),
+ reqServerDurationSecondsBucketCounts: make(map[string][]uint64),
+ reqClientDurationSecondsSum: make(map[string]float64),
+ reqClientDurationSecondsCount: make(map[string]uint64),
+ reqClientDurationSecondsBucketCounts: make(map[string][]uint64),
+ reqDurationBounds: defaultLatencyHistogramBuckets,
+ keyToMetric: make(map[string]metricSeries),
+ config: &Config{
+ Dimensions: []string{},
+ },
+ }
+ metricKey := p.buildMetricKey("foo", "bar", "", map[string]string{})
+
+ testCases := []struct {
+ caseStr string
+ duration float64
+ }{
+
+ {
+ caseStr: "index 0 latency",
+ duration: 0,
+ },
+ {
+ caseStr: "out-of-range latency 1",
+ duration: 25_000,
+ },
+ {
+ caseStr: "out-of-range latency 2",
+ duration: 125_000,
+ },
+ }
+ for _, tc := range testCases {
+ t.Run(tc.caseStr, func(_ *testing.T) {
+ p.updateDurationMetrics(metricKey, tc.duration, tc.duration)
+ })
+ }
+}
+
+func TestStaleSeriesCleanup(t *testing.T) {
+ // Prepare
+ cfg := &Config{
+ MetricsExporter: "mock",
+ Dimensions: []string{"some-attribute", "non-existing-attribute"},
+ Store: StoreConfig{
+ MaxItems: 10,
+ TTL: time.Second,
+ },
+ }
+
+ mockMetricsExporter := newMockMetricsExporter()
+
+ set := componenttest.NewNopTelemetrySettings()
+ set.Logger = zaptest.NewLogger(t)
+ p := newConnector(set, cfg)
+
+ mHost := newMockHost(map[component.DataType]map[component.ID]component.Component{
+ component.DataTypeMetrics: {
+ component.MustNewID("mock"): mockMetricsExporter,
+ },
+ })
+
+ assert.NoError(t, p.Start(context.Background(), mHost))
+
+ // ConsumeTraces
+ td := buildSampleTrace(t, "first")
+ assert.NoError(t, p.ConsumeTraces(context.Background(), td))
+
+ // Make series stale and force a cache cleanup
+ for key, metric := range p.keyToMetric {
+ metric.lastUpdated = 0
+ p.keyToMetric[key] = metric
+ }
+ p.cleanCache()
+ assert.Equal(t, 0, len(p.keyToMetric))
+
+ // ConsumeTraces with a trace with different attribute value
+ td = buildSampleTrace(t, "second")
+ assert.NoError(t, p.ConsumeTraces(context.Background(), td))
+
+ // Shutdown the connector
+ assert.NoError(t, p.Shutdown(context.Background()))
+}
+
+func TestMapsAreConsistentDuringCleanup(t *testing.T) {
+ // Prepare
+ cfg := &Config{
+ MetricsExporter: "mock",
+ Dimensions: []string{"some-attribute", "non-existing-attribute"},
+ Store: StoreConfig{
+ MaxItems: 10,
+ TTL: time.Second,
+ },
+ }
+
+ mockMetricsExporter := newMockMetricsExporter()
+
+ set := componenttest.NewNopTelemetrySettings()
+ set.Logger = zaptest.NewLogger(t)
+ p := newConnector(set, cfg)
+
+ mHost := newMockHost(map[component.DataType]map[component.ID]component.Component{
+ component.DataTypeMetrics: {
+ component.MustNewID("mock"): mockMetricsExporter,
+ },
+ })
+
+ assert.NoError(t, p.Start(context.Background(), mHost))
+
+ // ConsumeTraces
+ td := buildSampleTrace(t, "first")
+ assert.NoError(t, p.ConsumeTraces(context.Background(), td))
+
+ // Make series stale and force a cache cleanup
+ for key, metric := range p.keyToMetric {
+ metric.lastUpdated = 0
+ p.keyToMetric[key] = metric
+ }
+
+ // Start cleanup, but use locks to pretend that we are:
+ // - currently collecting metrics (so seriesMutex is locked)
+ // - currently getting dimensions for that series (so metricMutex is locked)
+ p.seriesMutex.Lock()
+ p.metricMutex.RLock()
+ go p.cleanCache()
+
+ // Since everything is locked, nothing has happened, so both should still have length 1
+ assert.Equal(t, 1, len(p.reqTotal))
+ assert.Equal(t, 1, len(p.keyToMetric))
+
+ // Now we pretend that we have stopped collecting metrics, by unlocking seriesMutex
+ p.seriesMutex.Unlock()
+
+ // Make sure cleanupCache has continued to the next mutex
+ time.Sleep(time.Millisecond)
+ p.seriesMutex.Lock()
+
+ // The expired series should have been removed. The metrics collector now won't look
+ // for dimensions from that series. It's important that it happens this way around,
+ // instead of deleting it from `keyToMetric`, otherwise the metrics collector will try
+ // and fail to find dimensions for a series that is about to be removed.
+ assert.Equal(t, 0, len(p.reqTotal))
+ assert.Equal(t, 1, len(p.keyToMetric))
+
+ p.metricMutex.RUnlock()
+ p.seriesMutex.Unlock()
+
+ // Shutdown the connector
+ assert.NoError(t, p.Shutdown(context.Background()))
+}
+
+func setupTelemetry(reader *sdkmetric.ManualReader) component.TelemetrySettings {
+ settings := componenttest.NewNopTelemetrySettings()
+ settings.MetricsLevel = configtelemetry.LevelNormal
+
+ settings.MeterProvider = sdkmetric.NewMeterProvider(sdkmetric.WithReader(reader))
+ return settings
+}
+
+func TestValidateOwnTelemetry(t *testing.T) {
+ cfg := &Config{
+ MetricsExporter: "mock",
+ Dimensions: []string{"some-attribute", "non-existing-attribute"},
+ Store: StoreConfig{
+ MaxItems: 10,
+ TTL: time.Second,
+ },
+ }
+
+ mockMetricsExporter := newMockMetricsExporter()
+
+ reader := sdkmetric.NewManualReader()
+ set := setupTelemetry(reader)
+ p := newConnector(set, cfg)
+
+ mHost := newMockHost(map[component.DataType]map[component.ID]component.Component{
+ component.DataTypeMetrics: {
+ component.MustNewID("mock"): mockMetricsExporter,
+ },
+ })
+
+ assert.NoError(t, p.Start(context.Background(), mHost))
+
+ // ConsumeTraces
+ td := buildSampleTrace(t, "first")
+ assert.NoError(t, p.ConsumeTraces(context.Background(), td))
+
+ // Make series stale and force a cache cleanup
+ for key, metric := range p.keyToMetric {
+ metric.lastUpdated = 0
+ p.keyToMetric[key] = metric
+ }
+ p.cleanCache()
+ assert.Equal(t, 0, len(p.keyToMetric))
+
+ // ConsumeTraces with a trace with different attribute value
+ td = buildSampleTrace(t, "second")
+ assert.NoError(t, p.ConsumeTraces(context.Background(), td))
+
+ // Shutdown the connector
+ assert.NoError(t, p.Shutdown(context.Background()))
+
+ rm := metricdata.ResourceMetrics{}
+ assert.NoError(t, reader.Collect(context.Background(), &rm))
+ require.Len(t, rm.ScopeMetrics, 1)
+ sm := rm.ScopeMetrics[0]
+ require.Len(t, sm.Metrics, 1)
+ got := sm.Metrics[0]
+ want := metricdata.Metrics{
+ Name: "connector/servicegraph/total_edges",
+ Description: "Total number of unique edges",
+ Unit: "1",
+ Data: metricdata.Sum[int64]{
+ Temporality: metricdata.CumulativeTemporality,
+ IsMonotonic: true,
+ DataPoints: []metricdata.DataPoint[int64]{
+ {Value: 2},
+ },
+ },
+ }
+ metricdatatest.AssertEqual(t, want, got, metricdatatest.IgnoreTimestamp())
+}
diff --git a/connector/servicegraphconnector/factory.go b/connector/servicegraphconnector/factory.go
index 4731aa09e3af..daec2316c71c 100644
--- a/connector/servicegraphconnector/factory.go
+++ b/connector/servicegraphconnector/factory.go
@@ -6,8 +6,71 @@
package servicegraphconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector"
import (
+ "context"
+ "time"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/featuregate"
+
"github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector/internal/metadata"
- "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor"
)
-var NewFactory = servicegraphprocessor.NewConnectorFactoryFunc(metadata.Type, metadata.TracesToMetricsStability)
+const (
+ // The stability level of the processor.
+ connectorStability = component.StabilityLevelDevelopment
+ virtualNodeFeatureGateID = "connector.servicegraph.virtualNode"
+ legacyLatencyMetricNamesFeatureGateID = "connector.servicegraph.legacyLatencyMetricNames"
+ legacyLatencyUnitMs = "connector.servicegraph.legacyLatencyUnitMs"
+)
+
+var virtualNodeFeatureGate, legacyMetricNamesFeatureGate, legacyLatencyUnitMsFeatureGate *featuregate.Gate
+
+func init() {
+ virtualNodeFeatureGate = featuregate.GlobalRegistry().MustRegister(
+ virtualNodeFeatureGateID,
+ featuregate.StageAlpha,
+ featuregate.WithRegisterDescription("When enabled, when the edge expires, processor checks if it has peer attributes(`db.name, net.sock.peer.addr, net.peer.name, rpc.service, http.url, http.target`), and then aggregate the metrics with virtual node."),
+ featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/17196"),
+ )
+ // TODO: Remove this feature gate when the legacy metric names are removed.
+ legacyMetricNamesFeatureGate = featuregate.GlobalRegistry().MustRegister(
+ legacyLatencyMetricNamesFeatureGateID,
+ featuregate.StageAlpha, // Alpha because we want it disabled by default.
+ featuregate.WithRegisterDescription("When enabled, processor uses legacy latency metric names."),
+ featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/18743,https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/16578"),
+ )
+ legacyLatencyUnitMsFeatureGate = featuregate.GlobalRegistry().MustRegister(
+ legacyLatencyUnitMs,
+ featuregate.StageAlpha, // Alpha because we want it disabled by default.
+ featuregate.WithRegisterDescription("When enabled, processor reports latency in milliseconds, instead of seconds."),
+ featuregate.WithRegisterReferenceURL("https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/27488"),
+ )
+}
+
+// NewFactory returns a ConnectorFactory.
+func NewFactory() connector.Factory {
+ return connector.NewFactory(
+ metadata.Type,
+ createDefaultConfig,
+ connector.WithTracesToMetrics(createTracesToMetricsConnector, metadata.TracesToMetricsStability),
+ )
+}
+
+func createDefaultConfig() component.Config {
+ return &Config{
+ Store: StoreConfig{
+ TTL: 2 * time.Second,
+ MaxItems: 1000,
+ },
+ CacheLoop: time.Minute,
+ StoreExpirationLoop: 2 * time.Second,
+ }
+}
+
+func createTracesToMetricsConnector(_ context.Context, params connector.CreateSettings, cfg component.Config, nextConsumer consumer.Metrics) (connector.Traces, error) {
+ c := newConnector(params.TelemetrySettings, cfg)
+ c.metricsConsumer = nextConsumer
+ return c, nil
+}
diff --git a/connector/servicegraphconnector/factory_test.go b/connector/servicegraphconnector/factory_test.go
index 44e83a7aa555..f8dd64bd766d 100644
--- a/connector/servicegraphconnector/factory_test.go
+++ b/connector/servicegraphconnector/factory_test.go
@@ -6,23 +6,51 @@ package servicegraphconnector // import "github.com/open-telemetry/opentelemetry
import (
"context"
"testing"
+ "time"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/connector/connectortest"
"go.opentelemetry.io/collector/consumer/consumertest"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor"
)
-func TestNewFactory(t *testing.T) {
- factory := NewFactory()
- conn, err := factory.CreateTracesToMetrics(
- context.Background(),
- connectortest.NewNopCreateSettings(),
- &servicegraphprocessor.Config{},
- consumertest.NewNop(),
- )
-
- assert.NoError(t, err)
- assert.NotNil(t, conn)
+func TestNewConnector(t *testing.T) {
+ for _, tc := range []struct {
+ name string
+ latencyHistogramBuckets []time.Duration
+ expectedLatencyHistogramBuckets []float64
+ }{
+ {
+ name: "simplest config (use defaults)",
+ expectedLatencyHistogramBuckets: defaultLatencyHistogramBuckets,
+ },
+ {
+ name: "latency histogram configured with catch-all bucket to check no additional catch-all bucket inserted",
+ latencyHistogramBuckets: []time.Duration{2 * time.Millisecond},
+ expectedLatencyHistogramBuckets: []float64{0.002},
+ },
+ {
+ name: "full config with no catch-all bucket and check the catch-all bucket is inserted",
+ latencyHistogramBuckets: []time.Duration{2 * time.Millisecond},
+ expectedLatencyHistogramBuckets: []float64{0.002},
+ },
+ } {
+ t.Run(tc.name, func(t *testing.T) {
+ // Prepare
+ factory := NewFactory()
+
+ creationParams := connectortest.NewNopCreateSettings()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.LatencyHistogramBuckets = tc.latencyHistogramBuckets
+
+ // Test
+ conn, err := factory.CreateTracesToMetrics(context.Background(), creationParams, cfg, consumertest.NewNop())
+ smc := conn.(*serviceGraphConnector)
+
+ // Verify
+ assert.NoError(t, err)
+ assert.NotNil(t, smc)
+
+ assert.Equal(t, tc.expectedLatencyHistogramBuckets, smc.reqDurationBounds)
+ })
+ }
}
diff --git a/connector/servicegraphconnector/generated_component_test.go b/connector/servicegraphconnector/generated_component_test.go
new file mode 100644
index 000000000000..773a46625861
--- /dev/null
+++ b/connector/servicegraphconnector/generated_component_test.go
@@ -0,0 +1,61 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package servicegraphconnector
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ firstConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ require.NoError(t, err)
+ require.NoError(t, firstConnector.Start(context.Background(), host))
+ require.NoError(t, firstConnector.Shutdown(context.Background()))
+ secondConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ require.NoError(t, secondConnector.Start(context.Background(), host))
+ require.NoError(t, secondConnector.Shutdown(context.Background()))
+ })
+ }
+}
diff --git a/connector/servicegraphconnector/go.mod b/connector/servicegraphconnector/go.mod
index 510d8b39e5e7..f3f8c30ce447 100644
--- a/connector/servicegraphconnector/go.mod
+++ b/connector/servicegraphconnector/go.mod
@@ -1,50 +1,100 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector
-go 1.18
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/featuregate v1.5.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/processor v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/sdk/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/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/knadh/koanf/v2 v2.1.1 // indirect
+ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
+ github.com/shoenig/go-m1cpu v0.1.6 // indirect
+ github.com/spf13/cobra v1.8.0 // indirect
+ github.com/spf13/pflag v1.0.5 // indirect
+ github.com/tklauser/go-sysconf v0.3.12 // indirect
+ github.com/tklauser/numcpus v0.6.1 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/confmap v0.89.0 // indirect
- go.opentelemetry.io/collector/exporter v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/processor v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
@@ -53,5 +103,3 @@ retract (
v0.76.1
v0.65.0
)
-
-replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor => ../../processor/servicegraphprocessor/
diff --git a/connector/servicegraphconnector/go.sum b/connector/servicegraphconnector/go.sum
index d180ff096b43..90522d37454d 100644
--- a/connector/servicegraphconnector/go.sum
+++ b/connector/servicegraphconnector/go.sum
@@ -1,12 +1,15 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -14,17 +17,21 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -35,44 +42,44 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
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/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -80,101 +87,151 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/shirou/gopsutil/v3 v3.23.10 h1:/N42opWlYzegYaVkWejXWJpbzKv2JDy3mrgGzKsh9hM=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
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/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
+github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
+github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
+github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
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.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/configcompression v0.89.0 h1:Z4LG045HwoNqXaibVbAQkcAQGmvY4OHrY4eCppoAzoQ=
-go.opentelemetry.io/collector/config/configgrpc v0.89.0 h1:Lnv/4EbImss5JuVE2nffk00pCGfk4tRyV8Gm3Gl7yuM=
-go.opentelemetry.io/collector/config/confignet v0.89.0 h1:Ekh+XhXelnnJ9as8IWhdUOfjnDPhz12XMJQ8sWNAbGw=
-go.opentelemetry.io/collector/config/configopaque v0.89.0 h1:Ad6yGcGBHs+J9SNjkedY68JsLZ1vBn4kKzdqKuTCRsE=
-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/internal v0.89.0 h1:fs7LJTJd1EF76pjK7ZZZMWNxze0+pDXq3mfRwhm0P0g=
-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/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/otlpexporter v0.89.0 h1:0oYIeiRTURjIIYXs1OsaMAyNgg6Vc/CNa882YCYS/04=
-go.opentelemetry.io/collector/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension/auth v0.89.0 h1:eo9JoWklZdSManEPLm1LqlwEq5v/YIsOupjZHdRYm3I=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-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/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/propagators/b3 v1.20.0 h1:Yty9Vs4F3D6/liF1o6FNt0PvN85h/BJJ6DQKJ3nrcM0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/bridge/opencensus v0.43.0 h1:E/sf+2slCUb7wqh5FHwhdwKWTA+VXyMMAcFNlKVf4yw=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0 h1:tFUz2BE6ucxU9PuPCwzbfDeQjMznIySJ4/73a3FSPUs=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.43.0 h1:2oKqGjXdi5iDIUXFbBbLthG2LMeYlxcdxVmLim1e9qg=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.43.0 h1:vcSjcjn/BTeM6abI5CDymZdtd1m24quD1Mx4VE3N3fM=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
@@ -189,8 +246,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
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=
@@ -200,9 +257,14 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+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.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -219,23 +281,26 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -245,13 +310,11 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/connector/servicegraphconnector/internal/metadata/generated_status.go b/connector/servicegraphconnector/internal/metadata/generated_status.go
index 4c38438390fe..3a35891d36ff 100644
--- a/connector/servicegraphconnector/internal/metadata/generated_status.go
+++ b/connector/servicegraphconnector/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("servicegraph")
)
const (
- Type = "servicegraph"
TracesToMetricsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/servicegraph")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/servicegraph")
+}
diff --git a/processor/servicegraphprocessor/internal/store/edge.go b/connector/servicegraphconnector/internal/store/edge.go
similarity index 96%
rename from processor/servicegraphprocessor/internal/store/edge.go
rename to connector/servicegraphconnector/internal/store/edge.go
index a1cd307e0133..456a9b6d1f72 100644
--- a/processor/servicegraphprocessor/internal/store/edge.go
+++ b/connector/servicegraphconnector/internal/store/edge.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-package store // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor/internal/store"
+package store // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector/internal/store"
import (
"time"
diff --git a/connector/servicegraphconnector/internal/store/package_test.go b/connector/servicegraphconnector/internal/store/package_test.go
new file mode 100644
index 000000000000..852a149af742
--- /dev/null
+++ b/connector/servicegraphconnector/internal/store/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package store
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/processor/servicegraphprocessor/internal/store/store.go b/connector/servicegraphconnector/internal/store/store.go
similarity index 97%
rename from processor/servicegraphprocessor/internal/store/store.go
rename to connector/servicegraphconnector/internal/store/store.go
index 028116428b31..c2c4fee7a389 100644
--- a/processor/servicegraphprocessor/internal/store/store.go
+++ b/connector/servicegraphconnector/internal/store/store.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-package store // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor/internal/store"
+package store // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector/internal/store"
import (
"container/list"
diff --git a/processor/servicegraphprocessor/internal/store/store_test.go b/connector/servicegraphconnector/internal/store/store_test.go
similarity index 96%
rename from processor/servicegraphprocessor/internal/store/store_test.go
rename to connector/servicegraphconnector/internal/store/store_test.go
index aae86b500486..df9f9acec943 100644
--- a/processor/servicegraphprocessor/internal/store/store_test.go
+++ b/connector/servicegraphconnector/internal/store/store_test.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-package store // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor/internal/store"
+package store
import (
"encoding/hex"
diff --git a/connector/servicegraphconnector/metadata.yaml b/connector/servicegraphconnector/metadata.yaml
index b6475ebc66cb..e06f036ece4a 100644
--- a/connector/servicegraphconnector/metadata.yaml
+++ b/connector/servicegraphconnector/metadata.yaml
@@ -1,9 +1,13 @@
type: servicegraph
+scope_name: otelcol/servicegraph
status:
class: connector
stability:
alpha: [traces_to_metrics]
- distributions: [contrib, sumo, grafana]
+ distributions: [contrib]
codeowners:
active: [jpkrohling, mapno]
+
+tests:
+ config:
diff --git a/connector/servicegraphconnector/package_test.go b/connector/servicegraphconnector/package_test.go
new file mode 100644
index 000000000000..79216a2f631a
--- /dev/null
+++ b/connector/servicegraphconnector/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package servicegraphconnector
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/processor/servicegraphprocessor/testdata/service-graph-connector-config.yaml b/connector/servicegraphconnector/testdata/service-graph-connector-config.yaml
similarity index 90%
rename from processor/servicegraphprocessor/testdata/service-graph-connector-config.yaml
rename to connector/servicegraphconnector/testdata/service-graph-connector-config.yaml
index 6ba8ca594b45..fa44050cef3b 100644
--- a/processor/servicegraphprocessor/testdata/service-graph-connector-config.yaml
+++ b/connector/servicegraphconnector/testdata/service-graph-connector-config.yaml
@@ -13,6 +13,7 @@ connectors:
store:
ttl: 1s
max_items: 10
+ database_name_attribute: db.name
service:
pipelines:
diff --git a/processor/servicegraphprocessor/util.go b/connector/servicegraphconnector/util.go
similarity index 80%
rename from processor/servicegraphprocessor/util.go
rename to connector/servicegraphconnector/util.go
index b7f39899a732..fc447e9546de 100644
--- a/processor/servicegraphprocessor/util.go
+++ b/connector/servicegraphconnector/util.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-package servicegraphprocessor // import "github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor"
+package servicegraphconnector // import "github.com/open-telemetry/opentelemetry-collector-contrib/connector/servicegraphconnector"
import (
"go.opentelemetry.io/collector/pdata/pcommon"
diff --git a/connector/spanmetricsconnector/README.md b/connector/spanmetricsconnector/README.md
index c81086f9c9b8..51ac04d98c89 100644
--- a/connector/spanmetricsconnector/README.md
+++ b/connector/spanmetricsconnector/README.md
@@ -3,14 +3,13 @@
| Status | |
| ------------- |-----------|
-| Distributions | [contrib], [grafana], [sumo] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aconnector%2Fspanmetrics%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aconnector%2Fspanmetrics) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aconnector%2Fspanmetrics%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aconnector%2Fspanmetrics) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@albertteoh](https://www.github.com/albertteoh) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@portertech](https://www.github.com/portertech), [@Frapschen](https://www.github.com/Frapschen) \| Seeking more code owners! |
+| Emeritus | [@albertteoh](https://www.github.com/albertteoh) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[grafana]: https://github.com/grafana/agent
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
## Supported Pipeline Types
@@ -31,11 +30,23 @@ Aggregates Request, Error and Duration (R.E.D) OpenTelemetry metrics from span d
dimensions, including Errors. Multiple metrics can be aggregated if, for instance,
a user wishes to view call counts just on `service.name` and `span.name`.
+```
+calls{service.name="shipping",span.name="get_shipping/{shippingId}",span.kind="SERVER",status.code="Ok"}
+```
+
**Error** counts are computed from the Request counts which have an `Error` Status Code metric dimension.
+```
+calls{service.name="shipping",span.name="get_shipping/{shippingId},span.kind="SERVER",status.code="Error"}
+```
+
**Duration** is computed from the difference between the span start and end times and inserted into the
relevant duration histogram time bucket for each unique set dimensions.
+```
+duration{service.name="shipping",span.name="get_shipping/{shippingId}",span.kind="SERVER",status.code="Ok"}
+```
+
Each metric will have _at least_ the following dimensions because they are common
across all spans:
@@ -47,7 +58,7 @@ across all spans:
## Span to Metrics processor to Span to metrics connector
-The spanmetrics connector is a port of the [spanmetrics](../../processor/spanmetricsprocessor/README.md) processor, but with multiple improvements
+The spanmetrics connector is a port of the [spanmetrics](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/processor/spanmetricsprocessor/v0.95.0/processor/spanmetricsprocessor/README.md) processor, but with multiple improvements
and breaking changes. It was done to bring the `spanmetrics` connector closer to the OpenTelemetry
specification and make the component agnostic to exporters logic. The `spanmetrics` processor
essentially was mixing the OTel with Prometheus conventions by using the OTel data model and
@@ -96,15 +107,19 @@ The following settings can be optionally configured:
If no `default` is provided, this dimension will be **omitted** from the metric.
- `exclude_dimensions`: the list of dimensions to be excluded from the default set of dimensions. Use to exclude unneeded data from metrics.
- `dimensions_cache_size` (default: `1000`): the size of cache for storing Dimensions to improve collectors memory usage. Must be a positive number.
+- `resource_metrics_cache_size` (default: `1000`): the size of the cache holding metrics for a service. This is mostly relevant for
+ cumulative temporality to avoid memory leaks and correct metric timestamp resets.
- `aggregation_temporality` (default: `AGGREGATION_TEMPORALITY_CUMULATIVE`): Defines the aggregation temporality of the generated metrics.
One of either `AGGREGATION_TEMPORALITY_CUMULATIVE` or `AGGREGATION_TEMPORALITY_DELTA`.
- `namespace`: Defines the namespace of the generated metrics. If `namespace` provided, generated metric name will be added `namespace.` prefix.
-- `metrics_flush_interval` (default: `15s`): Defines the flush interval of the generated metrics.
+- `metrics_flush_interval` (default: `60s`): Defines the flush interval of the generated metrics.
+- `metrics_expiration` (default: `0`): Defines the expiration time as `time.Duration`, after which, if no new spans are received, metrics will no longer be exported. Setting to `0` means the metrics will never expire (default behavior).
- `exemplars`: Use to configure how to attach exemplars to histograms
- `enabled` (default: `false`): enabling will add spans as Exemplars.
- `events`: Use to configure the events metric.
- `enabled`: (default: `false`): enabling will add the events metric.
- `dimensions`: (mandatory if `enabled`) the list of the span's event attributes to add as dimensions to the events metric, which will be included _on top of_ the common and configured `dimensions` for span and resource attributes.
+- `resource_metrics_key_attributes`: Filter the resource attributes used to produce the resource metrics key map hash. Use this in case changing resource attributes (e.g. process id) are breaking counter metrics.
## Examples
@@ -136,11 +151,16 @@ connectors:
dimensions_cache_size: 1000
aggregation_temporality: "AGGREGATION_TEMPORALITY_CUMULATIVE"
metrics_flush_interval: 15s
+ metrics_expiration: 5m
events:
enabled: true
dimensions:
- name: exception.type
- name: exception.message
+ resource_metrics_key_attributes:
+ - service.name
+ - telemetry.sdk.language
+ - telemetry.sdk.name
service:
pipelines:
diff --git a/connector/spanmetricsconnector/config.go b/connector/spanmetricsconnector/config.go
index 26d36d785c60..c379a2c38fd9 100644
--- a/connector/spanmetricsconnector/config.go
+++ b/connector/spanmetricsconnector/config.go
@@ -46,6 +46,20 @@ type Config struct {
// Optional. See defaultDimensionsCacheSize in connector.go for the default value.
DimensionsCacheSize int `mapstructure:"dimensions_cache_size"`
+ // ResourceMetricsCacheSize defines the size of the cache holding metrics for a service. This is mostly relevant for
+ // cumulative temporality to avoid memory leaks and correct metric timestamp resets.
+ // Optional. See defaultResourceMetricsCacheSize in connector.go for the default value.
+ ResourceMetricsCacheSize int `mapstructure:"resource_metrics_cache_size"`
+
+ // ResourceMetricsKeyAttributes filters the resource attributes used to create the resource metrics key hash.
+ // This can be used to avoid situations where resource attributes may change across service restarts, causing
+ // metric counters to break (and duplicate). A resource does not need to have all of the attributes. The list
+ // must include enough attributes to properly identify unique resources or risk aggregating data from more
+ // than one service and span.
+ // e.g. ["service.name", "telemetry.sdk.language", "telemetry.sdk.name"]
+ // See https://opentelemetry.io/docs/specs/semconv/resource/ for possible attributes.
+ ResourceMetricsKeyAttributes []string `mapstructure:"resource_metrics_key_attributes"`
+
AggregationTemporality string `mapstructure:"aggregation_temporality"`
Histogram HistogramConfig `mapstructure:"histogram"`
@@ -53,6 +67,10 @@ type Config struct {
// MetricsEmitInterval is the time period between when metrics are flushed or emitted to the configured MetricsExporter.
MetricsFlushInterval time.Duration `mapstructure:"metrics_flush_interval"`
+ // MetricsExpiration is the time period after which, if no new spans are received, metrics are considered stale and will no longer be exported.
+ // Default value (0) means that the metrics will never expire.
+ MetricsExpiration time.Duration `mapstructure:"metrics_expiration"`
+
// Namespace is the namespace of the metrics emitted by the connector.
Namespace string `mapstructure:"namespace"`
@@ -71,7 +89,8 @@ type HistogramConfig struct {
}
type ExemplarsConfig struct {
- Enabled bool `mapstructure:"enabled"`
+ Enabled bool `mapstructure:"enabled"`
+ MaxPerDataPoint *int `mapstructure:"max_per_data_point"`
}
type ExponentialHistogramConfig struct {
@@ -112,6 +131,14 @@ func (c Config) Validate() error {
return errors.New("use either `explicit` or `exponential` buckets histogram")
}
+ if c.MetricsFlushInterval < 0 {
+ return fmt.Errorf("invalid metrics_flush_interval: %v, the duration should be positive", c.MetricsFlushInterval)
+ }
+
+ if c.MetricsExpiration < 0 {
+ return fmt.Errorf("invalid metrics_expiration: %v, the duration should be positive", c.MetricsExpiration)
+ }
+
return nil
}
diff --git a/connector/spanmetricsconnector/config_test.go b/connector/spanmetricsconnector/config_test.go
index 2530c481d27b..da235794f3cb 100644
--- a/connector/spanmetricsconnector/config_test.go
+++ b/connector/spanmetricsconnector/config_test.go
@@ -26,6 +26,7 @@ func TestLoadConfig(t *testing.T) {
require.NoError(t, err)
defaultMethod := "GET"
+ defaultMaxPerDatapoint := 5
tests := []struct {
id component.ID
expected component.Config
@@ -47,8 +48,9 @@ func TestLoadConfig(t *testing.T) {
{Name: "http.method", Default: &defaultMethod},
{Name: "http.status_code", Default: (*string)(nil)},
},
- DimensionsCacheSize: 1500,
- MetricsFlushInterval: 30 * time.Second,
+ DimensionsCacheSize: 1500,
+ ResourceMetricsCacheSize: 1600,
+ MetricsFlushInterval: 30 * time.Second,
Exemplars: ExemplarsConfig{
Enabled: true,
},
@@ -66,9 +68,10 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "exponential_histogram"),
expected: &Config{
- AggregationTemporality: cumulative,
- DimensionsCacheSize: 1000,
- MetricsFlushInterval: 15 * time.Second,
+ AggregationTemporality: cumulative,
+ DimensionsCacheSize: defaultDimensionsCacheSize,
+ ResourceMetricsCacheSize: defaultResourceMetricsCacheSize,
+ MetricsFlushInterval: 60 * time.Second,
Histogram: HistogramConfig{
Unit: metrics.Milliseconds,
Exponential: &ExponentialHistogramConfig{
@@ -85,14 +88,41 @@ func TestLoadConfig(t *testing.T) {
id: component.NewIDWithName(metadata.Type, "invalid_histogram_unit"),
errorMessage: "unknown Unit \"h\"",
},
+ {
+ id: component.NewIDWithName(metadata.Type, "invalid_metrics_expiration"),
+ errorMessage: "the duration should be positive",
+ },
{
id: component.NewIDWithName(metadata.Type, "exemplars_enabled"),
expected: &Config{
- AggregationTemporality: "AGGREGATION_TEMPORALITY_CUMULATIVE",
- DimensionsCacheSize: defaultDimensionsCacheSize,
- MetricsFlushInterval: 15 * time.Second,
- Histogram: HistogramConfig{Disable: false, Unit: defaultUnit},
- Exemplars: ExemplarsConfig{Enabled: true},
+ AggregationTemporality: "AGGREGATION_TEMPORALITY_CUMULATIVE",
+ DimensionsCacheSize: defaultDimensionsCacheSize,
+ ResourceMetricsCacheSize: defaultResourceMetricsCacheSize,
+ MetricsFlushInterval: 60 * time.Second,
+ Histogram: HistogramConfig{Disable: false, Unit: defaultUnit},
+ Exemplars: ExemplarsConfig{Enabled: true},
+ },
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "exemplars_enabled_with_max_per_datapoint"),
+ expected: &Config{
+ AggregationTemporality: "AGGREGATION_TEMPORALITY_CUMULATIVE",
+ DimensionsCacheSize: defaultDimensionsCacheSize,
+ ResourceMetricsCacheSize: defaultResourceMetricsCacheSize,
+ MetricsFlushInterval: 60 * time.Second,
+ Histogram: HistogramConfig{Disable: false, Unit: defaultUnit},
+ Exemplars: ExemplarsConfig{Enabled: true, MaxPerDataPoint: &defaultMaxPerDatapoint},
+ },
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "resource_metrics_key_attributes"),
+ expected: &Config{
+ AggregationTemporality: "AGGREGATION_TEMPORALITY_CUMULATIVE",
+ DimensionsCacheSize: defaultDimensionsCacheSize,
+ ResourceMetricsCacheSize: defaultResourceMetricsCacheSize,
+ ResourceMetricsKeyAttributes: []string{"service.name", "telemetry.sdk.language", "telemetry.sdk.name"},
+ MetricsFlushInterval: 60 * time.Second,
+ Histogram: HistogramConfig{Disable: false, Unit: defaultUnit},
},
},
}
diff --git a/connector/spanmetricsconnector/connector.go b/connector/spanmetricsconnector/connector.go
index 3832dca63997..702c1f7319b4 100644
--- a/connector/spanmetricsconnector/connector.go
+++ b/connector/spanmetricsconnector/connector.go
@@ -32,7 +32,8 @@ const (
statusCodeKey = "status.code" // OpenTelemetry non-standard constant.
metricKeySeparator = string(byte(0))
- defaultDimensionsCacheSize = 1000
+ defaultDimensionsCacheSize = 1000
+ defaultResourceMetricsCacheSize = 1000
metricNameDuration = "duration"
metricNameCalls = "calls"
@@ -51,10 +52,9 @@ type connectorImp struct {
// Additional dimensions to add to metrics.
dimensions []dimension
- // The starting time of the data points.
- startTimestamp pcommon.Timestamp
+ resourceMetrics *cache.Cache[resourceKey, *resourceMetrics]
- resourceMetrics map[resourceKey]*resourceMetrics
+ resourceMetricsKeyAttributes map[string]struct{}
keyBuf *bytes.Buffer
@@ -79,6 +79,10 @@ type resourceMetrics struct {
sums metrics.SumMetrics
events metrics.SumMetrics
attributes pcommon.Map
+ // startTimestamp captures when the first data points for this resource are recorded.
+ startTimestamp pcommon.Timestamp
+ // lastSeen captures when the last data points for this resource were recorded.
+ lastSeen time.Time
}
type dimension struct {
@@ -110,18 +114,29 @@ func newConnector(logger *zap.Logger, config component.Config, ticker *clock.Tic
return nil, err
}
+ resourceMetricsCache, err := cache.NewCache[resourceKey, *resourceMetrics](cfg.ResourceMetricsCacheSize)
+ if err != nil {
+ return nil, err
+ }
+
+ resourceMetricsKeyAttributes := make(map[string]struct{}, len(cfg.ResourceMetricsKeyAttributes))
+ var s struct{}
+ for _, attr := range cfg.ResourceMetricsKeyAttributes {
+ resourceMetricsKeyAttributes[attr] = s
+ }
+
return &connectorImp{
- logger: logger,
- config: *cfg,
- startTimestamp: pcommon.NewTimestampFromTime(time.Now()),
- resourceMetrics: make(map[resourceKey]*resourceMetrics),
- dimensions: newDimensions(cfg.Dimensions),
- keyBuf: bytes.NewBuffer(make([]byte, 0, 1024)),
- metricKeyToDimensions: metricKeyToDimensionsCache,
- ticker: ticker,
- done: make(chan struct{}),
- eDimensions: newDimensions(cfg.Events.Dimensions),
- events: cfg.Events,
+ logger: logger,
+ config: *cfg,
+ resourceMetrics: resourceMetricsCache,
+ resourceMetricsKeyAttributes: resourceMetricsKeyAttributes,
+ dimensions: newDimensions(cfg.Dimensions),
+ keyBuf: bytes.NewBuffer(make([]byte, 0, 1024)),
+ metricKeyToDimensions: metricKeyToDimensionsCache,
+ ticker: ticker,
+ done: make(chan struct{}),
+ eDimensions: newDimensions(cfg.Events.Dimensions),
+ events: cfg.Events,
}, nil
}
@@ -134,7 +149,7 @@ func initHistogramMetrics(cfg Config) metrics.HistogramMetrics {
if cfg.Histogram.Exponential.MaxSize != 0 {
maxSize = cfg.Histogram.Exponential.MaxSize
}
- return metrics.NewExponentialHistogramMetrics(maxSize)
+ return metrics.NewExponentialHistogramMetrics(maxSize, cfg.Exemplars.MaxPerDataPoint)
}
var bounds []float64
@@ -152,7 +167,7 @@ func initHistogramMetrics(cfg Config) metrics.HistogramMetrics {
}
}
- return metrics.NewExplicitHistogramMetrics(bounds)
+ return metrics.NewExplicitHistogramMetrics(bounds, cfg.Exemplars.MaxPerDataPoint)
}
// unitDivider returns a unit divider to convert nanoseconds to milliseconds or seconds.
@@ -236,7 +251,8 @@ func (p *connectorImp) exportMetrics(ctx context.Context) {
// buildMetrics collects the computed raw metrics data and builds OTLP metrics.
func (p *connectorImp) buildMetrics() pmetric.Metrics {
m := pmetric.NewMetrics()
- for _, rawMetrics := range p.resourceMetrics {
+
+ p.resourceMetrics.ForEach(func(_ resourceKey, rawMetrics *resourceMetrics) {
rm := m.ResourceMetrics().AppendEmpty()
rawMetrics.attributes.CopyTo(rm.Resource().Attributes())
@@ -246,22 +262,22 @@ func (p *connectorImp) buildMetrics() pmetric.Metrics {
sums := rawMetrics.sums
metric := sm.Metrics().AppendEmpty()
metric.SetName(buildMetricName(p.config.Namespace, metricNameCalls))
- sums.BuildMetrics(metric, p.startTimestamp, p.config.GetAggregationTemporality())
+ sums.BuildMetrics(metric, rawMetrics.startTimestamp, p.config.GetAggregationTemporality())
if !p.config.Histogram.Disable {
histograms := rawMetrics.histograms
metric = sm.Metrics().AppendEmpty()
metric.SetName(buildMetricName(p.config.Namespace, metricNameDuration))
metric.SetUnit(p.config.Histogram.Unit.String())
- histograms.BuildMetrics(metric, p.startTimestamp, p.config.GetAggregationTemporality())
+ histograms.BuildMetrics(metric, rawMetrics.startTimestamp, p.config.GetAggregationTemporality())
}
events := rawMetrics.events
if p.events.Enabled {
metric = sm.Metrics().AppendEmpty()
metric.SetName(buildMetricName(p.config.Namespace, metricNameEvents))
- events.BuildMetrics(metric, p.startTimestamp, p.config.GetAggregationTemporality())
+ events.BuildMetrics(metric, rawMetrics.startTimestamp, p.config.GetAggregationTemporality())
}
- }
+ })
return m
}
@@ -269,19 +285,32 @@ func (p *connectorImp) buildMetrics() pmetric.Metrics {
func (p *connectorImp) resetState() {
// If delta metrics, reset accumulated data
if p.config.GetAggregationTemporality() == pmetric.AggregationTemporalityDelta {
- p.resourceMetrics = make(map[resourceKey]*resourceMetrics)
+ p.resourceMetrics.Purge()
p.metricKeyToDimensions.Purge()
- p.startTimestamp = pcommon.NewTimestampFromTime(time.Now())
} else {
+ p.resourceMetrics.RemoveEvictedItems()
p.metricKeyToDimensions.RemoveEvictedItems()
- // Exemplars are only relevant to this batch of traces, so must be cleared within the lock
- if p.config.Histogram.Disable {
+ // If no histogram and no metrics expiration is configured, we can skip the remaining operations.
+ // Enabling either of these features requires to go over resource metrics and do operation on each.
+ if p.config.Histogram.Disable && p.config.MetricsExpiration == 0 {
return
}
- for _, m := range p.resourceMetrics {
- m.histograms.Reset(true)
- }
+
+ now := time.Now()
+ p.resourceMetrics.ForEach(func(k resourceKey, m *resourceMetrics) {
+ // Exemplars are only relevant to this batch of traces, so must be cleared within the lock
+ if !p.config.Histogram.Disable {
+ m.histograms.Reset(true)
+ }
+
+ // If metrics expiration is configured, remove metrics that haven't been seen for longer than the expiration period.
+ if p.config.MetricsExpiration > 0 {
+ if now.Sub(m.lastSeen) >= p.config.MetricsExpiration {
+ p.resourceMetrics.Remove(k)
+ }
+ }
+ })
}
}
@@ -361,6 +390,9 @@ func (p *connectorImp) aggregateMetrics(traces ptrace.Traces) {
p.metricKeyToDimensions.Add(eKey, eAttributes)
}
e := events.GetOrCreate(eKey, eAttributes)
+ if p.config.Exemplars.Enabled && !span.TraceID().IsEmpty() {
+ e.AddExemplar(span.TraceID(), span.SpanID(), duration)
+ }
e.Add(1)
}
}
@@ -382,18 +414,38 @@ func (p *connectorImp) addExemplar(span ptrace.Span, duration float64, h metrics
type resourceKey [16]byte
+func (p *connectorImp) createResourceKey(attr pcommon.Map) resourceKey {
+ if len(p.resourceMetricsKeyAttributes) == 0 {
+ return pdatautil.MapHash(attr)
+ }
+ m := pcommon.NewMap()
+ attr.CopyTo(m)
+ m.RemoveIf(func(k string, _ pcommon.Value) bool {
+ _, ok := p.resourceMetricsKeyAttributes[k]
+ return !ok
+ })
+ return pdatautil.MapHash(m)
+}
+
func (p *connectorImp) getOrCreateResourceMetrics(attr pcommon.Map) *resourceMetrics {
- key := resourceKey(pdatautil.MapHash(attr))
- v, ok := p.resourceMetrics[key]
+ key := p.createResourceKey(attr)
+ v, ok := p.resourceMetrics.Get(key)
if !ok {
v = &resourceMetrics{
- histograms: initHistogramMetrics(p.config),
- sums: metrics.NewSumMetrics(),
- events: metrics.NewSumMetrics(),
- attributes: attr,
+ histograms: initHistogramMetrics(p.config),
+ sums: metrics.NewSumMetrics(p.config.Exemplars.MaxPerDataPoint),
+ events: metrics.NewSumMetrics(p.config.Exemplars.MaxPerDataPoint),
+ attributes: attr,
+ startTimestamp: pcommon.NewTimestampFromTime(time.Now()),
}
- p.resourceMetrics[key] = v
+ p.resourceMetrics.Add(key, v)
}
+
+ // If expiration is enabled, track the last seen time.
+ if p.config.MetricsExpiration > 0 {
+ v.lastSeen = time.Now()
+ }
+
return v
}
diff --git a/connector/spanmetricsconnector/connector_test.go b/connector/spanmetricsconnector/connector_test.go
index c10078313795..669e14be02b2 100644
--- a/connector/spanmetricsconnector/connector_test.go
+++ b/connector/spanmetricsconnector/connector_test.go
@@ -32,18 +32,19 @@ import (
)
const (
- stringAttrName = "stringAttrName"
- intAttrName = "intAttrName"
- doubleAttrName = "doubleAttrName"
- boolAttrName = "boolAttrName"
- nullAttrName = "nullAttrName"
- mapAttrName = "mapAttrName"
- arrayAttrName = "arrayAttrName"
- notInSpanAttrName0 = "shouldBeInMetric"
- notInSpanAttrName1 = "shouldNotBeInMetric"
- regionResourceAttrName = "region"
- exceptionTypeAttrName = "exception.type"
- DimensionsCacheSize = 2
+ stringAttrName = "stringAttrName"
+ intAttrName = "intAttrName"
+ doubleAttrName = "doubleAttrName"
+ boolAttrName = "boolAttrName"
+ nullAttrName = "nullAttrName"
+ mapAttrName = "mapAttrName"
+ arrayAttrName = "arrayAttrName"
+ notInSpanAttrName0 = "shouldBeInMetric"
+ notInSpanAttrName1 = "shouldNotBeInMetric"
+ regionResourceAttrName = "region"
+ exceptionTypeAttrName = "exception.type"
+ dimensionsCacheSize = 2
+ resourceMetricsCacheSize = 5
sampleRegion = "us-east-1"
sampleDuration = float64(11)
@@ -413,6 +414,19 @@ func enabledExemplarsConfig() ExemplarsConfig {
}
}
+func enabledEventsConfig() EventsConfig {
+ return EventsConfig{
+ Enabled: true,
+ Dimensions: []Dimension{{Name: "exception.type"}},
+ }
+}
+
+func disabledEventsConfig() EventsConfig {
+ return EventsConfig{
+ Enabled: false,
+ }
+}
+
func explicitHistogramsConfig() HistogramConfig {
return HistogramConfig{
Unit: defaultUnit,
@@ -438,6 +452,50 @@ func disabledHistogramsConfig() HistogramConfig {
}
}
+func newConnectorImp(defaultNullValue *string, histogramConfig func() HistogramConfig, exemplarsConfig func() ExemplarsConfig, eventsConfig func() EventsConfig, temporality string, expiration time.Duration, resourceMetricsKeyAttributes []string, excludedDimensions ...string) (*connectorImp, *clock.Mock, error) {
+ cfg := &Config{
+ AggregationTemporality: temporality,
+ Histogram: histogramConfig(),
+ Exemplars: exemplarsConfig(),
+ ExcludeDimensions: excludedDimensions,
+ DimensionsCacheSize: dimensionsCacheSize,
+ ResourceMetricsCacheSize: resourceMetricsCacheSize,
+ ResourceMetricsKeyAttributes: resourceMetricsKeyAttributes,
+ Dimensions: []Dimension{
+ // Set nil defaults to force a lookup for the attribute in the span.
+ {stringAttrName, nil},
+ {intAttrName, nil},
+ {doubleAttrName, nil},
+ {boolAttrName, nil},
+ {mapAttrName, nil},
+ {arrayAttrName, nil},
+ {nullAttrName, defaultNullValue},
+ // Add a default value for an attribute that doesn't exist in a span
+ {notInSpanAttrName0, stringp("defaultNotInSpanAttrVal")},
+ // Leave the default value unset to test that this dimension should not be added to the metric.
+ {notInSpanAttrName1, nil},
+ // Add a resource attribute to test "process" attributes like IP, host, region, cluster, etc.
+ {regionResourceAttrName, nil},
+ },
+ Events: eventsConfig(),
+ MetricsExpiration: expiration,
+ }
+
+ mockClock := clock.NewMock(time.Now())
+ ticker := mockClock.NewTicker(time.Nanosecond)
+
+ c, err := newConnector(zap.NewNop(), cfg, ticker)
+ if err != nil {
+ return nil, nil, err
+ }
+ c.metricsConsumer = consumertest.NewNop()
+ return c, mockClock, nil
+}
+
+func stringp(str string) *string {
+ return &str
+}
+
func TestBuildKeySameServiceNameCharSequence(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
@@ -580,14 +638,14 @@ func TestConcurrentShutdown(t *testing.T) {
// Prepare
ctx := context.Background()
core, observedLogs := observer.New(zapcore.InfoLevel)
- logger := zap.New(core)
-
- mockClock := clock.NewMock(time.Now())
- ticker := mockClock.NewTicker(time.Nanosecond)
// Test
- p := newConnectorImp(t, new(consumertest.MetricsSink), nil, explicitHistogramsConfig, disabledExemplarsConfig, cumulative, logger, ticker)
- err := p.Start(ctx, componenttest.NewNopHost())
+ p, _, err := newConnectorImp(nil, explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, []string{})
+ require.NoError(t, err)
+ // Override the default no-op consumer and logger for testing.
+ p.metricsConsumer = new(consumertest.MetricsSink)
+ p.logger = zap.New(core)
+ err = p.Start(ctx, componenttest.NewNopHost())
require.NoError(t, err)
// Allow goroutines time to start.
@@ -615,11 +673,10 @@ func TestConcurrentShutdown(t *testing.T) {
return len(allLogs) > 0
}, time.Second, time.Millisecond*10)
- // Building spanmetrics connector...
// Starting spanmetricsconnector...
// Shutting down spanmetricsconnector...
// Stopping ticker.
- assert.Len(t, allLogs, 4)
+ assert.Len(t, allLogs, 3)
}
func TestConnectorCapabilities(t *testing.T) {
@@ -629,6 +686,7 @@ func TestConnectorCapabilities(t *testing.T) {
// Test
c, err := newConnector(zaptest.NewLogger(t), cfg, nil)
+ // Override the default no-op consumer for testing.
c.metricsConsumer = new(consumertest.MetricsSink)
assert.NoError(t, err)
caps := c.Capabilities()
@@ -660,16 +718,17 @@ func TestConsumeMetricsErrors(t *testing.T) {
logger := zap.New(core)
var wg sync.WaitGroup
- mcon := &errConsumer{
+ p, mockClock, err := newConnectorImp(nil, explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, []string{})
+ require.NoError(t, err)
+ // Override the default no-op consumer and logger for testing.
+ p.metricsConsumer = &errConsumer{
wg: &wg,
fakeErr: fakeErr,
}
- mockClock := clock.NewMock(time.Now())
- ticker := mockClock.NewTicker(time.Nanosecond)
- p := newConnectorImp(t, mcon, nil, explicitHistogramsConfig, disabledExemplarsConfig, cumulative, logger, ticker)
+ p.logger = logger
ctx := metadata.NewIncomingContext(context.Background(), nil)
- err := p.Start(ctx, componenttest.NewNopHost())
+ err = p.Start(ctx, componenttest.NewNopHost())
defer func() { sdErr := p.Shutdown(ctx); require.NoError(t, sdErr) }()
require.NoError(t, err)
@@ -824,14 +883,13 @@ func TestConsumeTraces(t *testing.T) {
// Prepare
mcon := &consumertest.MetricsSink{}
-
- mockClock := clock.NewMock(time.Now())
- ticker := mockClock.NewTicker(time.Nanosecond)
-
- p := newConnectorImp(t, mcon, stringp("defaultNullValue"), tc.histogramConfig, tc.exemplarConfig, tc.aggregationTemporality, zaptest.NewLogger(t), ticker)
+ p, mockClock, err := newConnectorImp(stringp("defaultNullValue"), tc.histogramConfig, tc.exemplarConfig, disabledEventsConfig, tc.aggregationTemporality, 0, []string{})
+ require.NoError(t, err)
+ // Override the default no-op consumer with metrics sink for testing.
+ p.metricsConsumer = mcon
ctx := metadata.NewIncomingContext(context.Background(), nil)
- err := p.Start(ctx, componenttest.NewNopHost())
+ err = p.Start(ctx, componenttest.NewNopHost())
defer func() { sdErr := p.Shutdown(ctx); require.NoError(t, sdErr) }()
require.NoError(t, err)
@@ -852,9 +910,8 @@ func TestConsumeTraces(t *testing.T) {
}
func TestMetricKeyCache(t *testing.T) {
- mcon := consumertest.NewNop()
-
- p := newConnectorImp(t, mcon, stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, cumulative, zaptest.NewLogger(t), nil)
+ p, _, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, []string{})
+ require.NoError(t, err)
traces := buildSampleTrace()
// Test
@@ -863,12 +920,12 @@ func TestMetricKeyCache(t *testing.T) {
// 0 key was cached at beginning
assert.Zero(t, p.metricKeyToDimensions.Len())
- err := p.ConsumeTraces(ctx, traces)
+ err = p.ConsumeTraces(ctx, traces)
// Validate
require.NoError(t, err)
// 2 key was cached, 1 key was evicted and cleaned after the processing
assert.Eventually(t, func() bool {
- return p.metricKeyToDimensions.Len() == DimensionsCacheSize
+ return p.metricKeyToDimensions.Len() == dimensionsCacheSize
}, 10*time.Second, time.Millisecond*100)
// consume another batch of traces
@@ -877,15 +934,113 @@ func TestMetricKeyCache(t *testing.T) {
// 2 key was cached, other keys were evicted and cleaned after the processing
assert.Eventually(t, func() bool {
- return p.metricKeyToDimensions.Len() == DimensionsCacheSize
+ return p.metricKeyToDimensions.Len() == dimensionsCacheSize
}, 10*time.Second, time.Millisecond*100)
}
+func TestResourceMetricsCache(t *testing.T) {
+ p, _, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, []string{})
+ require.NoError(t, err)
+
+ // Test
+ ctx := metadata.NewIncomingContext(context.Background(), nil)
+
+ // 0 resources in the beginning
+ assert.Zero(t, p.resourceMetrics.Len())
+
+ err = p.ConsumeTraces(ctx, buildSampleTrace())
+ // Validate
+ require.NoError(t, err)
+ assert.Equal(t, 2, p.resourceMetrics.Len())
+
+ // consume another batch of traces for the same resources
+ err = p.ConsumeTraces(ctx, buildSampleTrace())
+ require.NoError(t, err)
+ assert.Equal(t, 2, p.resourceMetrics.Len())
+
+ // consume more batches for new resources. Max size is exceeded causing old resource entries to be discarded
+ for i := 0; i < resourceMetricsCacheSize; i++ {
+ traces := buildSampleTrace()
+
+ // add resource attributes to simulate additional resources providing data
+ for j := 0; j < traces.ResourceSpans().Len(); j++ {
+ traces.ResourceSpans().At(j).Resource().Attributes().PutStr("dummy", fmt.Sprintf("%d", i))
+ }
+
+ err = p.ConsumeTraces(ctx, traces)
+ require.NoError(t, err)
+ }
+
+ // validate that the cache doesn't grow past its limit
+ assert.Equal(t, resourceMetricsCacheSize, p.resourceMetrics.Len())
+}
+
+func TestResourceMetricsExpiration(t *testing.T) {
+ p, _, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 1*time.Millisecond, []string{})
+ require.NoError(t, err)
+
+ // Test
+ ctx := metadata.NewIncomingContext(context.Background(), nil)
+
+ // 0 resources in the beginning
+ assert.Zero(t, p.resourceMetrics.Len())
+
+ err = p.ConsumeTraces(ctx, buildSampleTrace())
+ // Validate
+ require.NoError(t, err)
+ assert.Equal(t, 2, p.resourceMetrics.Len())
+
+ // consume another batch of traces for the same resources
+ err = p.ConsumeTraces(ctx, buildSampleTrace())
+ require.NoError(t, err)
+ assert.Equal(t, 2, p.resourceMetrics.Len())
+}
+
+func TestResourceMetricsKeyAttributes(t *testing.T) {
+ resourceMetricsKeyAttributes := []string{
+ "service.name",
+ }
+
+ p, _, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, resourceMetricsKeyAttributes)
+ require.NoError(t, err)
+
+ // Test
+ ctx := metadata.NewIncomingContext(context.Background(), nil)
+
+ // 0 resources in the beginning
+ assert.Zero(t, p.resourceMetrics.Len())
+
+ err = p.ConsumeTraces(ctx, buildSampleTrace())
+ // Validate
+ require.NoError(t, err)
+ assert.Equal(t, 2, p.resourceMetrics.Len())
+
+ // consume another batch of traces for the same resources
+ err = p.ConsumeTraces(ctx, buildSampleTrace())
+ require.NoError(t, err)
+ assert.Equal(t, 2, p.resourceMetrics.Len())
+
+ // consume more batches for new resources. Max size is exceeded causing old resource entries to be discarded
+ for i := 0; i < resourceMetricsCacheSize; i++ {
+ traces := buildSampleTrace()
+
+ // add resource attributes to simulate additional resources providing data
+ for j := 0; j < traces.ResourceSpans().Len(); j++ {
+ traces.ResourceSpans().At(j).Resource().Attributes().PutStr("not included in resource key attributes", fmt.Sprintf("%d", i))
+ }
+
+ err = p.ConsumeTraces(ctx, traces)
+ require.NoError(t, err)
+ }
+
+ // validate that the additional resources providing data did not result in additional resource metrics
+ assert.Equal(t, 2, p.resourceMetrics.Len())
+}
+
func BenchmarkConnectorConsumeTraces(b *testing.B) {
// Prepare
- mcon := consumertest.NewNop()
-
- conn := newConnectorImp(nil, mcon, stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, cumulative, zaptest.NewLogger(b), nil)
+ conn, _, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, []string{})
+ require.NoError(b, err)
traces := buildSampleTrace()
@@ -897,15 +1052,15 @@ func BenchmarkConnectorConsumeTraces(b *testing.B) {
}
func TestExcludeDimensionsConsumeTraces(t *testing.T) {
- mcon := consumertest.NewNop()
excludeDimensions := []string{"span.kind", "span.name", "totallyWrongNameDoesNotAffectAnything"}
- p := newConnectorImp(t, mcon, stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, cumulative, zaptest.NewLogger(t), nil, excludeDimensions...)
+ p, _, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, []string{}, excludeDimensions...)
+ require.NoError(t, err)
traces := buildSampleTrace()
// Test
ctx := metadata.NewIncomingContext(context.Background(), nil)
- err := p.ConsumeTraces(ctx, traces)
+ err = p.ConsumeTraces(ctx, traces)
require.NoError(t, err)
metrics := p.buildMetrics()
@@ -948,41 +1103,6 @@ func TestExcludeDimensionsConsumeTraces(t *testing.T) {
}
-func newConnectorImp(t *testing.T, mcon consumer.Metrics, defaultNullValue *string, histogramConfig func() HistogramConfig, exemplarsConfig func() ExemplarsConfig, temporality string, logger *zap.Logger, ticker *clock.Ticker, excludedDimensions ...string) *connectorImp {
-
- cfg := &Config{
- AggregationTemporality: temporality,
- Histogram: histogramConfig(),
- Exemplars: exemplarsConfig(),
- ExcludeDimensions: excludedDimensions,
- DimensionsCacheSize: DimensionsCacheSize,
- Dimensions: []Dimension{
- // Set nil defaults to force a lookup for the attribute in the span.
- {stringAttrName, nil},
- {intAttrName, nil},
- {doubleAttrName, nil},
- {boolAttrName, nil},
- {mapAttrName, nil},
- {arrayAttrName, nil},
- {nullAttrName, defaultNullValue},
- // Add a default value for an attribute that doesn't exist in a span
- {notInSpanAttrName0, stringp("defaultNotInSpanAttrVal")},
- // Leave the default value unset to test that this dimension should not be added to the metric.
- {notInSpanAttrName1, nil},
- // Add a resource attribute to test "process" attributes like IP, host, region, cluster, etc.
- {regionResourceAttrName, nil},
- },
- }
- c, err := newConnector(logger, cfg, ticker)
- require.NoError(t, err)
- c.metricsConsumer = mcon
- return c
-}
-
-func stringp(str string) *string {
- return &str
-}
-
func TestConnectorConsumeTracesEvictedCacheKey(t *testing.T) {
// Prepare
traces0 := ptrace.NewTraces()
@@ -1062,14 +1182,14 @@ func TestConnectorConsumeTracesEvictedCacheKey(t *testing.T) {
var wg sync.WaitGroup
wg.Add(len(wantDataPointCounts))
- mockClock := clock.NewMock(time.Now())
- ticker := mockClock.NewTicker(time.Nanosecond)
-
// Note: default dimension key cache size is 2.
- p := newConnectorImp(t, mcon, stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, cumulative, zaptest.NewLogger(t), ticker)
+ p, mockClock, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 0, []string{})
+ require.NoError(t, err)
+ // Override the default no-op consumer with metrics sink for testing.
+ p.metricsConsumer = mcon
ctx := metadata.NewIncomingContext(context.Background(), nil)
- err := p.Start(ctx, componenttest.NewNopHost())
+ err = p.Start(ctx, componenttest.NewNopHost())
defer func() { sdErr := p.Shutdown(ctx); require.NoError(t, sdErr) }()
require.NoError(t, err)
@@ -1104,6 +1224,87 @@ func TestConnectorConsumeTracesEvictedCacheKey(t *testing.T) {
}
}
+func TestConnectorConsumeTracesExpiredMetrics(t *testing.T) {
+ // Prepare
+ traces0 := ptrace.NewTraces()
+
+ initServiceSpans(
+ serviceSpans{
+ serviceName: "service-a",
+ spans: []span{
+ {
+ name: "/ping",
+ kind: ptrace.SpanKindServer,
+ statusCode: ptrace.StatusCodeOk,
+ },
+ },
+ }, traces0.ResourceSpans().AppendEmpty())
+ initServiceSpans(
+ serviceSpans{
+ serviceName: "service-b",
+ spans: []span{
+ {
+ name: "/ping",
+ kind: ptrace.SpanKindServer,
+ statusCode: ptrace.StatusCodeError,
+ },
+ },
+ }, traces0.ResourceSpans().AppendEmpty())
+
+ traces1 := ptrace.NewTraces()
+
+ initServiceSpans(
+ serviceSpans{
+ serviceName: "service-x",
+ spans: []span{
+ {
+ name: "/ping",
+ kind: ptrace.SpanKindServer,
+ statusCode: ptrace.StatusCodeOk,
+ },
+ },
+ }, traces1.ResourceSpans().AppendEmpty())
+
+ mcon := &consumertest.MetricsSink{}
+
+ // Creating a connector with a very short metricsTTL to ensure that the metrics are expired.
+ p, mockClock, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, disabledExemplarsConfig, disabledEventsConfig, cumulative, 1*time.Nanosecond, []string{})
+ require.NoError(t, err)
+ // Override the default no-op consumer with metrics sink for testing.
+ p.metricsConsumer = mcon
+
+ ctx := metadata.NewIncomingContext(context.Background(), nil)
+ err = p.Start(ctx, componenttest.NewNopHost())
+ defer func() { sdErr := p.Shutdown(ctx); require.NoError(t, sdErr) }()
+ require.NoError(t, err)
+
+ // Test expiration by sending three batches of traces, with the second and third batch being identical.
+ // On firsts test run, we should see only data points for traces #0 (= 4 data points)
+ // On second test run, we want to see both data points for traces #0 and #1 (= 6 data points)
+ // On third test run, we want to see only data points for traces #1, since metrics for traces #0 should be expired (= 2 data points)
+ wantedDataPointCounts := []int{4, 6, 2}
+ for i, traces := range []ptrace.Traces{traces0, traces1, traces1} {
+ // Test
+ err = p.ConsumeTraces(ctx, traces)
+ require.NoError(t, err)
+
+ // Allow time for metrics aggregation to complete.
+ time.Sleep(time.Millisecond)
+
+ // Trigger flush.
+ mockClock.Add(time.Nanosecond)
+
+ // Allow time for metrics flush to complete.
+ time.Sleep(time.Millisecond)
+
+ // Verify.
+ require.Equal(t, wantedDataPointCounts[i], mcon.AllMetrics()[0].DataPointCount())
+
+ // Reset so we can verify the next set of metrics from scratch.
+ mcon.Reset()
+ }
+}
+
func TestBuildMetricName(t *testing.T) {
tests := []struct {
namespace string
@@ -1175,7 +1376,7 @@ func TestConnector_initHistogramMetrics(t *testing.T) {
{
name: "initialize histogram with no config provided",
config: Config{},
- want: metrics.NewExplicitHistogramMetrics(defaultHistogramBucketsMs),
+ want: metrics.NewExplicitHistogramMetrics(defaultHistogramBucketsMs, nil),
},
{
name: "Disable histogram",
@@ -1193,7 +1394,7 @@ func TestConnector_initHistogramMetrics(t *testing.T) {
Unit: metrics.Milliseconds,
},
},
- want: metrics.NewExplicitHistogramMetrics(defaultHistogramBucketsMs),
+ want: metrics.NewExplicitHistogramMetrics(defaultHistogramBucketsMs, nil),
},
{
name: "initialize explicit histogram with default bounds (seconds)",
@@ -1202,7 +1403,7 @@ func TestConnector_initHistogramMetrics(t *testing.T) {
Unit: metrics.Seconds,
},
},
- want: metrics.NewExplicitHistogramMetrics(defaultHistogramBucketsSeconds),
+ want: metrics.NewExplicitHistogramMetrics(defaultHistogramBucketsSeconds, nil),
},
{
name: "initialize explicit histogram with bounds (seconds)",
@@ -1217,7 +1418,7 @@ func TestConnector_initHistogramMetrics(t *testing.T) {
},
},
},
- want: metrics.NewExplicitHistogramMetrics([]float64{0.1, 1}),
+ want: metrics.NewExplicitHistogramMetrics([]float64{0.1, 1}, nil),
},
{
name: "initialize explicit histogram with bounds (ms)",
@@ -1232,7 +1433,7 @@ func TestConnector_initHistogramMetrics(t *testing.T) {
},
},
},
- want: metrics.NewExplicitHistogramMetrics([]float64{100, 1000}),
+ want: metrics.NewExplicitHistogramMetrics([]float64{100, 1000}, nil),
},
{
name: "initialize exponential histogram",
@@ -1244,7 +1445,7 @@ func TestConnector_initHistogramMetrics(t *testing.T) {
},
},
},
- want: metrics.NewExponentialHistogramMetrics(10),
+ want: metrics.NewExponentialHistogramMetrics(10, nil),
},
{
name: "initialize exponential histogram with default max buckets count",
@@ -1254,7 +1455,7 @@ func TestConnector_initHistogramMetrics(t *testing.T) {
Exponential: &ExponentialHistogramConfig{},
},
},
- want: metrics.NewExponentialHistogramMetrics(structure.DefaultMaxSize),
+ want: metrics.NewExponentialHistogramMetrics(structure.DefaultMaxSize, nil),
},
}
for _, tt := range tests {
@@ -1319,14 +1520,14 @@ func TestSpanMetrics_Events(t *testing.T) {
}
}
func TestExemplarsForSumMetrics(t *testing.T) {
- mcon := consumertest.NewNop()
- p := newConnectorImp(t, mcon, stringp("defaultNullValue"), explicitHistogramsConfig, enabledExemplarsConfig, cumulative, zaptest.NewLogger(t), nil)
+ p, _, err := newConnectorImp(stringp("defaultNullValue"), explicitHistogramsConfig, enabledExemplarsConfig, enabledEventsConfig, cumulative, 0, []string{})
+ require.NoError(t, err)
traces := buildSampleTrace()
// Test
ctx := metadata.NewIncomingContext(context.Background(), nil)
- err := p.ConsumeTraces(ctx, traces)
+ err = p.ConsumeTraces(ctx, traces)
require.NoError(t, err)
metrics := p.buildMetrics()
diff --git a/connector/spanmetricsconnector/factory.go b/connector/spanmetricsconnector/factory.go
index 792b47935b7e..60f2b554ce80 100644
--- a/connector/spanmetricsconnector/factory.go
+++ b/connector/spanmetricsconnector/factory.go
@@ -28,10 +28,11 @@ func NewFactory() connector.Factory {
func createDefaultConfig() component.Config {
return &Config{
- AggregationTemporality: "AGGREGATION_TEMPORALITY_CUMULATIVE",
- DimensionsCacheSize: defaultDimensionsCacheSize,
- MetricsFlushInterval: 15 * time.Second,
- Histogram: HistogramConfig{Disable: false, Unit: defaultUnit},
+ AggregationTemporality: "AGGREGATION_TEMPORALITY_CUMULATIVE",
+ DimensionsCacheSize: defaultDimensionsCacheSize,
+ ResourceMetricsCacheSize: defaultResourceMetricsCacheSize,
+ MetricsFlushInterval: 60 * time.Second,
+ Histogram: HistogramConfig{Disable: false, Unit: defaultUnit},
}
}
diff --git a/connector/spanmetricsconnector/factory_test.go b/connector/spanmetricsconnector/factory_test.go
index 6b079cbbc293..0d8f5cfc4682 100644
--- a/connector/spanmetricsconnector/factory_test.go
+++ b/connector/spanmetricsconnector/factory_test.go
@@ -56,7 +56,7 @@ func TestNewConnector(t *testing.T) {
smc := traceConnector.(*connectorImp)
// Verify
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, smc)
assert.Equal(t, tc.wantDimensions, smc.dimensions)
diff --git a/connector/spanmetricsconnector/generated_component_test.go b/connector/spanmetricsconnector/generated_component_test.go
new file mode 100644
index 000000000000..81cf90b69a7e
--- /dev/null
+++ b/connector/spanmetricsconnector/generated_component_test.go
@@ -0,0 +1,61 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package spanmetricsconnector
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/connector"
+ "go.opentelemetry.io/collector/connector/connectortest"
+ "go.opentelemetry.io/collector/consumer/consumertest"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces_to_metrics",
+ createFn: func(ctx context.Context, set connector.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesToMetrics(ctx, set, cfg, consumertest.NewNop())
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ firstConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ require.NoError(t, err)
+ require.NoError(t, firstConnector.Start(context.Background(), host))
+ require.NoError(t, firstConnector.Shutdown(context.Background()))
+ secondConnector, err := test.createFn(context.Background(), connectortest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ require.NoError(t, secondConnector.Start(context.Background(), host))
+ require.NoError(t, secondConnector.Shutdown(context.Background()))
+ })
+ }
+}
diff --git a/connector/spanmetricsconnector/go.mod b/connector/spanmetricsconnector/go.mod
index db567ecb1b63..d42b141ac2c1 100644
--- a/connector/spanmetricsconnector/go.mod
+++ b/connector/spanmetricsconnector/go.mod
@@ -1,52 +1,61 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/connector/spanmetricsconnector
-go 1.20
+go 1.21
require (
github.com/hashicorp/golang-lru v1.0.2
github.com/lightstep/go-expohisto v1.0.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0
- github.com/stretchr/testify v1.8.4
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0
+ github.com/stretchr/testify v1.9.0
github.com/tilinna/clock v1.1.0
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
- google.golang.org/grpc v1.59.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+ google.golang.org/grpc v1.63.2
)
require (
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/connector/spanmetricsconnector/go.sum b/connector/spanmetricsconnector/go.sum
index c4d43e048e93..f66d624d4f3b 100644
--- a/connector/spanmetricsconnector/go.sum
+++ b/connector/spanmetricsconnector/go.sum
@@ -1,20 +1,24 @@
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -25,16 +29,16 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8LbfQI7cA4=
github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -44,44 +48,60 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tilinna/clock v1.1.0 h1:6IQQQCo6KoBxVudv6gwtY8o4eDfhHo8ojA5dP0MfhSs=
github.com/tilinna/clock v1.1.0/go.mod h1:ZsP7BcY7sEEz7ktc0IVy8Us6boDrK8VradlKRUGfOao=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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/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/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/consumer v0.89.0 h1:MteKhkudX2L1ylbtdpSazO8SwyHSxl6fUEElc0rRLDQ=
-go.opentelemetry.io/collector/consumer v0.89.0/go.mod h1:aOaoi6R0qVvfHu0pEPCzSE74gIPNJoCQM8Ml4Bc9NHE=
-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/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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -91,16 +111,16 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -113,15 +133,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-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 v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/connector/spanmetricsconnector/internal/cache/cache.go b/connector/spanmetricsconnector/internal/cache/cache.go
index 8b35f77fbc29..2559d42eadf7 100644
--- a/connector/spanmetricsconnector/internal/cache/cache.go
+++ b/connector/spanmetricsconnector/internal/cache/cache.go
@@ -64,6 +64,11 @@ func (c *Cache[K, V]) Get(key K) (V, bool) {
return val, ok
}
+// Remove removes a key from the cache if it exists.
+func (c *Cache[K, V]) Remove(key K) bool {
+ return c.lru.Remove(key)
+}
+
// Len returns the number of items in the cache.
func (c *Cache[K, V]) Len() int {
return c.lru.Len()
@@ -74,3 +79,17 @@ func (c *Cache[K, V]) Purge() {
c.lru.Purge()
c.RemoveEvictedItems()
}
+
+// ForEach iterates over all the items within the cache, as well as the evicted items (if any).
+func (c *Cache[K, V]) ForEach(fn func(k K, v V)) {
+ for _, k := range c.lru.Keys() {
+ v, ok := c.lru.Get(k)
+ if ok {
+ fn(k.(K), v.(V))
+ }
+ }
+
+ for k, v := range c.evictedItems {
+ fn(k, v)
+ }
+}
diff --git a/connector/spanmetricsconnector/internal/cache/package_test.go b/connector/spanmetricsconnector/internal/cache/package_test.go
new file mode 100644
index 000000000000..f8a293b2ad92
--- /dev/null
+++ b/connector/spanmetricsconnector/internal/cache/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package cache
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/spanmetricsconnector/internal/metadata/generated_status.go b/connector/spanmetricsconnector/internal/metadata/generated_status.go
index 19337d4e8a25..c0da10adabc6 100644
--- a/connector/spanmetricsconnector/internal/metadata/generated_status.go
+++ b/connector/spanmetricsconnector/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("spanmetrics")
)
const (
- Type = "spanmetrics"
TracesToMetricsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/spanmetrics")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/spanmetrics")
+}
diff --git a/connector/spanmetricsconnector/internal/metrics/metrics.go b/connector/spanmetricsconnector/internal/metrics/metrics.go
index 2bae86f4333c..456c0bed5d04 100644
--- a/connector/spanmetricsconnector/internal/metrics/metrics.go
+++ b/connector/spanmetricsconnector/internal/metrics/metrics.go
@@ -26,13 +26,15 @@ type Histogram interface {
}
type explicitHistogramMetrics struct {
- metrics map[Key]*explicitHistogram
- bounds []float64
+ metrics map[Key]*explicitHistogram
+ bounds []float64
+ maxExemplarCount *int
}
type exponentialHistogramMetrics struct {
- metrics map[Key]*exponentialHistogram
- maxSize int32
+ metrics map[Key]*exponentialHistogram
+ maxSize int32
+ maxExemplarCount *int
}
type explicitHistogram struct {
@@ -44,6 +46,8 @@ type explicitHistogram struct {
sum float64
bounds []float64
+
+ maxExemplarCount *int
}
type exponentialHistogram struct {
@@ -51,19 +55,23 @@ type exponentialHistogram struct {
exemplars pmetric.ExemplarSlice
histogram *structure.Histogram[float64]
+
+ maxExemplarCount *int
}
-func NewExponentialHistogramMetrics(maxSize int32) HistogramMetrics {
+func NewExponentialHistogramMetrics(maxSize int32, maxExemplarCount *int) HistogramMetrics {
return &exponentialHistogramMetrics{
- metrics: make(map[Key]*exponentialHistogram),
- maxSize: maxSize,
+ metrics: make(map[Key]*exponentialHistogram),
+ maxSize: maxSize,
+ maxExemplarCount: maxExemplarCount,
}
}
-func NewExplicitHistogramMetrics(bounds []float64) HistogramMetrics {
+func NewExplicitHistogramMetrics(bounds []float64, maxExemplarCount *int) HistogramMetrics {
return &explicitHistogramMetrics{
- metrics: make(map[Key]*explicitHistogram),
- bounds: bounds,
+ metrics: make(map[Key]*explicitHistogram),
+ bounds: bounds,
+ maxExemplarCount: maxExemplarCount,
}
}
@@ -71,10 +79,11 @@ func (m *explicitHistogramMetrics) GetOrCreate(key Key, attributes pcommon.Map)
h, ok := m.metrics[key]
if !ok {
h = &explicitHistogram{
- attributes: attributes,
- exemplars: pmetric.NewExemplarSlice(),
- bounds: m.bounds,
- bucketCounts: make([]uint64, len(m.bounds)+1),
+ attributes: attributes,
+ exemplars: pmetric.NewExemplarSlice(),
+ bounds: m.bounds,
+ bucketCounts: make([]uint64, len(m.bounds)+1),
+ maxExemplarCount: m.maxExemplarCount,
}
m.metrics[key] = h
}
@@ -128,11 +137,13 @@ func (m *exponentialHistogramMetrics) GetOrCreate(key Key, attributes pcommon.Ma
histogram.Init(cfg)
h = &exponentialHistogram{
- histogram: histogram,
- attributes: attributes,
- exemplars: pmetric.NewExemplarSlice(),
+ histogram: histogram,
+ attributes: attributes,
+ exemplars: pmetric.NewExemplarSlice(),
+ maxExemplarCount: m.maxExemplarCount,
}
m.metrics[key] = h
+
}
return h
@@ -212,6 +223,9 @@ func (h *explicitHistogram) Observe(value float64) {
}
func (h *explicitHistogram) AddExemplar(traceID pcommon.TraceID, spanID pcommon.SpanID, value float64) {
+ if h.maxExemplarCount != nil && h.exemplars.Len() >= *h.maxExemplarCount {
+ return
+ }
e := h.exemplars.AppendEmpty()
e.SetTraceID(traceID)
e.SetSpanID(spanID)
@@ -223,6 +237,9 @@ func (h *exponentialHistogram) Observe(value float64) {
}
func (h *exponentialHistogram) AddExemplar(traceID pcommon.TraceID, spanID pcommon.SpanID, value float64) {
+ if h.maxExemplarCount != nil && h.exemplars.Len() >= *h.maxExemplarCount {
+ return
+ }
e := h.exemplars.AppendEmpty()
e.SetTraceID(traceID)
e.SetSpanID(spanID)
@@ -230,29 +247,35 @@ func (h *exponentialHistogram) AddExemplar(traceID pcommon.TraceID, spanID pcomm
}
type Sum struct {
- attributes pcommon.Map
- count uint64
- exemplars pmetric.ExemplarSlice
+ attributes pcommon.Map
+ count uint64
+ exemplars pmetric.ExemplarSlice
+ maxExemplarCount *int
}
func (s *Sum) Add(value uint64) {
s.count += value
}
-func NewSumMetrics() SumMetrics {
- return SumMetrics{metrics: make(map[Key]*Sum)}
+func NewSumMetrics(maxExemplarCount *int) SumMetrics {
+ return SumMetrics{
+ metrics: make(map[Key]*Sum),
+ maxExemplarCount: maxExemplarCount,
+ }
}
type SumMetrics struct {
- metrics map[Key]*Sum
+ metrics map[Key]*Sum
+ maxExemplarCount *int
}
func (m *SumMetrics) GetOrCreate(key Key, attributes pcommon.Map) *Sum {
s, ok := m.metrics[key]
if !ok {
s = &Sum{
- attributes: attributes,
- exemplars: pmetric.NewExemplarSlice(),
+ attributes: attributes,
+ exemplars: pmetric.NewExemplarSlice(),
+ maxExemplarCount: m.maxExemplarCount,
}
m.metrics[key] = s
}
@@ -260,6 +283,9 @@ func (m *SumMetrics) GetOrCreate(key Key, attributes pcommon.Map) *Sum {
}
func (s *Sum) AddExemplar(traceID pcommon.TraceID, spanID pcommon.SpanID, value float64) {
+ if s.maxExemplarCount != nil && s.exemplars.Len() >= *s.maxExemplarCount {
+ return
+ }
e := s.exemplars.AppendEmpty()
e.SetTraceID(traceID)
e.SetSpanID(spanID)
diff --git a/connector/spanmetricsconnector/internal/metrics/metrics_test.go b/connector/spanmetricsconnector/internal/metrics/metrics_test.go
index 67b5a356a3fb..edb88236f5b5 100644
--- a/connector/spanmetricsconnector/internal/metrics/metrics_test.go
+++ b/connector/spanmetricsconnector/internal/metrics/metrics_test.go
@@ -8,6 +8,7 @@ import (
"github.com/lightstep/go-expohisto/structure"
"github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
)
@@ -103,3 +104,186 @@ func TestConnector_ExpoHistToExponentialDataPoint(t *testing.T) {
})
}
}
+
+func TestSum_AddExemplar(t *testing.T) {
+ maxCount := 3
+ tests := []struct {
+ name string
+ input Sum
+ want int
+ }{
+ {
+ name: "Sum Metric - No exemplars configured",
+ input: Sum{exemplars: pmetric.NewExemplarSlice(), maxExemplarCount: &maxCount},
+ want: 1,
+ },
+ {
+ name: "Sum Metric - With exemplars length less than configured max count",
+ input: func() Sum {
+ exs := pmetric.NewExemplarSlice()
+
+ e1 := exs.AppendEmpty()
+ e1.SetTimestamp(1)
+ e1.SetDoubleValue(1)
+
+ return Sum{
+ exemplars: exs,
+ maxExemplarCount: &maxCount,
+ }
+ }(),
+ want: 2,
+ },
+ {
+ name: "Sum Metric - With exemplars length equal to configured max count",
+ input: func() Sum {
+ exs := pmetric.NewExemplarSlice()
+
+ e1 := exs.AppendEmpty()
+ e1.SetTimestamp(1)
+ e1.SetDoubleValue(1)
+
+ e2 := exs.AppendEmpty()
+ e2.SetTimestamp(2)
+ e2.SetDoubleValue(2)
+
+ e3 := exs.AppendEmpty()
+ e3.SetTimestamp(3)
+ e3.SetDoubleValue(3)
+
+ return Sum{
+ exemplars: exs,
+ maxExemplarCount: &maxCount,
+ }
+ }(),
+ want: 3,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ tt.input.AddExemplar(pcommon.TraceID{}, pcommon.SpanID{}, 4)
+ assert.Equal(t, tt.want, tt.input.exemplars.Len())
+ })
+ }
+}
+
+func TestExplicitHistogram_AddExemplar(t *testing.T) {
+ maxCount := 3
+ tests := []struct {
+ name string
+ input explicitHistogram
+ want int
+ }{
+ {
+ name: "Explicit Histogram - No exemplars configured",
+ input: explicitHistogram{exemplars: pmetric.NewExemplarSlice(), maxExemplarCount: &maxCount},
+ want: 1,
+ },
+ {
+ name: "Explicit Histogram - With exemplars length less than configured max count",
+ input: func() explicitHistogram {
+ exs := pmetric.NewExemplarSlice()
+
+ e1 := exs.AppendEmpty()
+ e1.SetTimestamp(1)
+ e1.SetDoubleValue(1)
+
+ return explicitHistogram{
+ exemplars: exs,
+ maxExemplarCount: &maxCount,
+ }
+ }(),
+ want: 2,
+ },
+ {
+ name: "Explicit Histogram - With exemplars length equal to configured max count",
+ input: func() explicitHistogram {
+ exs := pmetric.NewExemplarSlice()
+
+ e1 := exs.AppendEmpty()
+ e1.SetTimestamp(1)
+ e1.SetDoubleValue(1)
+
+ e2 := exs.AppendEmpty()
+ e2.SetTimestamp(2)
+ e2.SetDoubleValue(2)
+
+ e3 := exs.AppendEmpty()
+ e3.SetTimestamp(3)
+ e3.SetDoubleValue(3)
+
+ return explicitHistogram{
+ exemplars: exs,
+ maxExemplarCount: &maxCount,
+ }
+ }(),
+ want: 3,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ tt.input.AddExemplar(pcommon.TraceID{}, pcommon.SpanID{}, 4)
+ assert.Equal(t, tt.want, tt.input.exemplars.Len())
+ })
+ }
+}
+
+func TestExponentialHistogram_AddExemplar(t *testing.T) {
+ maxCount := 3
+ tests := []struct {
+ name string
+ input exponentialHistogram
+ want int
+ }{
+ {
+ name: "Exponential Histogram - No exemplars configured",
+ input: exponentialHistogram{exemplars: pmetric.NewExemplarSlice(), maxExemplarCount: &maxCount},
+ want: 1,
+ },
+ {
+ name: "Exponential Histogram - With exemplars length less than configured max count",
+ input: func() exponentialHistogram {
+ exs := pmetric.NewExemplarSlice()
+
+ e1 := exs.AppendEmpty()
+ e1.SetTimestamp(1)
+ e1.SetDoubleValue(1)
+
+ return exponentialHistogram{
+ exemplars: exs,
+ maxExemplarCount: &maxCount,
+ }
+ }(),
+ want: 2,
+ },
+ {
+ name: "Exponential Histogram - With exemplars length equal to configured max count",
+ input: func() exponentialHistogram {
+ exs := pmetric.NewExemplarSlice()
+
+ e1 := exs.AppendEmpty()
+ e1.SetTimestamp(1)
+ e1.SetDoubleValue(1)
+
+ e2 := exs.AppendEmpty()
+ e2.SetTimestamp(2)
+ e2.SetDoubleValue(2)
+
+ e3 := exs.AppendEmpty()
+ e3.SetTimestamp(3)
+ e3.SetDoubleValue(3)
+
+ return exponentialHistogram{
+ exemplars: exs,
+ maxExemplarCount: &maxCount,
+ }
+ }(),
+ want: 3,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ tt.input.AddExemplar(pcommon.TraceID{}, pcommon.SpanID{}, 4)
+ assert.Equal(t, tt.want, tt.input.exemplars.Len())
+ })
+ }
+}
diff --git a/connector/spanmetricsconnector/internal/metrics/package_test.go b/connector/spanmetricsconnector/internal/metrics/package_test.go
new file mode 100644
index 000000000000..b8f16a8085ef
--- /dev/null
+++ b/connector/spanmetricsconnector/internal/metrics/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package metrics
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/spanmetricsconnector/metadata.yaml b/connector/spanmetricsconnector/metadata.yaml
index 44c256214d12..8ea19a8fe23e 100644
--- a/connector/spanmetricsconnector/metadata.yaml
+++ b/connector/spanmetricsconnector/metadata.yaml
@@ -1,9 +1,15 @@
type: spanmetrics
+scope_name: otelcol/spanmetrics
status:
class: connector
stability:
alpha: [traces_to_metrics]
- distributions: [contrib, sumo, grafana]
+ distributions: [contrib]
codeowners:
- active: [albertteoh]
+ active: [portertech, Frapschen]
+ emeritus: [albertteoh]
+ seeking_new: true
+
+tests:
+ config:
diff --git a/connector/spanmetricsconnector/package_test.go b/connector/spanmetricsconnector/package_test.go
new file mode 100644
index 000000000000..f00ec737b5ed
--- /dev/null
+++ b/connector/spanmetricsconnector/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package spanmetricsconnector
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/connector/spanmetricsconnector/testdata/config.yaml b/connector/spanmetricsconnector/testdata/config.yaml
index b952c8d38120..7358cd000549 100644
--- a/connector/spanmetricsconnector/testdata/config.yaml
+++ b/connector/spanmetricsconnector/testdata/config.yaml
@@ -15,6 +15,7 @@ spanmetrics/full:
exemplars:
enabled: true
dimensions_cache_size: 1500
+ resource_metrics_cache_size: 1600
# Additional list of dimensions on top of:
# - service.name
@@ -36,7 +37,7 @@ spanmetrics/full:
aggregation_temporality: "AGGREGATION_TEMPORALITY_DELTA"
# The period on which all metrics (whose dimension keys remain in cache) will be emitted.
- # Default: 15s.
+ # Default: 60s.
metrics_flush_interval: 30s
# default configuration with exponential buckets histogram
@@ -57,7 +58,23 @@ spanmetrics/invalid_histogram_unit:
histogram:
unit: "h"
+spanmetrics/invalid_metrics_expiration:
+ metrics_expiration: -20s
+
# exemplars enabled
spanmetrics/exemplars_enabled:
exemplars:
enabled: true
+
+# exemplars enabled with max per datapoint configured
+spanmetrics/exemplars_enabled_with_max_per_datapoint:
+ exemplars:
+ enabled: true
+ max_per_data_point: 5
+
+# resource metrics key attributes filter
+spanmetrics/resource_metrics_key_attributes:
+ resource_metrics_key_attributes:
+ - service.name
+ - telemetry.sdk.language
+ - telemetry.sdk.name
diff --git a/distributions.yaml b/distributions.yaml
new file mode 100644
index 000000000000..1ec93c7d9e36
--- /dev/null
+++ b/distributions.yaml
@@ -0,0 +1,8 @@
+# A collection of distributions that can be referenced in the metadata.yaml files.
+# The rules below apply to every distribution added to this list:
+# - The distribution is open source and maintained by the OpenTelemetry project.
+# - The link must point to a publicly accessible repository.
+ - name: core
+ url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol
+ - name: contrib
+ url: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
\ No newline at end of file
diff --git a/docs/testing.md b/docs/testing.md
new file mode 100644
index 000000000000..f6686a24916b
--- /dev/null
+++ b/docs/testing.md
@@ -0,0 +1,14 @@
+
+## Testing your components
+
+- `scraperint` is a wrapper around testcontainers and the golang testing api for use with receivers only (at least, today). See docs in [`scraperinttest`](../internal/coreinternal/scraperinttest/README.md) for information on usage.
+- Add the `integration` [build constraint](#constraining-build-targets) for longer-running, comprehensive tests. These will be run via github actions when submitting a PR.
+
+## Constraining build targets
+
+This project uses golang [build-constraints](https://pkg.go.dev/cmd/go#hdr-Build_constraints) to tag build targets. Guidance on using existing targets
+
+- `e2e` should be used for end-to-end tests. These are currently manually configured to be run in `.github/workflows` on a per-component basis.
+- `integration` should be used for integration tests (able to be run on local hardware but not require any credentials or environmental infrastructure). You can run this with `make integration-test` or `cd componentclass/yourcomponent && make mod-integration-test`
+- Restrict builds for varying platforms or processor architectures with their relevant platform names. See [documentation](https://pkg.go.dev/cmd/go#hdr-Build_constraints) on `GOOS` and `GOOARCH` for how these are set.
+- Add other build tags as needed, such as has been done for `tools` and `race`. Please document any needed commands here and ensure to get consensus with the otel collector working group before introducing build constraints.
diff --git a/examples/couchbase/docker-compose.yaml b/examples/couchbase/docker-compose.yaml
index 95dfcee5eccb..1d9bf5043112 100644
--- a/examples/couchbase/docker-compose.yaml
+++ b/examples/couchbase/docker-compose.yaml
@@ -10,14 +10,14 @@ services:
cpus: "0.50"
memory: 1512M
opentelemetry-collector-contrib:
- image: otel/opentelemetry-collector-contrib:0.88.0
+ image: otel/opentelemetry-collector-contrib:0.97.0
command: ["--config=/etc/otel-collector-config.yml"]
volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yml
depends_on:
- couchbase
prometheus:
- image: prom/prometheus:v2.47.2
+ image: prom/prometheus:v2.51.1
volumes:
- ./prometheus-config.yaml:/etc/prometheus/prometheus.yml
ports:
diff --git a/examples/demo/client/Dockerfile b/examples/demo/client/Dockerfile
index 224a5bda1eb1..2e144949cc7d 100644
--- a/examples/demo/client/Dockerfile
+++ b/examples/demo/client/Dockerfile
@@ -1,10 +1,10 @@
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
-FROM golang:1.21 as build
+FROM golang:1.22 as build
WORKDIR /app/
COPY . .
RUN go env -w GOPROXY=direct
RUN CGO_ENABLED=0 go build -o main main.go
-FROM alpine:3.18
+FROM alpine:3.19
COPY --from=build /app/main /app/main
CMD ["/app/main"]
diff --git a/examples/demo/client/go.mod b/examples/demo/client/go.mod
index 6ca06dd7edb1..725dd25afe27 100644
--- a/examples/demo/client/go.mod
+++ b/examples/demo/client/go.mod
@@ -1,34 +1,33 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/examples/demo/client
-go 1.20
+go 1.21
require (
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0
- go.opentelemetry.io/otel v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0
- go.opentelemetry.io/otel/metric v1.20.0
- go.opentelemetry.io/otel/sdk v1.20.0
- go.opentelemetry.io/otel/sdk/metric v1.20.0
- google.golang.org/grpc v1.59.0
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0
+ go.opentelemetry.io/otel v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0
+ go.opentelemetry.io/otel/metric v1.24.0
+ go.opentelemetry.io/otel/sdk v1.24.0
+ go.opentelemetry.io/otel/sdk/metric v1.24.0
+ google.golang.org/grpc v1.63.2
)
require (
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
+ go.opentelemetry.io/otel/trace v1.24.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
)
retract (
diff --git a/examples/demo/client/go.sum b/examples/demo/client/go.sum
index 9e27a950caf4..281e77712327 100644
--- a/examples/demo/client/go.sum
+++ b/examples/demo/client/go.sum
@@ -1,59 +1,59 @@
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/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/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
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/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
+go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0 h1:f2jriWfOdldanBwS9jNBdeOKAQN7b4ugAMaNu1/1k9g=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0/go.mod h1:B+bcQI1yTY+N0vqMpoZbEN7+XU4tNM0DmUiOwebFJWI=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 h1:Mw5xcxMwlqoJd97vwPxA8isEaIoxsta9/Q51+TTJLGE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0/go.mod h1:CQNu9bj7o7mC6U7+CA/schKEYakYXWr79ucDHTMGhCM=
+go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
+go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
+go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=
+go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg=
+go.opentelemetry.io/otel/sdk/metric v1.24.0 h1:yyMQrPzF+k88/DbH7o4FMAs80puqd+9osbiBrJrz/w8=
+go.opentelemetry.io/otel/sdk/metric v1.24.0/go.mod h1:I6Y5FjH6rvEnTTAYQz3Mmv2kl6Ek5IIrmwTLqMrrOE0=
+go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
+go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-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/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
-golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
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/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
-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 v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/examples/demo/docker-compose.yaml b/examples/demo/docker-compose.yaml
index 9b14e04bbc6c..b23fbb3b823d 100644
--- a/examples/demo/docker-compose.yaml
+++ b/examples/demo/docker-compose.yaml
@@ -13,6 +13,8 @@ services:
# Zipkin
zipkin-all-in-one:
image: openzipkin/zipkin:latest
+ environment:
+ - JAVA_OPTS=-Xms1024m -Xmx1024m -XX:+ExitOnOutOfMemoryError
restart: always
ports:
- "9411:9411"
diff --git a/examples/demo/server/Dockerfile b/examples/demo/server/Dockerfile
index 224a5bda1eb1..2e144949cc7d 100644
--- a/examples/demo/server/Dockerfile
+++ b/examples/demo/server/Dockerfile
@@ -1,10 +1,10 @@
# Copyright The OpenTelemetry Authors
# SPDX-License-Identifier: Apache-2.0
-FROM golang:1.21 as build
+FROM golang:1.22 as build
WORKDIR /app/
COPY . .
RUN go env -w GOPROXY=direct
RUN CGO_ENABLED=0 go build -o main main.go
-FROM alpine:3.18
+FROM alpine:3.19
COPY --from=build /app/main /app/main
CMD ["/app/main"]
diff --git a/examples/demo/server/go.mod b/examples/demo/server/go.mod
index 16b4e1e2f38d..653e519af1a5 100644
--- a/examples/demo/server/go.mod
+++ b/examples/demo/server/go.mod
@@ -1,34 +1,33 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/examples/demo/server
-go 1.20
+go 1.21
require (
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0
- go.opentelemetry.io/otel v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0
- go.opentelemetry.io/otel/metric v1.20.0
- go.opentelemetry.io/otel/sdk v1.20.0
- go.opentelemetry.io/otel/sdk/metric v1.20.0
- go.opentelemetry.io/otel/trace v1.20.0
- google.golang.org/grpc v1.59.0
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0
+ go.opentelemetry.io/otel v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0
+ go.opentelemetry.io/otel/metric v1.24.0
+ go.opentelemetry.io/otel/sdk v1.24.0
+ go.opentelemetry.io/otel/sdk/metric v1.24.0
+ go.opentelemetry.io/otel/trace v1.24.0
+ google.golang.org/grpc v1.63.2
)
require (
github.com/cenkalti/backoff/v4 v4.2.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
)
retract (
diff --git a/examples/demo/server/go.sum b/examples/demo/server/go.sum
index 9e27a950caf4..281e77712327 100644
--- a/examples/demo/server/go.sum
+++ b/examples/demo/server/go.sum
@@ -1,59 +1,59 @@
github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/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/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
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/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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=
+github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
+go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0 h1:f2jriWfOdldanBwS9jNBdeOKAQN7b4ugAMaNu1/1k9g=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.24.0/go.mod h1:B+bcQI1yTY+N0vqMpoZbEN7+XU4tNM0DmUiOwebFJWI=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0 h1:Mw5xcxMwlqoJd97vwPxA8isEaIoxsta9/Q51+TTJLGE=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.24.0/go.mod h1:CQNu9bj7o7mC6U7+CA/schKEYakYXWr79ucDHTMGhCM=
+go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
+go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
+go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=
+go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg=
+go.opentelemetry.io/otel/sdk/metric v1.24.0 h1:yyMQrPzF+k88/DbH7o4FMAs80puqd+9osbiBrJrz/w8=
+go.opentelemetry.io/otel/sdk/metric v1.24.0/go.mod h1:I6Y5FjH6rvEnTTAYQz3Mmv2kl6Ek5IIrmwTLqMrrOE0=
+go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
+go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-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/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
-golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
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/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
-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 v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/examples/fault-tolerant-logs-collection/README.md b/examples/fault-tolerant-logs-collection/README.md
new file mode 100644
index 000000000000..54f868a3eb9a
--- /dev/null
+++ b/examples/fault-tolerant-logs-collection/README.md
@@ -0,0 +1,9 @@
+## Fault tolerant log collection example
+
+Filelog receiver's persistence can be covered by the usage of the following extensions:
+- [filestorage](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/storage/filestorage) extension,
+ to ensure that Collector's restarts do not affect the log collection and offset tracking.
+- [exporterhelper persistent-queue](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md#persistent-queue),
+ to ensure that Collector's restarts do not affect the delivery of the already collected logs.
+
+A full configuration example is provided in [example config](./otel-col-config.yaml)
\ No newline at end of file
diff --git a/examples/fault-tolerant-logs-collection/otel-col-config.yaml b/examples/fault-tolerant-logs-collection/otel-col-config.yaml
new file mode 100644
index 000000000000..eec53399f20a
--- /dev/null
+++ b/examples/fault-tolerant-logs-collection/otel-col-config.yaml
@@ -0,0 +1,24 @@
+receivers:
+ filelog:
+ include: [/var/log/busybox/simple.log]
+ storage: file_storage/filelogreceiver
+
+extensions:
+ file_storage/filelogreceiver:
+ directory: /var/lib/otelcol/file_storage/receiver
+ file_storage/otlpoutput:
+ directory: /var/lib/otelcol/file_storage/output
+
+service:
+ extensions: [file_storage/filelogreceiver, file_storage/otlpoutput]
+ pipelines:
+ logs:
+ receivers: [filelog]
+ exporters: [otlp/custom]
+ processors: []
+
+exporters:
+ otlp/custom:
+ endpoint: http://0.0.0.0:4242
+ sending_queue:
+ storage: file_storage/otlpoutput
diff --git a/examples/logline-filtering/README.md b/examples/logline-filtering/README.md
new file mode 100644
index 000000000000..9ae695a33ae1
--- /dev/null
+++ b/examples/logline-filtering/README.md
@@ -0,0 +1,13 @@
+## Filtering log messages based on content
+
+Filelog receiver provides support for filtering logs based on their content. This can be achieved by using
+the [filter operator](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/pkg/stanza/docs/operators/filter.md),
+configured with matching regular expressions.
+
+With this happening at the collection point, a lot of resources at the destination backend
+can be saved since no additional processing would need to take place.
+
+A full configuration example on how to filter out logs that start with the `INFO:` pattern is
+provided in the [example config](./otel-col-config-filter-out-logs.yaml).
+A full configuration example on how to only collect logs that start with the `WARN:` pattern is provided in
+the [example config](./otel-col-config-filter-in-logs.yaml)
\ No newline at end of file
diff --git a/examples/logline-filtering/otel-col-config-filter-in-logs.yaml b/examples/logline-filtering/otel-col-config-filter-in-logs.yaml
new file mode 100644
index 000000000000..a03f7b08b36f
--- /dev/null
+++ b/examples/logline-filtering/otel-col-config-filter-in-logs.yaml
@@ -0,0 +1,17 @@
+receivers:
+ filelog:
+ include: [/var/log/busybox/simple.log]
+ operators:
+ - type: filter
+ expr: 'body not matches "^WARN:"'
+
+service:
+ pipelines:
+ logs:
+ receivers: [filelog]
+ exporters: [otlp/custom]
+ processors: []
+
+exporters:
+ otlp/custom:
+ endpoint: http://0.0.0.0:4242
diff --git a/examples/logline-filtering/otel-col-config-filter-out-logs.yaml b/examples/logline-filtering/otel-col-config-filter-out-logs.yaml
new file mode 100644
index 000000000000..ff19b50c6889
--- /dev/null
+++ b/examples/logline-filtering/otel-col-config-filter-out-logs.yaml
@@ -0,0 +1,17 @@
+receivers:
+ filelog:
+ include: [/var/log/busybox/simple.log]
+ operators:
+ - type: filter
+ expr: 'body matches "^INFO:"'
+
+service:
+ pipelines:
+ logs:
+ receivers: [filelog]
+ exporters: [otlp/custom]
+ processors: []
+
+exporters:
+ otlp/custom:
+ endpoint: http://0.0.0.0:4242
diff --git a/examples/secure-tracing/README.md b/examples/secure-tracing/README.md
new file mode 100644
index 000000000000..9b0312d4638e
--- /dev/null
+++ b/examples/secure-tracing/README.md
@@ -0,0 +1,117 @@
+# Build A Secure Trace Collection Pipeline
+
+Implementing robust security measures is essential for any tracing ingestion service and infrastructure. This is an illustrative example of a secure setup encompassing the following features for trace ingestion:
+
+- Data Encryption with OTLP receiver supporting TLS. Transport Layer Security (TLS) is employed to encrypt traces in transit between the application and the OpenTelemetry (OTLP) endpoint, fortifying data security.
+- Client Authentication via [Envoy](https://www.envoyproxy.io/docs/envoy/latest/start/start), a high-performance proxy.
+Even though we can configure OTLP receiver with mTLS for client authentication, authorization is not supported by OpenTelemetry Collector. This is one of the reasons that we use Envoy for client authentication. It allows us to easily add authorization, ensuring that only authorized clients can submit traces to the ingestion service.
+
+In this example, we also include a test via telementrygen: a tool provided from this repository for generating synthetic telemetry data, which helps verify the security features and overall functionality of the set up.
+
+
+## Data Encryption via TLS
+The OpenTelemetry Collector has detailed [documentation](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/configtls/README.md) on how to configure TLS. In this example, we enable TLS for receivers which leverages server configuration.
+
+Example
+```
+receivers:
+ otlp:
+ protocols:
+ grpc:
+ endpoint: mysite.local:55690
+ tls:
+ cert_file: server.crt
+ key_file: server.key
+```
+
+## Client Authentication
+Envoy [sandbox for TLS](https://www.envoyproxy.io/docs/envoy/latest/start/sandboxes/tls) is a good source for reference. A few elements in following configuration are good to call out,
+- `require_client_certificate` is set true
+- The `matcher` under `validation_context` expects a client certificate with `group-id` as well as `tenat-id` which provides more granular control.
+
+```
+typed_config:
+ "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
+ require_client_certificate: true
+ common_tls_context:
+ # h2 If the listener is going to support both HTTP/2 and HTTP/1.1.
+ alpn_protocols: "h2"
+ tls_certificates:
+ - certificate_chain:
+ filename: "/etc/envoy.crt"
+ private_key:
+ filename: "/etc/envoy.key"
+ validation_context:
+ match_typed_subject_alt_names:
+ - san_type: URI
+ matcher:
+ Match tenant by two level info: group id and tenant-id.
+ exact: "aprn:trace-client:certmgr:::group-x:/ig/5003178/uv/tenant-a"
+ trusted_ca:
+ filename: "/etc/ca.crt"
+```
+
+## Setup Environment
+### Generate Certificates
+To generate various self-signed certificates, including those for Envoy and the OpenTelemetry Collector receiver, as well as tracing client certificate, we utilize the widely renowned open-source tool [OpenSSL](https://www.openssl.org/source/), OpenSSL 3.1.0 14 was tested.
+
+In the `certs` folder, you can find a set of `.ext` files which define the properties for a certificate. A `MakeFile` is provided to facilate the process.
+
+```
+$ cd certs
+$ make clean && make all
+```
+### Bring up services
+We use docker compose to bring up Envoy and OpenTelemetry Collection Pipeline. Make sure the current folder is `secure-tracing`,
+
+```
+$ docker compose up
+```
+From the console window, verify that `Envoy` and `Collector` are up and running. If you see error similar to following,
+
+```
+secure-tracing-otel-collector-1 | Error: cannot start pipelines: failed to load TLS config: failed to load TLS cert and key: read /etc/otel-collector.crt: is a directory
+```
+It's most likely due to missing certificates. Follow the steps from section above to generate certificates.
+
+## Run test
+
+### Compile telemetrygen
+From the root of this repository,
+```
+$ cd cmd/telemetrygen
+$ go build .
+$ cp telemetrygen ../../examples/secure-tracing
+```
+
+### Send a trace
+From the root of this repository,
+```
+$ cd examples/secure-tracing
+$ chmod +x telemetrygen
+$ ./telemetrygen traces --traces 1 --otlp-endpoint 127.0.0.1:10000 --ca-cert 'certs/ca.crt' --mtls --client-cert 'certs/tracing-client.crt' --client-key 'certs/tracing-client.key'
+```
+
+Verify traces are captured and sent to console running `docker compose up`, similar to following ...
+```
+secure-tracing-otel-collector-1 | -> service.name: Str(telemetrygen)
+secure-tracing-otel-collector-1 | ScopeSpans #0
+secure-tracing-otel-collector-1 | ScopeSpans SchemaURL:
+secure-tracing-otel-collector-1 | InstrumentationScope telemetrygen
+secure-tracing-otel-collector-1 | Span #0
+secure-tracing-otel-collector-1 | Trace ID : 0fe7ca900fda938ce918f8b2d82d6ae9
+secure-tracing-otel-collector-1 | Parent ID : 1011b3f973049923
+secure-tracing-otel-collector-1 | ID : 65f3cfe524375dd4
+secure-tracing-otel-collector-1 | Name : okey-dokey
+secure-tracing-otel-collector-1 | Kind : Server
+...
+secure-tracing-otel-collector-1 | Attributes:
+secure-tracing-otel-collector-1 | -> net.peer.ip: Str(1.2.3.4)
+secure-tracing-otel-collector-1 | -> peer.service: Str(telemetrygen-client)
+...
+
+```
+## Shutdown Services
+```
+$ docker compose down
+```
diff --git a/examples/secure-tracing/certs/Makefile b/examples/secure-tracing/certs/Makefile
new file mode 100644
index 000000000000..54185145249f
--- /dev/null
+++ b/examples/secure-tracing/certs/Makefile
@@ -0,0 +1,39 @@
+
+all: ca.crt envoy.crt tracing-client.crt otel-collector.crt
+
+clean:
+ rm -rf *.key *.crt
+ rm -f *.key *.crt *.csr ca.srl
+
+ca.key:
+ openssl genrsa -out ca.key 2048
+
+ca.crt: ca.key
+ openssl req -x509 -new -nodes -key ca.key -sha256 -days 365 -out ca.crt -config ca.ext
+
+envoy.key:
+ openssl genrsa -out envoy.key 2048
+
+envoy.csr: envoy.key
+ openssl req -new -key envoy.key -out envoy.csr -config envoy.ext -extensions 'v3_req'
+
+envoy.crt: envoy.csr
+ openssl x509 -req -in envoy.csr -CA ca.crt -CAkey ca.key -out envoy.crt -CAcreateserial -days 365 -sha256 -extfile envoy.ext -extensions 'v3_req'
+
+tracing-client.key:
+ openssl genrsa -out tracing-client.key 2048
+
+tracing-client.csr: tracing-client.key
+ openssl req -new -key tracing-client.key -out tracing-client.csr -config tracing-client.ext -extensions 'v3_req'
+
+tracing-client.crt: tracing-client.csr
+ openssl x509 -req -in tracing-client.csr -CA ca.crt -CAkey ca.key -out tracing-client.crt -CAcreateserial -days 365 -sha256 -extfile tracing-client.ext -extensions 'v3_req'
+
+otel-collector.key:
+ openssl genrsa -out otel-collector.key 2048
+
+otel-collector.csr: otel-collector.key
+ openssl req -new -key otel-collector.key -out otel-collector.csr -config otel-collector.ext -extensions 'v3_req'
+
+otel-collector.crt: otel-collector.csr
+ openssl x509 -req -in otel-collector.csr -CA ca.crt -CAkey ca.key -out otel-collector.crt -CAcreateserial -days 365 -sha256 -extfile otel-collector.ext -extensions 'v3_req'
diff --git a/examples/secure-tracing/certs/ca.ext b/examples/secure-tracing/certs/ca.ext
new file mode 100644
index 000000000000..ad89873ecd3c
--- /dev/null
+++ b/examples/secure-tracing/certs/ca.ext
@@ -0,0 +1,11 @@
+[req]
+distinguished_name = req_distinguished_name
+prompt = no
+
+[req_distinguished_name]
+C = US
+ST = CA
+L = Cupertino
+O = Example
+OU = Local Development
+CN = ca
diff --git a/examples/secure-tracing/certs/envoy.ext b/examples/secure-tracing/certs/envoy.ext
new file mode 100644
index 000000000000..09f2fcfeb8f3
--- /dev/null
+++ b/examples/secure-tracing/certs/envoy.ext
@@ -0,0 +1,22 @@
+[req]
+distinguished_name = req_distinguished_name
+x509_extensions = v3_req
+prompt = no
+
+[req_distinguished_name]
+C = US
+ST = CA
+L = Cupertino
+O = Example
+OU = Local Development
+CN = envoy-example
+
+[v3_req]
+keyUsage = keyEncipherment, dataEncipherment
+extendedKeyUsage = serverAuth
+subjectAltName = @alt_names
+
+[alt_names]
+DNS.1 = envoy-example
+DNS.2 = localhost
+IP.1 = 127.0.0.1
diff --git a/examples/secure-tracing/certs/otel-collector.ext b/examples/secure-tracing/certs/otel-collector.ext
new file mode 100644
index 000000000000..bcce792808c8
--- /dev/null
+++ b/examples/secure-tracing/certs/otel-collector.ext
@@ -0,0 +1,23 @@
+[req]
+distinguished_name = req_distinguished_name
+x509_extensions = v3_req
+prompt = no
+
+[req_distinguished_name]
+C = US
+ST = CA
+L = Cupertino
+O = Example
+OU = Local Development
+CN = otel-collector-example
+
+[v3_req]
+keyUsage = keyEncipherment, dataEncipherment
+extendedKeyUsage = serverAuth
+subjectAltName = @alt_names
+
+[alt_names]
+DNS.1 = otel-collector
+DNS.2 = otel-collector.default.svc.cluster.local
+DNS.3 = localhost
+IP.1 = 127.0.0.1
diff --git a/examples/secure-tracing/certs/tracing-client.ext b/examples/secure-tracing/certs/tracing-client.ext
new file mode 100644
index 000000000000..8dc741bdd9dd
--- /dev/null
+++ b/examples/secure-tracing/certs/tracing-client.ext
@@ -0,0 +1,20 @@
+[req]
+distinguished_name = req_distinguished_name
+x509_extensions = v3_req
+prompt = no
+
+[req_distinguished_name]
+C = US
+ST = CA
+L = Cupertino
+O = Example
+OU = Local Development
+CN = traces-client
+
+[v3_req]
+keyUsage = keyEncipherment, digitalSignature
+extendedKeyUsage = clientAuth
+subjectAltName = @alt_names
+
+[alt_names]
+URI.1 = trace-client:group-x:tenant-a
diff --git a/examples/secure-tracing/docker-compose.yaml b/examples/secure-tracing/docker-compose.yaml
new file mode 100644
index 000000000000..fc936a2958ba
--- /dev/null
+++ b/examples/secure-tracing/docker-compose.yaml
@@ -0,0 +1,26 @@
+version: '3'
+services:
+ envoy:
+ image: envoyproxy/envoy-alpine:v1.21-latest
+ command: ["/usr/local/bin/envoy", "-c", "/etc/envoy-config.yaml", "-l", "debug"]
+ ports:
+ - "10000:10000"
+ - "9901:9901"
+ volumes:
+ - ./certs/envoy.crt:/etc/envoy.crt
+ - ./certs/envoy.key:/etc/envoy.key
+ - ./certs/ca.crt:/etc/ca.crt
+ - ./envoy-config.yaml:/etc/envoy-config.yaml
+ otel-collector:
+ image: otel/opentelemetry-collector:0.97.0
+ command: ["--config=/etc/otel-collector-config.yaml"]
+ volumes:
+ - ./certs/otel-collector.crt:/etc/otel-collector.crt
+ - ./certs/otel-collector.key:/etc/otel-collector.key
+ - ./certs/ca.crt:/etc/ca.crt
+ - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
+ ports:
+ - "13133:13133" # health_check extension
+ - "55690" # OTLP gRPC receiver
+ depends_on:
+ - envoy
diff --git a/examples/secure-tracing/envoy-config.yaml b/examples/secure-tracing/envoy-config.yaml
new file mode 100644
index 000000000000..951782dff6e7
--- /dev/null
+++ b/examples/secure-tracing/envoy-config.yaml
@@ -0,0 +1,70 @@
+admin:
+ address:
+ socket_address:
+ protocol: TCP
+ address: 0.0.0.0
+ port_value: 9901
+static_resources:
+ listeners:
+ - name: listener_0
+ address:
+ socket_address: { address: 0.0.0.0, port_value: 10000 }
+ filter_chains:
+ - filters:
+ - name: envoy.filters.network.http_connection_manager
+ typed_config:
+ "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
+ stat_prefix: ingress_http
+ route_config:
+ name: local_route
+ virtual_hosts:
+ - name: local_service
+ domains: ["*"]
+ routes:
+ - match: { prefix: "/" }
+ route: { cluster: collector_service }
+ http_filters:
+ - name: envoy.filters.http.router
+ typed_config:
+ "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router
+ transport_socket:
+ name: envoy.transport_sockets.tls
+ typed_config:
+ "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.DownstreamTlsContext
+ require_client_certificate: true
+ common_tls_context:
+ # h2 If the listener is going to support both HTTP/2 and HTTP/1.1.
+ alpn_protocols: "h2"
+ tls_certificates:
+ - certificate_chain:
+ filename: "/etc/envoy.crt"
+ private_key:
+ filename: "/etc/envoy.key"
+ validation_context:
+ match_typed_subject_alt_names:
+ - san_type: URI
+ matcher:
+ # Match tenant by two levels: group-id and tenant-id.
+ exact: "trace-client:group-x:tenant-a"
+ trusted_ca:
+ filename: "/etc/ca.crt"
+
+ clusters:
+ - name: collector_service
+ connect_timeout: 25s
+ type: LOGICAL_DNS
+ lb_policy: ROUND_ROBIN
+ http2_protocol_options: { }
+ load_assignment:
+ cluster_name: collector_service
+ endpoints:
+ - lb_endpoints:
+ - endpoint:
+ address:
+ socket_address:
+ address: otel-collector
+ port_value: 55690
+ transport_socket:
+ name: envoy.transport_sockets.tls
+ typed_config:
+ "@type": type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext
diff --git a/examples/secure-tracing/otel-collector-config.yaml b/examples/secure-tracing/otel-collector-config.yaml
new file mode 100644
index 000000000000..c5da2ef697be
--- /dev/null
+++ b/examples/secure-tracing/otel-collector-config.yaml
@@ -0,0 +1,23 @@
+receivers:
+ otlp:
+ protocols:
+ grpc:
+ endpoint: 0.0.0.0:55690
+ tls:
+ cert_file: /etc/otel-collector.crt
+ key_file: /etc/otel-collector.key
+
+processors:
+ batch:
+
+exporters:
+ debug:
+ verbosity: detailed
+
+service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [debug]
+
diff --git a/exporter/alertmanagerexporter/README.md b/exporter/alertmanagerexporter/README.md
index 08ef4d0b5bf5..3ef900df2304 100644
--- a/exporter/alertmanagerexporter/README.md
+++ b/exporter/alertmanagerexporter/README.md
@@ -3,15 +3,14 @@
| Status | |
| ------------- |-----------|
| Stability | [development]: traces |
-| Distributions | [contrib] |
+| Distributions | [] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Falertmanager%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Falertmanager) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Falertmanager%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Falertmanager) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jpkrohling](https://www.github.com/jpkrohling), [@sokoide](https://www.github.com/sokoide), [@mcube8](https://www.github.com/mcube8) |
[development]: https://github.com/open-telemetry/opentelemetry-collector#development
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-Exports OTEL Events (SpanEvent in Tracing added by AddEvent API) as Alerts to [Alertmanager] (https://prometheus.io/docs/alerting/latest/alertmanager/) back-end to notify Errors or Change events.
+Exports OTEL Events (SpanEvent in Tracing added by AddEvent API) as Alerts to [Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/) back-end to notify Errors or Change events.
Supported pipeline types: traces
@@ -19,8 +18,8 @@ Supported pipeline types: traces
The following settings are required:
-- `endpoint` : Alertmanager endpoint to send events
-- `severity` (default info): Default severity for Alerts
+- `endpoint`: Alertmanager endpoint to send events
+- `severity`: Default severity for Alerts
The following settings are optional:
@@ -29,9 +28,8 @@ The following settings are optional:
- [HTTP settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/confighttp/README.md)
- [TLS and mTLS settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/configtls/README.md)
- `generator_url` is the source of the alerts to be used in Alertmanager's payload. The default value is "opentelemetry-collector", and can be set to the URL of the opentelemetry collector.
-- `severity_attribute`is the spanevent Attribute name which can be used instead of default severity string in Alert payload
- eg: If severity_attribute is set to "foo" and the SpanEvent has an attribute called foo, foo's attribute value will be used as the severity value for that particular Alert generated from the SpanEvent.
-
+- `severity_attribute` is the SpanEvent Attribute name which can be used instead of default severity string in Alert payload
+ e.g.: If `severity_attribute` is set to "foo" and the SpanEvent has an attribute called foo, foo's attribute value will be used as the severity value for that particular Alert generated from the SpanEvent.
Example config:
@@ -57,4 +55,4 @@ exporters:
max_interval: 60s
max_elapsed_time: 10m
generator_url: "opentelemetry-collector"
-```
\ No newline at end of file
+```
diff --git a/exporter/alertmanagerexporter/alertmanager_exporter.go b/exporter/alertmanagerexporter/alertmanager_exporter.go
index 8050fbf1f349..4288c7acba71 100644
--- a/exporter/alertmanagerexporter/alertmanager_exporter.go
+++ b/exporter/alertmanagerexporter/alertmanager_exporter.go
@@ -4,17 +4,27 @@
package alertmanagerexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter"
import (
+ "bytes"
"context"
+ "encoding/json"
+ "fmt"
+ "io"
+ "net/http"
+ "time"
+ "github.com/prometheus/common/model"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
+ "go.uber.org/zap"
)
type alertmanagerExporter struct {
config *Config
+ client *http.Client
tracesMarshaler ptrace.Marshaler
settings component.TelemetrySettings
endpoint string
@@ -23,20 +33,167 @@ type alertmanagerExporter struct {
severityAttribute string
}
-func (s *alertmanagerExporter) pushTraces(_ context.Context, _ ptrace.Traces) error {
+type alertmanagerEvent struct {
+ spanEvent ptrace.SpanEvent
+ traceID string
+ spanID string
+ severity string
+}
+
+func (s *alertmanagerExporter) convertEventSliceToArray(eventSlice ptrace.SpanEventSlice, traceID pcommon.TraceID, spanID pcommon.SpanID) []*alertmanagerEvent {
+ if eventSlice.Len() > 0 {
+ events := make([]*alertmanagerEvent, eventSlice.Len())
- // To Be Implemented
+ for i := 0; i < eventSlice.Len(); i++ {
+ var severity string
+ severityAttrValue, ok := eventSlice.At(i).Attributes().Get(s.severityAttribute)
+ if ok {
+ severity = severityAttrValue.AsString()
+ } else {
+ severity = s.defaultSeverity
+ }
+ event := alertmanagerEvent{
+ spanEvent: eventSlice.At(i),
+ traceID: traceID.String(),
+ spanID: spanID.String(),
+ severity: severity,
+ }
+
+ events[i] = &event
+ }
+ return events
+ }
return nil
}
-func (s *alertmanagerExporter) start(_ context.Context, _ component.Host) error {
+func (s *alertmanagerExporter) extractEvents(td ptrace.Traces) []*alertmanagerEvent {
+
+ // Stitch parent trace ID and span ID
+ rss := td.ResourceSpans()
+ var events []*alertmanagerEvent
+ if rss.Len() == 0 {
+ return nil
+ }
+
+ for i := 0; i < rss.Len(); i++ {
+ resource := rss.At(i).Resource()
+ ilss := rss.At(i).ScopeSpans()
+
+ if resource.Attributes().Len() == 0 && ilss.Len() == 0 {
+ return nil
+ }
+
+ for j := 0; j < ilss.Len(); j++ {
+ spans := ilss.At(j).Spans()
+ for k := 0; k < spans.Len(); k++ {
+ traceID := spans.At(k).TraceID()
+ spanID := spans.At(k).SpanID()
+ events = append(events, s.convertEventSliceToArray(spans.At(k).Events(), traceID, spanID)...)
+ }
+ }
+ }
+ return events
+}
+
+func createAnnotations(event *alertmanagerEvent) model.LabelSet {
+ labelMap := make(model.LabelSet, event.spanEvent.Attributes().Len()+2)
+ event.spanEvent.Attributes().Range(func(key string, attr pcommon.Value) bool {
+ labelMap[model.LabelName(key)] = model.LabelValue(attr.AsString())
+ return true
+ })
+ labelMap["TraceID"] = model.LabelValue(event.traceID)
+ labelMap["SpanID"] = model.LabelValue(event.spanID)
+ return labelMap
+}
+
+func (s *alertmanagerExporter) convertEventsToAlertPayload(events []*alertmanagerEvent) []model.Alert {
+
+ payload := make([]model.Alert, len(events))
+
+ for i, event := range events {
+ annotations := createAnnotations(event)
+
+ alert := model.Alert{
+ StartsAt: time.Now(),
+ Labels: model.LabelSet{"severity": model.LabelValue(event.severity), "event_name": model.LabelValue(event.spanEvent.Name())},
+ Annotations: annotations,
+ GeneratorURL: s.generatorURL,
+ }
+
+ payload[i] = alert
+ }
+ return payload
+}
+
+func (s *alertmanagerExporter) postAlert(ctx context.Context, payload []model.Alert) error {
+
+ msg, err := json.Marshal(payload)
+ if err != nil {
+ return fmt.Errorf("error marshaling alert to JSON: %w", err)
+ }
+
+ req, err := http.NewRequestWithContext(ctx, "POST", s.endpoint, bytes.NewBuffer(msg))
+ if err != nil {
+ return fmt.Errorf("error creating HTTP request: %w", err)
+ }
+ req.Header.Set("Content-Type", "application/json")
- // To Be Implemented
+ resp, err := s.client.Do(req)
+ if err != nil {
+ return fmt.Errorf("error sending HTTP request: %w", err)
+ }
+
+ defer func() {
+ if closeErr := resp.Body.Close(); closeErr != nil {
+ s.settings.Logger.Warn("failed to close response body", zap.Error(closeErr))
+ }
+ }()
+
+ _, err = io.ReadAll(resp.Body)
+ if err != nil {
+ return fmt.Errorf("failed to read response body %w", err)
+ }
+
+ if resp.StatusCode != http.StatusOK {
+ s.settings.Logger.Debug("post request to Alertmanager failed", zap.Error(err))
+ return fmt.Errorf("request POST %s failed - %q", req.URL.String(), resp.Status)
+ }
+ return nil
+}
+
+func (s *alertmanagerExporter) pushTraces(ctx context.Context, td ptrace.Traces) error {
+
+ events := s.extractEvents(td)
+
+ if len(events) == 0 {
+ return nil
+ }
+
+ alert := s.convertEventsToAlertPayload(events)
+ err := s.postAlert(ctx, alert)
+
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (s *alertmanagerExporter) start(ctx context.Context, host component.Host) error {
+
+ client, err := s.config.ClientConfig.ToClientContext(ctx, host, s.settings)
+ if err != nil {
+ return fmt.Errorf("failed to create HTTP Client: %w", err)
+ }
+ s.client = client
return nil
}
func (s *alertmanagerExporter) shutdown(context.Context) error {
- // To Be Implemented
+
+ if s.client != nil {
+ s.client.CloseIdleConnections()
+ }
return nil
}
@@ -46,7 +203,7 @@ func newAlertManagerExporter(cfg *Config, set component.TelemetrySettings) *aler
config: cfg,
settings: set,
tracesMarshaler: &ptrace.JSONMarshaler{},
- endpoint: cfg.HTTPClientSettings.Endpoint,
+ endpoint: fmt.Sprintf("%s/api/v1/alerts", cfg.ClientConfig.Endpoint),
generatorURL: cfg.GeneratorURL,
defaultSeverity: cfg.DefaultSeverity,
severityAttribute: cfg.SeverityAttribute,
@@ -54,6 +211,7 @@ func newAlertManagerExporter(cfg *Config, set component.TelemetrySettings) *aler
}
func newTracesExporter(ctx context.Context, cfg component.Config, set exporter.CreateSettings) (exporter.Traces, error) {
+
config := cfg.(*Config)
s := newAlertManagerExporter(config, set.TelemetrySettings)
@@ -64,10 +222,9 @@ func newTracesExporter(ctx context.Context, cfg component.Config, set exporter.C
cfg,
s.pushTraces,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- // Disable Timeout/RetryOnFailure and SendingQueue
exporterhelper.WithStart(s.start),
exporterhelper.WithTimeout(config.TimeoutSettings),
- exporterhelper.WithRetry(config.RetrySettings),
+ exporterhelper.WithRetry(config.BackoffConfig),
exporterhelper.WithQueue(config.QueueSettings),
exporterhelper.WithShutdown(s.shutdown),
)
diff --git a/exporter/alertmanagerexporter/alertmanager_exporter_test.go b/exporter/alertmanagerexporter/alertmanager_exporter_test.go
new file mode 100644
index 000000000000..29ceafbbeb8d
--- /dev/null
+++ b/exporter/alertmanagerexporter/alertmanager_exporter_test.go
@@ -0,0 +1,421 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package alertmanagerexporter
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "testing"
+ "time"
+
+ "github.com/prometheus/common/model"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configtls"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil"
+)
+
+func createTracesAndSpan() (ptrace.Traces, ptrace.Span) {
+ // make a trace
+ traces := ptrace.NewTraces()
+ // add trace attributes
+ rs := traces.ResourceSpans().AppendEmpty()
+ resource := rs.Resource()
+ attrs := resource.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4) // service name + 3 attributes
+ attrs.PutStr(conventions.AttributeServiceName, "unittest-resource")
+ attrs.PutStr("attr1", "unittest-foo")
+ attrs.PutInt("attr2", 40)
+ attrs.PutDouble("attr3", 3.14)
+
+ // add a span
+ spans := rs.ScopeSpans().AppendEmpty().Spans()
+ spans.EnsureCapacity(1)
+ span := spans.AppendEmpty()
+ // add span attributes
+ span.SetTraceID(pcommon.TraceID([16]byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2}))
+ span.SetSpanID(pcommon.SpanID([8]byte{0, 0, 0, 0, 0, 0, 0, 3}))
+ span.SetName("unittest-span")
+ startTime := pcommon.Timestamp(time.Now().UnixNano())
+ span.SetStartTimestamp(startTime)
+ span.SetEndTimestamp(startTime + 1)
+ span.SetParentSpanID(pcommon.SpanID([8]byte{0, 0, 0, 0, 0, 0, 0, 1}))
+ attrs = span.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4)
+ attrs.PutStr("attr1", "unittest-bar")
+ attrs.PutInt("attr2", 41)
+ attrs.PutDouble("attr3", 4.14)
+
+ return traces, span
+}
+
+func TestAlertManagerExporterExtractEvents(t *testing.T) {
+ tests := []struct {
+ name string
+ events int
+ }{
+ {"TestAlertManagerExporterExtractEvents0", 0},
+ {"TestAlertManagerExporterExtractEvents1", 1},
+ {"TestAlertManagerExporterExtractEvents5", 5},
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ set := exportertest.NewNopCreateSettings()
+ am := newAlertManagerExporter(cfg, set.TelemetrySettings)
+ require.NotNil(t, am)
+
+ // make traces & a span
+ traces, span := createTracesAndSpan()
+
+ // add events
+ for i := 0; i < tt.events; i++ {
+ event := span.Events().AppendEmpty()
+ // add event attributes
+ startTime := pcommon.Timestamp(time.Now().UnixNano())
+ event.SetTimestamp(startTime + 3)
+ event.SetName(fmt.Sprintf("unittest-event-%d", i))
+ attrs := event.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4)
+ attrs.PutStr("attr1", fmt.Sprintf("unittest-baz-%d", i))
+ attrs.PutInt("attr2", 42)
+ attrs.PutDouble("attr3", 5.14)
+ }
+
+ // test - events
+ got := am.extractEvents(traces)
+ assert.Equal(t, tt.events, len(got))
+ })
+ }
+}
+
+func TestAlertManagerExporterEventNameAttributes(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ set := exportertest.NewNopCreateSettings()
+ am := newAlertManagerExporter(cfg, set.TelemetrySettings)
+ require.NotNil(t, am)
+
+ // make traces & a span
+ traces, span := createTracesAndSpan()
+
+ // add a span event w/ 3 attributes
+ event := span.Events().AppendEmpty()
+ // add event attributes
+ startTime := pcommon.Timestamp(time.Now().UnixNano())
+ event.SetTimestamp(startTime + 3)
+ event.SetName("unittest-event")
+ attrs := event.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4)
+ attrs.PutStr("attr1", "unittest-baz")
+ attrs.PutInt("attr2", 42)
+ attrs.PutDouble("attr3", 5.14)
+
+ // test - 1 event
+ got := am.extractEvents(traces)
+
+ // test - result length
+ assert.Equal(t, 1, len(got))
+
+ // test - count of attributes
+ assert.Equal(t, 3, got[0].spanEvent.Attributes().Len())
+ attr, b := got[0].spanEvent.Attributes().Get("attr1")
+ assert.Equal(t, true, b)
+ assert.Equal(t, "unittest-event", got[0].spanEvent.Name())
+ assert.Equal(t, "unittest-baz", attr.AsString())
+ attr, b = got[0].spanEvent.Attributes().Get("attr3")
+ assert.Equal(t, true, b)
+ assert.Equal(t, 5.14, attr.Double())
+}
+
+func TestAlertManagerExporterSeverity(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.SeverityAttribute = "foo"
+ set := exportertest.NewNopCreateSettings()
+ am := newAlertManagerExporter(cfg, set.TelemetrySettings)
+ require.NotNil(t, am)
+
+ // make traces & a span
+ traces, span := createTracesAndSpan()
+
+ // add a span event with severity attribute
+ event := span.Events().AppendEmpty()
+ // add event attributes
+ startTime := pcommon.Timestamp(time.Now().UnixNano())
+ event.SetTimestamp(startTime + 3)
+ event.SetName("unittest-event")
+ attrs := event.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4)
+ attrs.PutStr("attr1", "unittest-baz")
+ attrs.PutStr("foo", "debug")
+
+ // add a span event without severity attribute
+ event = span.Events().AppendEmpty()
+ // add event attributes
+ startTime = pcommon.Timestamp(time.Now().UnixNano())
+ event.SetTimestamp(startTime + 3)
+ event.SetName("unittest-event")
+ attrs = event.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4)
+ attrs.PutStr("attr1", "unittest-baz")
+ attrs.PutStr("bar", "debug")
+
+ // test - 0 event
+ got := am.extractEvents(traces)
+ alerts := am.convertEventsToAlertPayload(got)
+
+ ls := model.LabelSet{"event_name": "unittest-event", "severity": "debug"}
+ assert.Equal(t, ls, alerts[0].Labels)
+
+ ls = model.LabelSet{"event_name": "unittest-event", "severity": "info"}
+ assert.Equal(t, ls, alerts[1].Labels)
+
+}
+
+func TestAlertManagerExporterNoDefaultSeverity(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ set := exportertest.NewNopCreateSettings()
+ am := newAlertManagerExporter(cfg, set.TelemetrySettings)
+ require.NotNil(t, am)
+
+ // make traces & a span
+ traces, span := createTracesAndSpan()
+
+ // add a span event with severity attribute
+ event := span.Events().AppendEmpty()
+ // add event attributes
+ startTime := pcommon.Timestamp(time.Now().UnixNano())
+ event.SetTimestamp(startTime + 3)
+ event.SetName("unittest-event")
+ attrs := event.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4)
+ attrs.PutStr("attr1", "unittest-baz")
+ attrs.PutStr("attr2", "debug")
+
+ // test - 0 event
+ got := am.extractEvents(traces)
+ alerts := am.convertEventsToAlertPayload(got)
+
+ ls := model.LabelSet{"event_name": "unittest-event", "severity": "info"}
+ assert.Equal(t, ls, alerts[0].Labels)
+
+}
+
+func TestAlertManagerExporterAlertPayload(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ set := exportertest.NewNopCreateSettings()
+ am := newAlertManagerExporter(cfg, set.TelemetrySettings)
+
+ require.NotNil(t, am)
+
+ // make traces & a span
+ _, span := createTracesAndSpan()
+
+ // add a span event w/ 3 attributes
+ event := span.Events().AppendEmpty()
+ // add event attributes
+ startTime := pcommon.Timestamp(time.Now().UTC().Unix())
+ event.SetTimestamp(startTime + 3)
+ event.SetName("unittest-event")
+ attrs := event.Attributes()
+ attrs.Clear()
+ attrs.EnsureCapacity(4)
+ attrs.PutStr("attr1", "unittest-baz")
+ attrs.PutInt("attr2", 42)
+ attrs.PutDouble("attr3", 5.14)
+
+ var events []*alertmanagerEvent
+ events = append(events, &alertmanagerEvent{
+ spanEvent: event,
+ severity: am.defaultSeverity,
+ traceID: "0000000000000002",
+ spanID: "00000002",
+ })
+
+ got := am.convertEventsToAlertPayload(events)
+
+ // test - count of attributes
+ expect := model.Alert{
+ Labels: model.LabelSet{"severity": "info", "event_name": "unittest-event"},
+ Annotations: model.LabelSet{"SpanID": "00000002", "TraceID": "0000000000000002", "attr1": "unittest-baz", "attr2": "42", "attr3": "5.14"},
+ GeneratorURL: "opentelemetry-collector",
+ }
+ assert.Equal(t, expect.Labels, got[0].Labels)
+ assert.Equal(t, expect.Annotations, got[0].Annotations)
+ assert.Equal(t, expect.GeneratorURL, got[0].GeneratorURL)
+
+}
+
+func TestAlertManagerTracesExporterNoErrors(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ lte, err := newTracesExporter(context.Background(), cfg, exportertest.NewNopCreateSettings())
+ fmt.Println(lte)
+ require.NotNil(t, lte)
+ assert.NoError(t, err)
+}
+
+type (
+ MockServer struct {
+ mockserver *httptest.Server // this means MockServer aggreagates 'httptest.Server', but can it's more like inheritance in C++
+ fooCalledSuccessfully bool // this is false by default
+ }
+)
+
+func newMockServer(t *testing.T) *MockServer {
+ mock := MockServer{
+ fooCalledSuccessfully: false,
+ }
+
+ handler := http.NewServeMux()
+ handler.HandleFunc("/api/v1/alerts", func(w http.ResponseWriter, r *http.Request) {
+ _, errWrite := fmt.Fprint(w, "test")
+ assert.NoError(t, errWrite)
+ _, err := io.ReadAll(r.Body)
+ if err != nil {
+ t.Fatal(err)
+ }
+ mock.fooCalledSuccessfully = true
+ _, _ = w.Write([]byte("hello"))
+ })
+ mock.mockserver = httptest.NewServer(handler)
+ return &mock
+}
+
+func TestAlertManagerPostAlert(t *testing.T) {
+ mock := newMockServer(t)
+ defer func() { mock.mockserver.Close() }()
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+
+ var alerts []model.Alert
+ alerts = append(alerts, model.Alert{
+ Labels: model.LabelSet{"new": "info"},
+ Annotations: model.LabelSet{"foo": "bar1"},
+ GeneratorURL: "http://example.com/alert",
+ })
+
+ cfg.Endpoint = mock.mockserver.URL
+ set := exportertest.NewNopCreateSettings()
+ am := newAlertManagerExporter(cfg, set.TelemetrySettings)
+ err := am.start(context.Background(), componenttest.NewNopHost())
+
+ assert.NoError(t, err)
+
+ err = am.postAlert(context.Background(), alerts)
+ assert.NoError(t, err)
+ if mock.fooCalledSuccessfully == false {
+ t.Errorf("mock server wasn't called")
+ }
+}
+
+func TestClientConfig(t *testing.T) {
+ endpoint := "http://" + testutil.GetAvailableLocalAddress(t)
+ fmt.Println(endpoint)
+ tests := []struct {
+ name string
+ config *Config
+ mustFailOnCreate bool
+ mustFailOnStart bool
+ }{
+ {
+ name: "UseSecure",
+ config: &Config{
+ ClientConfig: confighttp.ClientConfig{
+ Endpoint: endpoint,
+ TLSSetting: configtls.ClientConfig{
+ Insecure: false,
+ },
+ },
+ },
+ },
+ {
+ name: "Headers",
+ config: &Config{
+ ClientConfig: confighttp.ClientConfig{
+ Endpoint: endpoint,
+ Headers: map[string]configopaque.String{
+ "hdr1": "val1",
+ "hdr2": "val2",
+ },
+ },
+ },
+ },
+ {
+ name: "CaCert",
+ config: &Config{
+ ClientConfig: confighttp.ClientConfig{
+ Endpoint: endpoint,
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
+ CAFile: "testdata/test_cert.pem",
+ },
+ },
+ },
+ },
+ },
+ {
+ name: "CertPemFileError",
+ config: &Config{
+ ClientConfig: confighttp.ClientConfig{
+ Endpoint: endpoint,
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
+ CAFile: "nosuchfile",
+ },
+ },
+ },
+ },
+ mustFailOnCreate: false,
+ mustFailOnStart: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ set := exportertest.NewNopCreateSettings()
+ am := newAlertManagerExporter(tt.config, set.TelemetrySettings)
+
+ exp, err := newTracesExporter(context.Background(), tt.config, set)
+ if tt.mustFailOnCreate {
+ assert.Error(t, err)
+ return
+ }
+ assert.NoError(t, err)
+ assert.NotNil(t, exp)
+
+ err = am.start(context.Background(), componenttest.NewNopHost())
+ if tt.mustFailOnStart {
+ assert.Error(t, err)
+ }
+
+ t.Cleanup(func() {
+ require.NoError(t, am.shutdown(context.Background()))
+ })
+ })
+ }
+}
diff --git a/exporter/alertmanagerexporter/config.go b/exporter/alertmanagerexporter/config.go
index 54ef65734a7f..3948dc360137 100644
--- a/exporter/alertmanagerexporter/config.go
+++ b/exporter/alertmanagerexporter/config.go
@@ -4,8 +4,11 @@
package alertmanagerexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter"
import (
+ "errors"
+
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -13,17 +16,24 @@ import (
type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ BackoffConfig configretry.BackOffConfig `mapstructure:"retry_on_failure"`
- confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
- GeneratorURL string `mapstructure:"generator_url"`
- DefaultSeverity string `mapstructure:"severity"`
- SeverityAttribute string `mapstructure:"severity_attribute"`
+ confighttp.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ GeneratorURL string `mapstructure:"generator_url"`
+ DefaultSeverity string `mapstructure:"severity"`
+ SeverityAttribute string `mapstructure:"severity_attribute"`
}
var _ component.Config = (*Config)(nil)
// Validate checks if the exporter configuration is valid
func (cfg *Config) Validate() error {
+
+ if cfg.ClientConfig.Endpoint == "" {
+ return errors.New("endpoint must be non-empty")
+ }
+ if cfg.DefaultSeverity == "" {
+ return errors.New("severity must be non-empty")
+ }
return nil
}
diff --git a/exporter/alertmanagerexporter/config_test.go b/exporter/alertmanagerexporter/config_test.go
index 03a45f251150..a31c66fca227 100644
--- a/exporter/alertmanagerexporter/config_test.go
+++ b/exporter/alertmanagerexporter/config_test.go
@@ -14,6 +14,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -48,7 +49,7 @@ func TestLoadConfig(t *testing.T) {
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackoffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -61,15 +62,15 @@ func TestLoadConfig(t *testing.T) {
NumConsumers: 2,
QueueSize: 10,
},
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Headers: map[string]configopaque.String{
"can you have a . here?": "F0000000-0000-0000-0000-000000000000",
"header1": "234",
"another": "somevalue",
},
Endpoint: "a.new.alertmanager.target:9093",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/var/lib/mycert.pem",
},
},
@@ -95,3 +96,46 @@ func TestLoadConfig(t *testing.T) {
})
}
}
+
+func TestConfig_Validate(t *testing.T) {
+ tests := []struct {
+ name string
+ cfg *Config
+ wantErr string
+ }{
+ {
+ name: "NoEndpoint",
+ cfg: func() *Config {
+ cfg := createDefaultConfig().(*Config)
+ cfg.ClientConfig.Endpoint = ""
+ return cfg
+ }(),
+ wantErr: "endpoint must be non-empty",
+ },
+ {
+ name: "NoSeverity",
+ cfg: func() *Config {
+ cfg := createDefaultConfig().(*Config)
+ cfg.DefaultSeverity = ""
+ return cfg
+ }(),
+ wantErr: "severity must be non-empty",
+ },
+ {
+ name: "Success",
+ cfg: createDefaultConfig().(*Config),
+ wantErr: "",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ err := tt.cfg.Validate()
+ if tt.wantErr == "" {
+ require.NoError(t, err)
+ } else {
+ require.EqualError(t, err, tt.wantErr)
+ }
+ })
+ }
+}
diff --git a/exporter/alertmanagerexporter/factory.go b/exporter/alertmanagerexporter/factory.go
index 5ec549fa5e70..12155d32d6a0 100644
--- a/exporter/alertmanagerexporter/factory.go
+++ b/exporter/alertmanagerexporter/factory.go
@@ -11,6 +11,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -30,13 +31,12 @@ func createDefaultConfig() component.Config {
GeneratorURL: "opentelemetry-collector",
DefaultSeverity: "info",
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackoffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
- Endpoint: "http://localhost:9093",
- Timeout: 30 * time.Second,
- Headers: map[string]configopaque.String{},
- // We almost read 0 bytes, so no need to tune ReadBufferSize.
+ ClientConfig: confighttp.ClientConfig{
+ Endpoint: "http://localhost:9093",
+ Timeout: 30 * time.Second,
+ Headers: map[string]configopaque.String{},
WriteBufferSize: 512 * 1024,
},
}
diff --git a/exporter/alertmanagerexporter/generated_component_test.go b/exporter/alertmanagerexporter/generated_component_test.go
new file mode 100644
index 000000000000..3cc537978d84
--- /dev/null
+++ b/exporter/alertmanagerexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package alertmanagerexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/alertmanagerexporter/go.mod b/exporter/alertmanagerexporter/go.mod
index 824eaac9601a..718dbeaf5c2a 100644
--- a/exporter/alertmanagerexporter/go.mod
+++ b/exporter/alertmanagerexporter/go.mod
@@ -1,64 +1,77 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alertmanagerexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ github.com/cenkalti/backoff/v4 v4.3.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/prometheus/common v0.52.2
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
@@ -67,3 +80,5 @@ retract (
v0.76.1
v0.65.0
)
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
diff --git a/exporter/alertmanagerexporter/go.sum b/exporter/alertmanagerexporter/go.sum
index 2c44c444e3c5..4f016ba70eef 100644
--- a/exporter/alertmanagerexporter/go.sum
+++ b/exporter/alertmanagerexporter/go.sum
@@ -1,82 +1,56 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -86,119 +60,108 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -206,38 +169,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/alertmanagerexporter/internal/metadata/generated_status.go b/exporter/alertmanagerexporter/internal/metadata/generated_status.go
index a8c6c32b1f19..2f14617c3498 100644
--- a/exporter/alertmanagerexporter/internal/metadata/generated_status.go
+++ b/exporter/alertmanagerexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("alertmanager")
)
const (
- Type = "alertmanager"
TracesStability = component.StabilityLevelDevelopment
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/alertmanager")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/alertmanager")
+}
diff --git a/exporter/alertmanagerexporter/metadata.yaml b/exporter/alertmanagerexporter/metadata.yaml
index bb55d0b05d79..3be5f22d58a7 100644
--- a/exporter/alertmanagerexporter/metadata.yaml
+++ b/exporter/alertmanagerexporter/metadata.yaml
@@ -1,9 +1,21 @@
type: alertmanager
+scope_name: otelcol/alertmanager
status:
class: exporter
stability:
development: [traces]
- distributions: [contrib]
+ distributions: []
codeowners:
- active: [jpkrohling, sokoide, mcube8]
\ No newline at end of file
+ active: [jpkrohling, sokoide, mcube8]
+
+tests:
+ config:
+ endpoint: http://localhost:0
+ generator_url: opentelemetry-collector
+ severity: info
+ sending_queue:
+ enabled: false
+ retry_on_failure:
+ enabled: false
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/alertmanagerexporter/package_test.go b/exporter/alertmanagerexporter/package_test.go
new file mode 100644
index 000000000000..7b9d83eff120
--- /dev/null
+++ b/exporter/alertmanagerexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package alertmanagerexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/alertmanagerexporter/testdata/test_cert.pem b/exporter/alertmanagerexporter/testdata/test_cert.pem
new file mode 100644
index 000000000000..0cb62d37aad7
--- /dev/null
+++ b/exporter/alertmanagerexporter/testdata/test_cert.pem
@@ -0,0 +1,29 @@
+-----BEGIN CERTIFICATE-----
+MIIE6jCCAtICCQDVU4PtqpqADTANBgkqhkiG9w0BAQsFADA3MQswCQYDVQQGEwJV
+UzETMBEGA1UECAwKY2FsaWZvcm5pYTETMBEGA1UECgwKb3BlbmNlbnN1czAeFw0x
+OTAzMDQxODA3MjZaFw0yMDAzMDMxODA3MjZaMDcxCzAJBgNVBAYTAlVTMRMwEQYD
+VQQIDApjYWxpZm9ybmlhMRMwEQYDVQQKDApvcGVuY2Vuc3VzMIICIjANBgkqhkiG
+9w0BAQEFAAOCAg8AMIICCgKCAgEAy9JQiAOMzArcdiS4szbTuzg5yYijSSY6SvGj
+XMs4/LEFLxgGmFfyHXxoVQzV26lTu/AiUFlZi4JY2qlkZyPwmmmSg4fmzikpVPiC
+Vv9pvSIojs8gs0sHaOt40Q8ym43bNt3Mh8rYrs+XMERi6Ol9//j4LnfePkNU5uEo
+qC8KQamckaMR6UEHFNunyOwvNBsipgTPldQUPGVnCsNKk8olYGAXS7DR25bgbPli
+4T9VCSElsSPAODmyo+2MEDagVXa1vVYxKyO2k6oeBS0lsvdRqRTmGggcg0B/dk+a
+H1CL9ful0cu9P3dQif+hfGay8udPkwDLPEq1+WnjJFut3Pmbk3SqUCas5iWt76kK
+eKFh4k8fCy4yiaZxzvSbm9+bEBHAl0ZXd8pjvAsBfCKe6G9SBzE1DK4FjWiiEGCb
+5dGsyTKr33q3DekLvT3LF8ZeON/13d9toucX9PqG2HDwMP/Fb4WjQIzOc/H9wIak
+pf7u6QBDGUiCMmoDrp1d8RsI1RPbEhoywH0YlLmwgf+cr1dU7vlISf576EsGxFz4
++/sZjIBvZBHn/x0MH+bs4J8V3vMujfDoRdhL07bK7q/AkEALUxljKEfoWeqiuVzK
+F9BVv3xNhiua2kgPVbMNWPrQ5uotkNp8IykJ3QOuQ3p5pzxdGfpLd6f8gmJDmcbi
+AI9dWTcCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAVVi4t/Sumre+AGTaU7np9dl2
+tpllbES5ixe6m2uezt5wAzYNNyuQ2mMG2XrSkMy5gvBZRT9nRNSmLV8VEcxZihG0
+YHS5soXnLL3Jdlwxp98WTDPvM1ntxcHyEyqrrg9YDfKn4sOrr5vo2yZzoKwtxtc7
+lue9JormVx7GxMi7NwaUtCbnwAIcqJJpFjt1EhmJOxGqTJPgUvTBdeGvRj30c6fk
+pqpUdPbZ7RKPEtbLoMoCBujKnErv+H0G6Vp9WyCHN+Mi9uTMsGwH14cmJjmfwGDC
+8/WF4LdlawFnf/arIp9YcVwcP91d4ywyvbuuo2M7qdosQ7k4uRZ3tyggLYShS3RW
+BMEhMRDz9dM0oKGF+HnaS824BIh6O6Hn82Vt8uCKS7IbEX99/kkN1KcqqQe6Lwjq
+tG/lm4K5yf+FJVDivpZ9mYTvqTBjhTaOp6m3HYSNJfS0hLQVvEuBNXd8bHiXkcLp
+rmFOYUWsjxV1Qku3U5Rner0UpB2Fuw9nJcXuDgWG0gjwzAZ83y3du1VIZp0Ad8Vv
+IYpaucbImGJszMtNXn3l72K1wvQVIhm9eRwYc3QteJzweHaDsbytZEoS/GhTrZIT
+wRe5ZGrjJBJngRANRSm1BH8j6PjLem9mzPb2eytwJJA0lLhUk4vYproVvXcx0vow
+5F+5VB1YB8/tbWePmpo=
+-----END CERTIFICATE-----
\ No newline at end of file
diff --git a/exporter/alibabacloudlogserviceexporter/README.md b/exporter/alibabacloudlogserviceexporter/README.md
index 9709eda9e794..d1c7389b2567 100644
--- a/exporter/alibabacloudlogserviceexporter/README.md
+++ b/exporter/alibabacloudlogserviceexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Falibabacloudlogservice%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Falibabacloudlogservice) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Falibabacloudlogservice%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Falibabacloudlogservice) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@shabicheng](https://www.github.com/shabicheng), [@kongluoxing](https://www.github.com/kongluoxing), [@qiansheng91](https://www.github.com/qiansheng91) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter supports sending OpenTelemetry data to [LogService](https://www.alibabacloud.com/product/log-service).
diff --git a/exporter/alibabacloudlogserviceexporter/generated_component_test.go b/exporter/alibabacloudlogserviceexporter/generated_component_test.go
new file mode 100644
index 000000000000..3f21d51c8285
--- /dev/null
+++ b/exporter/alibabacloudlogserviceexporter/generated_component_test.go
@@ -0,0 +1,142 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package alibabacloudlogserviceexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ require.NoError(t, err)
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/alibabacloudlogserviceexporter/go.mod b/exporter/alibabacloudlogserviceexporter/go.mod
index 07f1188000f9..ed953fe48202 100644
--- a/exporter/alibabacloudlogserviceexporter/go.mod
+++ b/exporter/alibabacloudlogserviceexporter/go.mod
@@ -1,60 +1,71 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/alibabacloudlogserviceexporter
-go 1.20
+go 1.21
require (
- github.com/aliyun/aliyun-log-go-sdk v0.1.63
+ github.com/aliyun/aliyun-log-go-sdk v0.1.72
github.com/gogo/protobuf v1.3.2
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/zap v1.27.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-kit/kit v0.10.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pierrec/lz4 v2.6.0+incompatible // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/alibabacloudlogserviceexporter/go.sum b/exporter/alibabacloudlogserviceexporter/go.sum
index c5d6429b6cf9..ae3a0738d7b8 100644
--- a/exporter/alibabacloudlogserviceexporter/go.sum
+++ b/exporter/alibabacloudlogserviceexporter/go.sum
@@ -30,7 +30,6 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
@@ -78,8 +77,8 @@ github.com/alibabacloud-go/tea-utils/v2 v2.0.1 h1:K6kwgo+UiYx+/kr6CO0PN5ACZDzE3n
github.com/alibabacloud-go/tea-utils/v2 v2.0.1/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
github.com/alibabacloud-go/tea-xml v1.1.2 h1:oLxa7JUXm2EDFzMg+7oRsYc+kutgCVwm+bZlhhmvW5M=
github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
-github.com/aliyun/aliyun-log-go-sdk v0.1.63 h1:XeKeHgQS0Aoo6BtzF7vB/PlhzqK1/xuPdLr7mLMOp9Y=
-github.com/aliyun/aliyun-log-go-sdk v0.1.63/go.mod h1:FSKcIjukUy+LeUKhRk13PCO+9gPMTfGsYhFBHQbDqmM=
+github.com/aliyun/aliyun-log-go-sdk v0.1.72 h1:8Gvg3ydMG4bbF7DkTb4m3odd5BRFXo0LmhNBv/xg7Mo=
+github.com/aliyun/aliyun-log-go-sdk v0.1.72/go.mod h1:FSKcIjukUy+LeUKhRk13PCO+9gPMTfGsYhFBHQbDqmM=
github.com/aliyun/credentials-go v1.1.2 h1:qU1vwGIBb3UJ8BwunHDRFtAhS6jnQLnde/yk0+Ih2GY=
github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
@@ -102,14 +101,14 @@ github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRt
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -168,10 +167,15 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
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.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
@@ -183,7 +187,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
@@ -227,6 +230,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.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=
@@ -239,6 +243,8 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -266,8 +272,6 @@ github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerX
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-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 v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
@@ -302,8 +306,8 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
@@ -311,6 +315,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -325,9 +330,7 @@ github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcME
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/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4=
@@ -341,8 +344,6 @@ github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eI
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.4.2/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.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=
@@ -395,30 +396,34 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
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.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
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.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
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.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
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/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
@@ -436,19 +441,14 @@ github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5J
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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
@@ -468,41 +468,44 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
-go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
-go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/collector v0.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
@@ -510,15 +513,16 @@ go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/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/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
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.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -609,8 +613,8 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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=
@@ -687,8 +691,8 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc
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=
golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
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=
@@ -818,8 +822,8 @@ google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/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-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
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=
@@ -837,8 +841,8 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
-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/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
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=
@@ -852,14 +856,15 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
@@ -877,7 +882,6 @@ gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/exporter/alibabacloudlogserviceexporter/internal/metadata/generated_status.go b/exporter/alibabacloudlogserviceexporter/internal/metadata/generated_status.go
index 2edd082d57f7..8d609d8e3e36 100644
--- a/exporter/alibabacloudlogserviceexporter/internal/metadata/generated_status.go
+++ b/exporter/alibabacloudlogserviceexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("alibabacloud_logservice")
)
const (
- Type = "alibabacloud_logservice"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/alibabacloudlogservice")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/alibabacloudlogservice")
+}
diff --git a/exporter/alibabacloudlogserviceexporter/metadata.yaml b/exporter/alibabacloudlogserviceexporter/metadata.yaml
index 4f2b6cb14f64..a5bbcbecb194 100644
--- a/exporter/alibabacloudlogserviceexporter/metadata.yaml
+++ b/exporter/alibabacloudlogserviceexporter/metadata.yaml
@@ -1,9 +1,16 @@
type: alibabacloud_logservice
+scope_name: otelcol/alibabacloudlogservice
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
active: [shabicheng, kongluoxing, qiansheng91]
+
+tests:
+ config:
+ endpoint: "http://localhost:0"
+ project: "otel-testing"
+ logstore: "otel-data"
\ No newline at end of file
diff --git a/exporter/alibabacloudlogserviceexporter/metrics_exporter_test.go b/exporter/alibabacloudlogserviceexporter/metrics_exporter_test.go
index 5356bd578083..a3fc451a0fba 100644
--- a/exporter/alibabacloudlogserviceexporter/metrics_exporter_test.go
+++ b/exporter/alibabacloudlogserviceexporter/metrics_exporter_test.go
@@ -10,8 +10,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/exporter/exportertest"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
+ "go.opentelemetry.io/collector/pdata/testdata"
)
func TestNewMetricsExporter(t *testing.T) {
@@ -24,7 +23,7 @@ func TestNewMetricsExporter(t *testing.T) {
require.NotNil(t, got)
// This will put trace data to send buffer and return success.
- err = got.ConsumeMetrics(context.Background(), testdata.GenerateMetricsOneMetric())
+ err = got.ConsumeMetrics(context.Background(), testdata.GenerateMetrics(1))
assert.NoError(t, err)
}
diff --git a/exporter/alibabacloudlogserviceexporter/uploader.go b/exporter/alibabacloudlogserviceexporter/uploader.go
index 08712e565939..1839dcdd70e8 100644
--- a/exporter/alibabacloudlogserviceexporter/uploader.go
+++ b/exporter/alibabacloudlogserviceexporter/uploader.go
@@ -53,9 +53,9 @@ func newLogServiceClient(config *Config, logger *zap.Logger) (logServiceClient,
producerConfig.AccessKeySecret = string(config.AccessKeySecret)
if config.ECSRamRole != "" || config.TokenFilePath != "" {
tokenUpdateFunc, _ := slsutil.NewTokenUpdateFunc(config.ECSRamRole, config.TokenFilePath)
- // https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/26987
- // nolint
- producerConfig.UpdateStsToken = tokenUpdateFunc
+ provider := sls.NewUpdateFuncProviderAdapter(tokenUpdateFunc)
+ producerConfig.CredentialsProvider = provider
+
producerConfig.StsTokenShutDown = make(chan struct{})
}
diff --git a/exporter/awscloudwatchlogsexporter/README.md b/exporter/awscloudwatchlogsexporter/README.md
index ce85109deb58..9ec172840d4d 100644
--- a/exporter/awscloudwatchlogsexporter/README.md
+++ b/exporter/awscloudwatchlogsexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fawscloudwatchlogs%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fawscloudwatchlogs) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fawscloudwatchlogs%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fawscloudwatchlogs) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@boostchicken](https://www.github.com/boostchicken), [@bryan-aguilar](https://www.github.com/bryan-aguilar), [@rapphil](https://www.github.com/rapphil) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
AWS CloudWatch Logs Exporter sends logs data to AWS [CloudWatch Logs](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html).
diff --git a/exporter/awscloudwatchlogsexporter/config.go b/exporter/awscloudwatchlogsexporter/config.go
index 74e6c34a6274..915003e993d0 100644
--- a/exporter/awscloudwatchlogsexporter/config.go
+++ b/exporter/awscloudwatchlogsexporter/config.go
@@ -7,6 +7,7 @@ import (
"errors"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil"
@@ -15,7 +16,7 @@ import (
// Config represent a configuration for the CloudWatch logs exporter.
type Config struct {
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// LogGroupName is the name of CloudWatch log group which defines group of log streams
// that share the same retention, monitoring, and access control settings.
diff --git a/exporter/awscloudwatchlogsexporter/config_test.go b/exporter/awscloudwatchlogsexporter/config_test.go
index 917ce98871ca..cccc7aa076b3 100644
--- a/exporter/awscloudwatchlogsexporter/config_test.go
+++ b/exporter/awscloudwatchlogsexporter/config_test.go
@@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.uber.org/multierr"
@@ -27,7 +28,7 @@ func TestLoadConfig(t *testing.T) {
cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
require.NoError(t, err)
- defaultRetrySettings := exporterhelper.NewDefaultRetrySettings()
+ defaultBackOffConfig := configretry.NewDefaultBackOffConfig()
tests := []struct {
id component.ID
@@ -37,7 +38,7 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "e1-defaults"),
expected: &Config{
- RetrySettings: defaultRetrySettings,
+ BackOffConfig: defaultBackOffConfig,
LogGroupName: "test-1",
LogStreamName: "testing",
Endpoint: "",
@@ -52,11 +53,11 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "e2-no-retries-short-queue"),
expected: &Config{
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: false,
- InitialInterval: defaultRetrySettings.InitialInterval,
- MaxInterval: defaultRetrySettings.MaxInterval,
- MaxElapsedTime: defaultRetrySettings.MaxElapsedTime,
+ InitialInterval: defaultBackOffConfig.InitialInterval,
+ MaxInterval: defaultBackOffConfig.MaxInterval,
+ MaxElapsedTime: defaultBackOffConfig.MaxElapsedTime,
RandomizationFactor: backoff.DefaultRandomizationFactor,
Multiplier: backoff.DefaultMultiplier,
},
@@ -109,9 +110,9 @@ func TestLoadConfig(t *testing.T) {
}
func TestRetentionValidateCorrect(t *testing.T) {
- defaultRetrySettings := exporterhelper.NewDefaultRetrySettings()
+ defaultBackOffConfig := configretry.NewDefaultBackOffConfig()
cfg := &Config{
- RetrySettings: defaultRetrySettings,
+ BackOffConfig: defaultBackOffConfig,
LogGroupName: "test-1",
LogStreamName: "testing",
Endpoint: "",
@@ -128,9 +129,9 @@ func TestRetentionValidateCorrect(t *testing.T) {
}
func TestRetentionValidateWrong(t *testing.T) {
- defaultRetrySettings := exporterhelper.NewDefaultRetrySettings()
+ defaultBackOffConfig := configretry.NewDefaultBackOffConfig()
wrongcfg := &Config{
- RetrySettings: defaultRetrySettings,
+ BackOffConfig: defaultBackOffConfig,
LogGroupName: "test-1",
LogStreamName: "testing",
Endpoint: "",
@@ -146,7 +147,7 @@ func TestRetentionValidateWrong(t *testing.T) {
}
func TestValidateTags(t *testing.T) {
- defaultRetrySettings := exporterhelper.NewDefaultRetrySettings()
+ defaultBackOffConfig := configretry.NewDefaultBackOffConfig()
// Create *string values for tags inputs
basicValue := "avalue"
@@ -214,7 +215,7 @@ func TestValidateTags(t *testing.T) {
for _, tt := range tests {
t.Run(tt.id.String(), func(t *testing.T) {
cfg := &Config{
- RetrySettings: defaultRetrySettings,
+ BackOffConfig: defaultBackOffConfig,
LogGroupName: "test-1",
LogStreamName: "testing",
Endpoint: "",
@@ -269,9 +270,9 @@ func TestRawLogEmfOnlyCombination(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.Test, func(t *testing.T) {
- defaultRetrySettings := exporterhelper.NewDefaultRetrySettings()
+ defaultBackOffConfig := configretry.NewDefaultBackOffConfig()
cfg := &Config{
- RetrySettings: defaultRetrySettings,
+ BackOffConfig: defaultBackOffConfig,
LogGroupName: "test-1",
LogStreamName: "testing",
Endpoint: "",
diff --git a/exporter/awscloudwatchlogsexporter/exporter.go b/exporter/awscloudwatchlogsexporter/exporter.go
index 8f8fb32eccd7..1c509fedcad0 100644
--- a/exporter/awscloudwatchlogsexporter/exporter.go
+++ b/exporter/awscloudwatchlogsexporter/exporter.go
@@ -91,7 +91,7 @@ func newCwLogsExporter(config component.Config, params exp.CreateSettings) (exp.
config,
logsPusher.consumeLogs,
exporterhelper.WithQueue(expConfig.QueueSettings),
- exporterhelper.WithRetry(expConfig.RetrySettings),
+ exporterhelper.WithRetry(expConfig.BackOffConfig),
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithStart(logsPusher.start),
exporterhelper.WithShutdown(logsPusher.shutdown),
@@ -145,10 +145,11 @@ func pushLogsToCWLogs(logger *zap.Logger, ld plog.Logs, config *Config, pusher c
sls := rl.ScopeLogs()
for j := 0; j < sls.Len(); j++ {
sl := sls.At(j)
+ scope := sl.Scope()
logs := sl.LogRecords()
for k := 0; k < logs.Len(); k++ {
log := logs.At(k)
- event, err := logToCWLog(resourceAttrs, log, config)
+ event, err := logToCWLog(resourceAttrs, scope, log, config)
if err != nil {
logger.Debug("Failed to convert to CloudWatch Log", zap.Error(err))
} else {
@@ -164,19 +165,26 @@ func pushLogsToCWLogs(logger *zap.Logger, ld plog.Logs, config *Config, pusher c
return errs
}
+type scopeCwLogBody struct {
+ Name string `json:"name,omitempty"`
+ Version string `json:"version,omitempty"`
+ Attributes map[string]any `json:"attributes,omitempty"`
+}
+
type cwLogBody struct {
- Body any `json:"body,omitempty"`
- SeverityNumber int32 `json:"severity_number,omitempty"`
- SeverityText string `json:"severity_text,omitempty"`
- DroppedAttributesCount uint32 `json:"dropped_attributes_count,omitempty"`
- Flags uint32 `json:"flags,omitempty"`
- TraceID string `json:"trace_id,omitempty"`
- SpanID string `json:"span_id,omitempty"`
- Attributes map[string]any `json:"attributes,omitempty"`
- Resource map[string]any `json:"resource,omitempty"`
+ Body any `json:"body,omitempty"`
+ SeverityNumber int32 `json:"severity_number,omitempty"`
+ SeverityText string `json:"severity_text,omitempty"`
+ DroppedAttributesCount uint32 `json:"dropped_attributes_count,omitempty"`
+ Flags uint32 `json:"flags,omitempty"`
+ TraceID string `json:"trace_id,omitempty"`
+ SpanID string `json:"span_id,omitempty"`
+ Attributes map[string]any `json:"attributes,omitempty"`
+ Scope *scopeCwLogBody `json:"scope,omitempty"`
+ Resource map[string]any `json:"resource,omitempty"`
}
-func logToCWLog(resourceAttrs map[string]any, log plog.LogRecord, config *Config) (*cwlogs.Event, error) {
+func logToCWLog(resourceAttrs map[string]any, scope pcommon.InstrumentationScope, log plog.LogRecord, config *Config) (*cwlogs.Event, error) {
// TODO(jbd): Benchmark and improve the allocations.
// Evaluate go.elastic.co/fastjson as a replacement for encoding/json.
logGroupName := config.LogGroupName
@@ -223,6 +231,16 @@ func logToCWLog(resourceAttrs map[string]any, log plog.LogRecord, config *Config
body.Attributes = attrsValue(log.Attributes())
body.Resource = resourceAttrs
+ // scope should have a name at least
+ if scope.Name() != "" {
+ scopeBody := &scopeCwLogBody{
+ Name: scope.Name(),
+ Version: scope.Version(),
+ Attributes: attrsValue(scope.Attributes()),
+ }
+ body.Scope = scopeBody
+ }
+
bodyJSON, err = json.Marshal(body)
if err != nil {
return &cwlogs.Event{}, err
diff --git a/exporter/awscloudwatchlogsexporter/exporter_test.go b/exporter/awscloudwatchlogsexporter/exporter_test.go
index 0d920f8ad4f8..e513099449f7 100644
--- a/exporter/awscloudwatchlogsexporter/exporter_test.go
+++ b/exporter/awscloudwatchlogsexporter/exporter_test.go
@@ -55,6 +55,7 @@ func TestLogToCWLog(t *testing.T) {
tests := []struct {
name string
resource pcommon.Resource
+ scope pcommon.InstrumentationScope
log plog.LogRecord
config *Config
want cwlogs.Event
@@ -64,12 +65,13 @@ func TestLogToCWLog(t *testing.T) {
name: "basic",
resource: testResource(),
log: testLogRecord(),
+ scope: testScope(),
config: &Config{},
want: cwlogs.Event{
GeneratedTime: time.Now(),
InputLogEvent: &cloudwatchlogs.InputLogEvent{
Timestamp: aws.Int64(1609719139),
- Message: aws.String(`{"body":"hello world","severity_number":5,"severity_text":"debug","dropped_attributes_count":4,"flags":1,"trace_id":"0102030405060708090a0b0c0d0e0f10","span_id":"0102030405060708","attributes":{"key1":1,"key2":"attr2"},"resource":{"host":"abc123","node":5}}`),
+ Message: aws.String(`{"body":"hello world","severity_number":5,"severity_text":"debug","dropped_attributes_count":4,"flags":1,"trace_id":"0102030405060708090a0b0c0d0e0f10","span_id":"0102030405060708","attributes":{"key1":1,"key2":"attr2"},"scope":{"name":"test-scope","version":"1.0.0","attributes":{"scope-attr":"value"}},"resource":{"host":"abc123","node":5}}`),
},
StreamKey: cwlogs.StreamKey{
LogGroupName: "",
@@ -80,13 +82,32 @@ func TestLogToCWLog(t *testing.T) {
{
name: "no resource",
resource: pcommon.NewResource(),
+ scope: testScope(),
log: testLogRecord(),
config: &Config{},
want: cwlogs.Event{
GeneratedTime: time.Now(),
InputLogEvent: &cloudwatchlogs.InputLogEvent{
Timestamp: aws.Int64(1609719139),
- Message: aws.String(`{"body":"hello world","severity_number":5,"severity_text":"debug","dropped_attributes_count":4,"flags":1,"trace_id":"0102030405060708090a0b0c0d0e0f10","span_id":"0102030405060708","attributes":{"key1":1,"key2":"attr2"}}`),
+ Message: aws.String(`{"body":"hello world","severity_number":5,"severity_text":"debug","dropped_attributes_count":4,"flags":1,"trace_id":"0102030405060708090a0b0c0d0e0f10","span_id":"0102030405060708","attributes":{"key1":1,"key2":"attr2"},"scope":{"name":"test-scope","version":"1.0.0","attributes":{"scope-attr":"value"}}}`),
+ },
+ StreamKey: cwlogs.StreamKey{
+ LogGroupName: "",
+ LogStreamName: "",
+ },
+ },
+ },
+ {
+ name: "no scope",
+ resource: testResource(),
+ log: testLogRecord(),
+ scope: emptyScope(),
+ config: &Config{},
+ want: cwlogs.Event{
+ GeneratedTime: time.Now(),
+ InputLogEvent: &cloudwatchlogs.InputLogEvent{
+ Timestamp: aws.Int64(1609719139),
+ Message: aws.String(`{"body":"hello world","severity_number":5,"severity_text":"debug","dropped_attributes_count":4,"flags":1,"trace_id":"0102030405060708090a0b0c0d0e0f10","span_id":"0102030405060708","attributes":{"key1":1,"key2":"attr2"},"resource":{"host":"abc123","node":5}}`),
},
StreamKey: cwlogs.StreamKey{
LogGroupName: "",
@@ -97,6 +118,7 @@ func TestLogToCWLog(t *testing.T) {
{
name: "no trace",
resource: testResource(),
+ scope: testScope(),
log: testLogRecordWithoutTrace(),
config: &Config{
LogGroupName: "tLogGroup",
@@ -106,7 +128,7 @@ func TestLogToCWLog(t *testing.T) {
GeneratedTime: time.Now(),
InputLogEvent: &cloudwatchlogs.InputLogEvent{
Timestamp: aws.Int64(1609719139),
- Message: aws.String(`{"body":"hello world","severity_number":5,"severity_text":"debug","dropped_attributes_count":4,"attributes":{"key1":1,"key2":"attr2"},"resource":{"host":"abc123","node":5}}`),
+ Message: aws.String(`{"body":"hello world","severity_number":5,"severity_text":"debug","dropped_attributes_count":4,"attributes":{"key1":1,"key2":"attr2"},"scope":{"name":"test-scope","version":"1.0.0","attributes":{"scope-attr":"value"}},"resource":{"host":"abc123","node":5}}`),
},
StreamKey: cwlogs.StreamKey{
LogGroupName: "tLogGroup",
@@ -117,6 +139,7 @@ func TestLogToCWLog(t *testing.T) {
{
name: "raw",
resource: testResource(),
+ scope: testScope(),
log: testLogRecordWithoutTrace(),
config: &Config{
LogGroupName: "tLogGroup",
@@ -138,6 +161,7 @@ func TestLogToCWLog(t *testing.T) {
{
name: "raw emf v1",
resource: testResource(),
+ scope: testScope(),
log: createPLog(`{"_aws":{"Timestamp":1574109732004,"LogGroupName":"Foo","CloudWatchMetrics":[{"Namespace":"MyApp","Dimensions":[["Operation"]],"Metrics":[{"Name":"ProcessingLatency","Unit":"Milliseconds","StorageResolution":60}]}]},"Operation":"Aggregator","ProcessingLatency":100}`),
config: &Config{
LogGroupName: "tLogGroup",
@@ -159,6 +183,7 @@ func TestLogToCWLog(t *testing.T) {
{
name: "raw emf v1 with log stream",
resource: testResource(),
+ scope: testScope(),
log: createPLog(`{"_aws":{"Timestamp":1574109732004,"LogGroupName":"Foo","LogStreamName":"Foo","CloudWatchMetrics":[{"Namespace":"MyApp","Dimensions":[["Operation"]],"Metrics":[{"Name":"ProcessingLatency","Unit":"Milliseconds","StorageResolution":60}]}]},"Operation":"Aggregator","ProcessingLatency":100}`),
config: &Config{
LogGroupName: "tLogGroup",
@@ -180,6 +205,7 @@ func TestLogToCWLog(t *testing.T) {
{
name: "raw emf v0",
resource: testResource(),
+ scope: testScope(),
log: createPLog(`{"Timestamp":1574109732004,"log_group_name":"Foo","CloudWatchMetrics":[{"Namespace":"MyApp","Dimensions":[["Operation"]],"Metrics":[{"Name":"ProcessingLatency","Unit":"Milliseconds","StorageResolution":60}]}],"Operation":"Aggregator","ProcessingLatency":100}`),
config: &Config{
LogGroupName: "tLogGroup",
@@ -201,6 +227,7 @@ func TestLogToCWLog(t *testing.T) {
{
name: "raw emf v0 with log stream",
resource: testResource(),
+ scope: testScope(),
log: createPLog(`{"Timestamp":1574109732004,"log_group_name":"Foo","log_stream_name":"Foo","CloudWatchMetrics":[{"Namespace":"MyApp","Dimensions":[["Operation"]],"Metrics":[{"Name":"ProcessingLatency","Unit":"Milliseconds","StorageResolution":60}]}],"Operation":"Aggregator","ProcessingLatency":100}`),
config: &Config{
LogGroupName: "tLogGroup",
@@ -270,7 +297,7 @@ func TestLogToCWLog(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
resourceAttrs := attrsValue(tt.resource.Attributes())
- got, err := logToCWLog(resourceAttrs, tt.log, tt.config)
+ got, err := logToCWLog(resourceAttrs, tt.scope, tt.log, tt.config)
if (err != nil) != tt.wantErr {
t.Errorf("logToCWLog() error = %v, wantErr %v", err, tt.wantErr)
return
@@ -288,8 +315,9 @@ func BenchmarkLogToCWLog(b *testing.B) {
resource := testResource()
log := testLogRecord()
+ scope := testScope()
for i := 0; i < b.N; i++ {
- _, err := logToCWLog(attrsValue(resource.Attributes()), log, &Config{})
+ _, err := logToCWLog(attrsValue(resource.Attributes()), scope, log, &Config{})
if err != nil {
b.Errorf("logToCWLog() failed %v", err)
return
@@ -304,6 +332,19 @@ func testResource() pcommon.Resource {
return resource
}
+func testScope() pcommon.InstrumentationScope {
+ scope := pcommon.NewInstrumentationScope()
+ scope.SetName("test-scope")
+ scope.SetVersion("1.0.0")
+ scope.Attributes().PutStr("scope-attr", "value")
+ return scope
+}
+
+func emptyScope() pcommon.InstrumentationScope {
+ scope := pcommon.NewInstrumentationScope()
+ return scope
+}
+
func testLogRecord() plog.LogRecord {
record := plog.NewLogRecord()
record.SetSeverityNumber(5)
@@ -393,7 +434,7 @@ func TestConsumeLogs(t *testing.T) {
t.Run(testcase.id, func(t *testing.T) {
logPusher := new(mockPusher)
exp.pusherFactory = &mockFactory{logPusher}
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
ld := plog.NewLogs()
r := ld.ResourceLogs().AppendEmpty()
@@ -427,7 +468,8 @@ func TestConsumeLogs(t *testing.T) {
}
func TestMiddleware(t *testing.T) {
- id := component.NewID("test")
+ testType, _ := component.NewType("test")
+ id := component.NewID(testType)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
factory := NewFactory()
@@ -469,5 +511,5 @@ func TestNewExporterWithoutRegionErr(t *testing.T) {
expCfg.MaxRetries = 0
exp, err := newCwLogsExporter(expCfg, exportertest.NewNopCreateSettings())
assert.Nil(t, exp)
- assert.NotNil(t, err)
+ assert.Error(t, err)
}
diff --git a/exporter/awscloudwatchlogsexporter/factory.go b/exporter/awscloudwatchlogsexporter/factory.go
index 0b8f5b030c49..f91ef82bafe2 100644
--- a/exporter/awscloudwatchlogsexporter/factory.go
+++ b/exporter/awscloudwatchlogsexporter/factory.go
@@ -12,6 +12,7 @@ import (
"errors"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -32,7 +33,7 @@ func createDefaultConfig() component.Config {
queueSettings.NumConsumers = 1
return &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
AWSSessionSettings: awsutil.CreateDefaultSessionConfig(),
QueueSettings: queueSettings,
}
diff --git a/exporter/awscloudwatchlogsexporter/factory_test.go b/exporter/awscloudwatchlogsexporter/factory_test.go
index f647bcd7e0c2..df45d3957395 100644
--- a/exporter/awscloudwatchlogsexporter/factory_test.go
+++ b/exporter/awscloudwatchlogsexporter/factory_test.go
@@ -7,6 +7,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil"
@@ -14,7 +15,7 @@ import (
func TestDefaultConfig_exporterSettings(t *testing.T) {
want := &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
AWSSessionSettings: awsutil.CreateDefaultSessionConfig(),
QueueSettings: exporterhelper.QueueSettings{
Enabled: true,
diff --git a/exporter/awscloudwatchlogsexporter/generated_component_test.go b/exporter/awscloudwatchlogsexporter/generated_component_test.go
new file mode 100644
index 000000000000..43a94327eafc
--- /dev/null
+++ b/exporter/awscloudwatchlogsexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package awscloudwatchlogsexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/awscloudwatchlogsexporter/go.mod b/exporter/awscloudwatchlogsexporter/go.mod
index 29f7cf248c3a..6713d8b4fa56 100644
--- a/exporter/awscloudwatchlogsexporter/go.mod
+++ b/exporter/awscloudwatchlogsexporter/go.mod
@@ -1,59 +1,69 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awscloudwatchlogsexporter
-go 1.20
+go 1.21
require (
- github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-00010101000000-000000000000
- github.com/aws/aws-sdk-go v1.47.10
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/google/uuid v1.4.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-20240419190856-2f880467f335
+ github.com/aws/aws-sdk-go v1.51.17
+ github.com/cenkalti/backoff/v4 v4.3.0
+ github.com/google/uuid v1.6.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
)
require (
github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-00010101000000-000000000000 // indirect
github.com/aws/aws-sdk-go-v2 v1.22.2 // indirect
github.com/aws/smithy-go v1.16.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/awscloudwatchlogsexporter/go.sum b/exporter/awscloudwatchlogsexporter/go.sum
index 85baca28f40e..05e9b4aab0a8 100644
--- a/exporter/awscloudwatchlogsexporter/go.sum
+++ b/exporter/awscloudwatchlogsexporter/go.sum
@@ -1,71 +1,54 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-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/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 h1:OPLEkmhXf6xFPiz0bLeDArZIDx1NNS4oJyG4nv3Gct0=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 h1:6lJvvkQ9HmbHZ4h/IEwclwv2mrTW8Uq1SOB/kXy0mfw=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 h1:m0QTSI6pZYJTk5WSKx3fm5cNW/DCicVzULBgU/6IyD0=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 h1:eev2yZX7esGRjqRbnVk1UxMLw4CyVZDpZXRCcy75oQk=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 h1:v0jkRigbSD6uOdwcaUQmgEwG1BkPfAPDqaeNt/29ghg=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8=
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 h1:wl5dxN1NONhTDQD9uaEvNsDRX29cBmGED/nl0jkWlt4=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM=
github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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=
@@ -78,15 +61,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -96,102 +78,88 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -199,39 +167,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/awscloudwatchlogsexporter/internal/metadata/generated_status.go b/exporter/awscloudwatchlogsexporter/internal/metadata/generated_status.go
index 85737d8480e2..2b54cdf29629 100644
--- a/exporter/awscloudwatchlogsexporter/internal/metadata/generated_status.go
+++ b/exporter/awscloudwatchlogsexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("awscloudwatchlogs")
)
const (
- Type = "awscloudwatchlogs"
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/awscloudwatchlogs")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/awscloudwatchlogs")
+}
diff --git a/exporter/awscloudwatchlogsexporter/metadata.yaml b/exporter/awscloudwatchlogsexporter/metadata.yaml
index 370faa1e41e2..7b4422fa1019 100644
--- a/exporter/awscloudwatchlogsexporter/metadata.yaml
+++ b/exporter/awscloudwatchlogsexporter/metadata.yaml
@@ -1,9 +1,20 @@
type: awscloudwatchlogs
+scope_name: otelcol/awscloudwatchlogs
status:
class: exporter
stability:
beta: [logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
active: [boostchicken, bryan-aguilar, rapphil]
+
+tests:
+ config:
+ endpoint: http://localhost:0
+ region: local
+ sending_queue:
+ enabled: false
+ retry_on_failure:
+ enabled: false
+ expect_consumer_error: true
diff --git a/exporter/awscloudwatchlogsexporter/package_test.go b/exporter/awscloudwatchlogsexporter/package_test.go
new file mode 100644
index 000000000000..026f54ff1134
--- /dev/null
+++ b/exporter/awscloudwatchlogsexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package awscloudwatchlogsexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/awsemfexporter/README.md b/exporter/awsemfexporter/README.md
index f3bfd1ef1ee6..cd2dc8378d7d 100644
--- a/exporter/awsemfexporter/README.md
+++ b/exporter/awsemfexporter/README.md
@@ -4,14 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: metrics |
-| Distributions | [contrib], [aws], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fawsemf%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fawsemf) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fawsemf%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fawsemf) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@Aneurysm9](https://www.github.com/Aneurysm9), [@shaochengwang](https://www.github.com/shaochengwang), [@mxiamxia](https://www.github.com/mxiamxia), [@bryan-aguilar](https://www.github.com/bryan-aguilar) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter converts OpenTelemetry metrics to
@@ -22,7 +20,7 @@ and then sends them directly to CloudWatch Logs using the
## Data Conversion
Convert OpenTelemetry ```Int64DataPoints```, ```DoubleDataPoints```, ```SummaryDataPoints``` metrics datapoints into
CloudWatch ```EMF``` structured log formats and send it to CloudWatch. Logs and Metrics will be displayed in
-CloudWatch console. NaN values are not supported by CloudWatch EMF and will be dropped by the exporter.
+CloudWatch console. NaN, Inf values are not supported by CloudWatch EMF and will be dropped by the exporter.
## Exporter Configuration
diff --git a/exporter/awsemfexporter/datapoint.go b/exporter/awsemfexporter/datapoint.go
index a4fe8245e100..bfdce3ce20bc 100644
--- a/exporter/awsemfexporter/datapoint.go
+++ b/exporter/awsemfexporter/datapoint.go
@@ -61,10 +61,10 @@ type dataPoints interface {
// retained: indicates whether the data point is valid for further process
// NOTE: It is an expensive call as it calculates the metric value.
CalculateDeltaDatapoints(i int, instrumentationScopeName string, detailedMetrics bool, calculators *emfCalculators) (dataPoint []dataPoint, retained bool)
- // IsStaleOrNaN returns true if metric value has NoRecordedValue flag set or if any metric value contains a NaN.
- // When return value is true, IsStaleOrNaN also returns the attributes attached to the metric which can be used for
+ // IsStaleNaNInf returns true if metric value has NoRecordedValue flag set or if any metric value contains a NaN or Inf.
+ // When return value is true, IsStaleNaNInf also returns the attributes attached to the metric which can be used for
// logging purposes.
- IsStaleOrNaN(i int) (bool, pcommon.Map)
+ IsStaleNaNInf(i int) (bool, pcommon.Map)
}
// deltaMetricMetadata contains the metadata required to perform rate/delta calculation
@@ -145,13 +145,13 @@ func (dps numberDataPointSlice) CalculateDeltaDatapoints(i int, instrumentationS
return []dataPoint{{name: dps.metricName, value: metricVal, labels: labels, timestampMs: timestampMs}}, retained
}
-func (dps numberDataPointSlice) IsStaleOrNaN(i int) (bool, pcommon.Map) {
+func (dps numberDataPointSlice) IsStaleNaNInf(i int) (bool, pcommon.Map) {
metric := dps.NumberDataPointSlice.At(i)
if metric.Flags().NoRecordedValue() {
return true, metric.Attributes()
}
if metric.ValueType() == pmetric.NumberDataPointValueTypeDouble {
- return math.IsNaN(metric.DoubleValue()), metric.Attributes()
+ return math.IsNaN(metric.DoubleValue()) || math.IsInf(metric.DoubleValue(), 0), metric.Attributes()
}
return false, pcommon.Map{}
}
@@ -199,12 +199,14 @@ func (dps histogramDataPointSlice) CalculateDeltaDatapoints(i int, instrumentati
}}, true
}
-func (dps histogramDataPointSlice) IsStaleOrNaN(i int) (bool, pcommon.Map) {
+func (dps histogramDataPointSlice) IsStaleNaNInf(i int) (bool, pcommon.Map) {
metric := dps.HistogramDataPointSlice.At(i)
if metric.Flags().NoRecordedValue() {
return true, metric.Attributes()
}
- if math.IsNaN(metric.Max()) || math.IsNaN(metric.Sum()) || math.IsNaN(metric.Min()) {
+ if math.IsNaN(metric.Max()) || math.IsNaN(metric.Sum()) ||
+ math.IsNaN(metric.Min()) || math.IsInf(metric.Max(), 0) ||
+ math.IsInf(metric.Sum(), 0) || math.IsInf(metric.Min(), 0) {
return true, metric.Attributes()
}
return false, pcommon.Map{}
@@ -292,14 +294,17 @@ func (dps exponentialHistogramDataPointSlice) CalculateDeltaDatapoints(idx int,
}}, true
}
-func (dps exponentialHistogramDataPointSlice) IsStaleOrNaN(i int) (bool, pcommon.Map) {
+func (dps exponentialHistogramDataPointSlice) IsStaleNaNInf(i int) (bool, pcommon.Map) {
metric := dps.ExponentialHistogramDataPointSlice.At(i)
if metric.Flags().NoRecordedValue() {
return true, metric.Attributes()
}
if math.IsNaN(metric.Max()) ||
math.IsNaN(metric.Min()) ||
- math.IsNaN(metric.Sum()) {
+ math.IsNaN(metric.Sum()) ||
+ math.IsInf(metric.Max(), 0) ||
+ math.IsInf(metric.Min(), 0) ||
+ math.IsInf(metric.Sum(), 0) {
return true, metric.Attributes()
}
@@ -363,14 +368,24 @@ func (dps summaryDataPointSlice) CalculateDeltaDatapoints(i int, instrumentation
return datapoints, retained
}
-func (dps summaryDataPointSlice) IsStaleOrNaN(i int) (bool, pcommon.Map) {
+func (dps summaryDataPointSlice) IsStaleNaNInf(i int) (bool, pcommon.Map) {
metric := dps.SummaryDataPointSlice.At(i)
if metric.Flags().NoRecordedValue() {
return true, metric.Attributes()
}
- if math.IsNaN(metric.Sum()) {
+ if math.IsNaN(metric.Sum()) || math.IsInf(metric.Sum(), 0) {
return true, metric.Attributes()
}
+
+ values := metric.QuantileValues()
+ for i := 0; i < values.Len(); i++ {
+ quantile := values.At(i)
+ if math.IsNaN(quantile.Value()) || math.IsNaN(quantile.Quantile()) ||
+ math.IsInf(quantile.Value(), 0) || math.IsInf(quantile.Quantile(), 0) {
+ return true, metric.Attributes()
+ }
+ }
+
return false, metric.Attributes()
}
diff --git a/exporter/awsemfexporter/datapoint_test.go b/exporter/awsemfexporter/datapoint_test.go
index 82c2ac49e62e..00141e455a6b 100644
--- a/exporter/awsemfexporter/datapoint_test.go
+++ b/exporter/awsemfexporter/datapoint_test.go
@@ -67,6 +67,22 @@ func generateTestGaugeMetricNaN(name string) pmetric.Metrics {
return otelMetrics
}
+func generateTestGaugeMetricInf(name string) pmetric.Metrics {
+ otelMetrics := pmetric.NewMetrics()
+ rs := otelMetrics.ResourceMetrics().AppendEmpty()
+ metrics := rs.ScopeMetrics().AppendEmpty().Metrics()
+ metric := metrics.AppendEmpty()
+ metric.SetName(name)
+ metric.SetUnit("Count")
+ gaugeMetric := metric.SetEmptyGauge()
+ gaugeDatapoint := gaugeMetric.DataPoints().AppendEmpty()
+ gaugeDatapoint.Attributes().PutStr("label1", "value1")
+
+ gaugeDatapoint.SetDoubleValue(math.Inf(0))
+
+ return otelMetrics
+}
+
func generateTestSumMetric(name string, valueType metricValueType) pmetric.Metrics {
otelMetrics := pmetric.NewMetrics()
rs := otelMetrics.ResourceMetrics().AppendEmpty()
@@ -127,6 +143,23 @@ func generateTestHistogramMetricWithNaNs(name string) pmetric.Metrics {
return otelMetrics
}
+func generateTestHistogramMetricWithInfs(name string) pmetric.Metrics {
+ otelMetrics := pmetric.NewMetrics()
+ rs := otelMetrics.ResourceMetrics().AppendEmpty()
+ metrics := rs.ScopeMetrics().AppendEmpty().Metrics()
+ metric := metrics.AppendEmpty()
+ metric.SetName(name)
+ metric.SetUnit("Seconds")
+ histogramMetric := metric.SetEmptyHistogram()
+ histogramDatapoint := histogramMetric.DataPoints().AppendEmpty()
+ histogramDatapoint.BucketCounts().FromRaw([]uint64{5, 6, 7})
+ histogramDatapoint.ExplicitBounds().FromRaw([]float64{0, math.Inf(0)})
+ histogramDatapoint.Attributes().PutStr("label1", "value1")
+ histogramDatapoint.SetCount(18)
+ histogramDatapoint.SetSum(math.Inf(0))
+ return otelMetrics
+}
+
func generateTestExponentialHistogramMetric(name string) pmetric.Metrics {
otelMetrics := pmetric.NewMetrics()
rs := otelMetrics.ResourceMetrics().AppendEmpty()
@@ -183,6 +216,34 @@ func generateTestExponentialHistogramMetricWithNaNs(name string) pmetric.Metrics
return otelMetrics
}
+func generateTestExponentialHistogramMetricWithInfs(name string) pmetric.Metrics {
+ otelMetrics := pmetric.NewMetrics()
+ rs := otelMetrics.ResourceMetrics().AppendEmpty()
+ metrics := rs.ScopeMetrics().AppendEmpty().Metrics()
+ metric := metrics.AppendEmpty()
+ metric.SetName(name)
+ metric.SetUnit("Seconds")
+ exponentialHistogramMetric := metric.SetEmptyExponentialHistogram()
+
+ exponentialHistogramDatapoint := exponentialHistogramMetric.DataPoints().AppendEmpty()
+ exponentialHistogramDatapoint.SetCount(4)
+ exponentialHistogramDatapoint.SetSum(math.Inf(0))
+ exponentialHistogramDatapoint.SetMin(math.Inf(0))
+ exponentialHistogramDatapoint.SetMax(math.Inf(0))
+ exponentialHistogramDatapoint.SetZeroCount(0)
+ exponentialHistogramDatapoint.SetScale(1)
+ exponentialHistogramDatapoint.Positive().SetOffset(1)
+ exponentialHistogramDatapoint.Positive().BucketCounts().FromRaw([]uint64{
+ 1, 0, 1,
+ })
+ exponentialHistogramDatapoint.Negative().SetOffset(1)
+ exponentialHistogramDatapoint.Negative().BucketCounts().FromRaw([]uint64{
+ 1, 0, 1,
+ })
+ exponentialHistogramDatapoint.Attributes().PutStr("label1", "value1")
+ return otelMetrics
+}
+
func generateTestSummaryMetric(name string) pmetric.Metrics {
otelMetrics := pmetric.NewMetrics()
rs := otelMetrics.ResourceMetrics().AppendEmpty()
@@ -223,11 +284,36 @@ func generateTestSummaryMetricWithNaN(name string) pmetric.Metrics {
summaryDatapoint.SetCount(uint64(5 * i))
summaryDatapoint.SetSum(math.NaN())
firstQuantile := summaryDatapoint.QuantileValues().AppendEmpty()
- firstQuantile.SetQuantile(0.0)
- firstQuantile.SetValue(1)
+ firstQuantile.SetQuantile(math.NaN())
+ firstQuantile.SetValue(math.NaN())
secondQuantile := summaryDatapoint.QuantileValues().AppendEmpty()
- secondQuantile.SetQuantile(100.0)
- secondQuantile.SetValue(5)
+ secondQuantile.SetQuantile(math.NaN())
+ secondQuantile.SetValue(math.NaN())
+ }
+
+ return otelMetrics
+}
+
+func generateTestSummaryMetricWithInf(name string) pmetric.Metrics {
+ otelMetrics := pmetric.NewMetrics()
+ rs := otelMetrics.ResourceMetrics().AppendEmpty()
+ metrics := rs.ScopeMetrics().AppendEmpty().Metrics()
+
+ for i := 0; i < 2; i++ {
+ metric := metrics.AppendEmpty()
+ metric.SetName(name)
+ metric.SetUnit("Seconds")
+ summaryMetric := metric.SetEmptySummary()
+ summaryDatapoint := summaryMetric.DataPoints().AppendEmpty()
+ summaryDatapoint.Attributes().PutStr("label1", "value1")
+ summaryDatapoint.SetCount(uint64(5 * i))
+ summaryDatapoint.SetSum(math.Inf(0))
+ firstQuantile := summaryDatapoint.QuantileValues().AppendEmpty()
+ firstQuantile.SetQuantile(math.Inf(0))
+ firstQuantile.SetValue(math.Inf(0))
+ secondQuantile := summaryDatapoint.QuantileValues().AppendEmpty()
+ secondQuantile.SetQuantile(math.Inf(0))
+ secondQuantile.SetValue(math.Inf(0))
}
return otelMetrics
@@ -272,7 +358,7 @@ func shutdownEmfCalculators(c *emfCalculators) error {
}
-func TestIsStaleOrNaN_NumberDataPointSlice(t *testing.T) {
+func TestIsStaleNaNInf_NumberDataPointSlice(t *testing.T) {
testCases := []struct {
name string
metricName string
@@ -286,6 +372,12 @@ func TestIsStaleOrNaN_NumberDataPointSlice(t *testing.T) {
metricName: "NaN",
expectedAssert: assert.True,
},
+ {
+ name: "inf",
+ metricValue: math.Inf(0),
+ metricName: "Inf",
+ expectedAssert: assert.True,
+ },
{
name: "valid float",
metricValue: 0.4,
@@ -323,8 +415,8 @@ func TestIsStaleOrNaN_NumberDataPointSlice(t *testing.T) {
}
numberDatapointSlice := numberDataPointSlice{deltaMetricMetadata{}, numberDPS}
- isStaleOrNan, _ := numberDatapointSlice.IsStaleOrNaN(0)
- tc.expectedAssert(t, isStaleOrNan)
+ isStaleNanInf, _ := numberDatapointSlice.IsStaleNaNInf(0)
+ tc.expectedAssert(t, isStaleNanInf)
})
}
}
@@ -534,7 +626,7 @@ func TestCalculateDeltaDatapoints_HistogramDataPointSlice(t *testing.T) {
}
-func TestIsStaleOrNaN_HistogramDataPointSlice(t *testing.T) {
+func TestIsStaleNaNInf_HistogramDataPointSlice(t *testing.T) {
testCases := []struct {
name string
@@ -543,7 +635,7 @@ func TestIsStaleOrNaN_HistogramDataPointSlice(t *testing.T) {
setFlagsFunc func(point pmetric.HistogramDataPoint) pmetric.HistogramDataPoint
}{
{
- name: "Histogram with NaNs",
+ name: "Histogram with all NaNs",
histogramDPS: func() pmetric.HistogramDataPointSlice {
histogramDPS := pmetric.NewHistogramDataPointSlice()
histogramDP := histogramDPS.AppendEmpty()
@@ -556,6 +648,48 @@ func TestIsStaleOrNaN_HistogramDataPointSlice(t *testing.T) {
}(),
boolAssertFunc: assert.True,
},
+ {
+ name: "Histogram with NaN Sum",
+ histogramDPS: func() pmetric.HistogramDataPointSlice {
+ histogramDPS := pmetric.NewHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.NaN())
+ histogramDP.SetMin(1234)
+ histogramDP.SetMax(1234)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Histogram with NaN Min",
+ histogramDPS: func() pmetric.HistogramDataPointSlice {
+ histogramDPS := pmetric.NewHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(123)
+ histogramDP.SetMin(math.NaN())
+ histogramDP.SetMax(123)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Histogram with nan Max",
+ histogramDPS: func() pmetric.HistogramDataPointSlice {
+ histogramDPS := pmetric.NewHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(123)
+ histogramDP.SetMin(123)
+ histogramDP.SetMax(math.NaN())
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
{
name: "Histogram with min and max",
histogramDPS: func() pmetric.HistogramDataPointSlice {
@@ -571,7 +705,7 @@ func TestIsStaleOrNaN_HistogramDataPointSlice(t *testing.T) {
boolAssertFunc: assert.False,
},
{
- name: "Histogram with no NaNs",
+ name: "Histogram with no NaNs or Inf",
histogramDPS: func() pmetric.HistogramDataPointSlice {
histogramDPS := pmetric.NewHistogramDataPointSlice()
histogramDP := histogramDPS.AppendEmpty()
@@ -588,6 +722,62 @@ func TestIsStaleOrNaN_HistogramDataPointSlice(t *testing.T) {
return point
},
},
+ {
+ name: "Histogram with all Infs",
+ histogramDPS: func() pmetric.HistogramDataPointSlice {
+ histogramDPS := pmetric.NewHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.Inf(0))
+ histogramDP.SetMin(math.Inf(0))
+ histogramDP.SetMax(math.Inf(0))
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Histogram with Inf Sum",
+ histogramDPS: func() pmetric.HistogramDataPointSlice {
+ histogramDPS := pmetric.NewHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.Inf(0))
+ histogramDP.SetMin(1234)
+ histogramDP.SetMax(1234)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Histogram with Inf Min",
+ histogramDPS: func() pmetric.HistogramDataPointSlice {
+ histogramDPS := pmetric.NewHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(123)
+ histogramDP.SetMin(math.Inf(0))
+ histogramDP.SetMax(123)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Histogram with Inf Max",
+ histogramDPS: func() pmetric.HistogramDataPointSlice {
+ histogramDPS := pmetric.NewHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(123)
+ histogramDP.SetMin(123)
+ histogramDP.SetMax(math.Inf(0))
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
}
for _, tc := range testCases {
@@ -597,8 +787,8 @@ func TestIsStaleOrNaN_HistogramDataPointSlice(t *testing.T) {
if tc.setFlagsFunc != nil {
tc.setFlagsFunc(histogramDatapointSlice.At(0))
}
- isStaleOrNan, _ := histogramDatapointSlice.IsStaleOrNaN(0)
- tc.boolAssertFunc(t, isStaleOrNan)
+ isStaleNanInf, _ := histogramDatapointSlice.IsStaleNaNInf(0)
+ tc.boolAssertFunc(t, isStaleNanInf)
})
}
@@ -749,7 +939,7 @@ func TestCalculateDeltaDatapoints_ExponentialHistogramDataPointSlice(t *testing.
}
-func TestIsStaleOrNaN_ExponentialHistogramDataPointSlice(t *testing.T) {
+func TestIsStaleNaNInf_ExponentialHistogramDataPointSlice(t *testing.T) {
testCases := []struct {
name string
@@ -758,7 +948,7 @@ func TestIsStaleOrNaN_ExponentialHistogramDataPointSlice(t *testing.T) {
setFlagsFunc func(point pmetric.ExponentialHistogramDataPoint) pmetric.ExponentialHistogramDataPoint
}{
{
- name: "Exponential histogram with non NaNs",
+ name: "Exponential histogram with non NaNs or Infs",
histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
histogramDP := histogramDPS.AppendEmpty()
@@ -771,6 +961,62 @@ func TestIsStaleOrNaN_ExponentialHistogramDataPointSlice(t *testing.T) {
}(),
boolAssertFunc: assert.False,
},
+ {
+ name: "Exponential histogram with all possible NaN",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.NaN())
+ histogramDP.SetMin(math.NaN())
+ histogramDP.SetMax(math.NaN())
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Exponential histogram with NaN Sum",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.NaN())
+ histogramDP.SetMin(1245)
+ histogramDP.SetMax(1234556)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Exponential histogram with NaN Min",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(1255)
+ histogramDP.SetMin(math.NaN())
+ histogramDP.SetMax(12545)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Exponential histogram with NaN Max",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(512444)
+ histogramDP.SetMin(123)
+ histogramDP.SetMax(math.NaN())
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
{
name: "Exponential histogram with NaNs",
histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
@@ -803,6 +1049,76 @@ func TestIsStaleOrNaN_ExponentialHistogramDataPointSlice(t *testing.T) {
return point
},
},
+ {
+ name: "Exponential histogram with all possible Inf",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.Inf(0))
+ histogramDP.SetMin(math.Inf(0))
+ histogramDP.SetMax(math.Inf(0))
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Exponential histogram with Inf Sum",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.Inf(0))
+ histogramDP.SetMin(1245)
+ histogramDP.SetMax(1234556)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Exponential histogram with Inf Min",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(1255)
+ histogramDP.SetMin(math.Inf(0))
+ histogramDP.SetMax(12545)
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Exponential histogram with Inf Max",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(512444)
+ histogramDP.SetMin(123)
+ histogramDP.SetMax(math.Inf(0))
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
+ {
+ name: "Exponential histogram with Infs",
+ histogramDPS: func() pmetric.ExponentialHistogramDataPointSlice {
+ histogramDPS := pmetric.NewExponentialHistogramDataPointSlice()
+ histogramDP := histogramDPS.AppendEmpty()
+ histogramDP.SetCount(uint64(17))
+ histogramDP.SetSum(math.Inf(0))
+ histogramDP.SetMin(math.Inf(0))
+ histogramDP.SetMax(math.Inf(0))
+ histogramDP.Attributes().PutStr("label1", "value1")
+ return histogramDPS
+ }(),
+ boolAssertFunc: assert.True,
+ },
}
for _, tc := range testCases {
@@ -812,9 +1128,9 @@ func TestIsStaleOrNaN_ExponentialHistogramDataPointSlice(t *testing.T) {
if tc.setFlagsFunc != nil {
tc.setFlagsFunc(exponentialHistogramDatapointSlice.At(0))
}
- isStaleOrNaN, _ := exponentialHistogramDatapointSlice.IsStaleOrNaN(0)
+ isStaleNaNInf, _ := exponentialHistogramDatapointSlice.IsStaleNaNInf(0)
// When calculate the delta datapoints for histograms
- tc.boolAssertFunc(t, isStaleOrNaN)
+ tc.boolAssertFunc(t, isStaleNaNInf)
})
}
}
@@ -904,57 +1220,193 @@ func TestCalculateDeltaDatapoints_SummaryDataPointSlice(t *testing.T) {
}
}
-func TestIsStaleOrNaN_SummaryDataPointSlice(t *testing.T) {
+func TestIsStaleNaNInf_SummaryDataPointSlice(t *testing.T) {
+ type qMetricObject struct {
+ value float64
+ quantile float64
+ }
+ type quantileTestObj struct {
+ sum float64
+ count uint64
+ qMetrics []qMetricObject
+ }
testCases := []struct {
name string
- summaryMetricValue map[string]any
+ summaryMetricValue quantileTestObj
expectedBoolAssert assert.BoolAssertionFunc
setFlagsFunc func(point pmetric.SummaryDataPoint) pmetric.SummaryDataPoint
}{
{
- name: "summary with no nan values",
- summaryMetricValue: map[string]any{"sum": float64(17.3), "count": uint64(17), "firstQuantile": float64(1), "secondQuantile": float64(5)},
+ name: "summary with no nan or inf values",
+ summaryMetricValue: quantileTestObj{
+ sum: 17.3,
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: 5,
+ quantile: 2.0,
+ },
+ },
+ },
expectedBoolAssert: assert.False,
},
{
- name: "Summary with nan values",
- summaryMetricValue: map[string]any{"sum": math.NaN(), "count": uint64(25), "firstQuantile": math.NaN(), "secondQuantile": math.NaN()},
+ name: "Summary with nan sum",
+ summaryMetricValue: quantileTestObj{
+ sum: math.NaN(),
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: 5,
+ quantile: 2.0,
+ },
+ },
+ },
expectedBoolAssert: assert.True,
},
{
- name: "Summary with set flag func",
- summaryMetricValue: map[string]any{"sum": math.NaN(), "count": uint64(25), "firstQuantile": math.NaN(), "secondQuantile": math.NaN()},
+ name: "Summary with no recorded value flag set to true",
+ summaryMetricValue: quantileTestObj{
+ sum: 1245.65,
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: 5,
+ quantile: 2.0,
+ },
+ },
+ },
expectedBoolAssert: assert.True,
setFlagsFunc: func(point pmetric.SummaryDataPoint) pmetric.SummaryDataPoint {
point.SetFlags(pmetric.DefaultDataPointFlags.WithNoRecordedValue(true))
return point
},
},
+ {
+ name: "Summary with nan quantile value",
+ summaryMetricValue: quantileTestObj{
+ sum: 1245.65,
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: math.NaN(),
+ quantile: 2.0,
+ },
+ },
+ },
+ expectedBoolAssert: assert.True,
+ },
+ {
+ name: "Summary with nan quantile",
+ summaryMetricValue: quantileTestObj{
+ sum: 1245.65,
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: 7.8,
+ quantile: math.NaN(),
+ },
+ },
+ },
+ expectedBoolAssert: assert.True,
+ },
+ {
+ name: "Summary with Inf sum",
+ summaryMetricValue: quantileTestObj{
+ sum: math.Inf(0),
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: 5,
+ quantile: 2.0,
+ },
+ },
+ },
+ expectedBoolAssert: assert.True,
+ },
+ {
+ name: "Summary with inf quantile value",
+ summaryMetricValue: quantileTestObj{
+ sum: 1245.65,
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: math.Inf(0),
+ quantile: 2.0,
+ },
+ },
+ },
+ expectedBoolAssert: assert.True,
+ },
+ {
+ name: "Summary with inf quantile",
+ summaryMetricValue: quantileTestObj{
+ sum: 1245.65,
+ count: 17,
+ qMetrics: []qMetricObject{
+ {
+ value: 1,
+ quantile: 0.5,
+ },
+ {
+ value: 7.8,
+ quantile: math.Inf(0),
+ },
+ },
+ },
+ expectedBoolAssert: assert.True,
+ },
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
- // Given the summary datapoints with quantile 0, quantile 100, sum and count
summaryDPS := pmetric.NewSummaryDataPointSlice()
summaryDP := summaryDPS.AppendEmpty()
- summaryDP.SetSum(tc.summaryMetricValue["sum"].(float64))
- summaryDP.SetCount(tc.summaryMetricValue["count"].(uint64))
+ summaryDP.SetSum(tc.summaryMetricValue.sum)
+ summaryDP.SetCount(tc.summaryMetricValue.count)
summaryDP.Attributes().PutStr("label1", "value1")
- summaryDP.QuantileValues().EnsureCapacity(2)
- firstQuantileValue := summaryDP.QuantileValues().AppendEmpty()
- firstQuantileValue.SetQuantile(0)
- firstQuantileValue.SetValue(tc.summaryMetricValue["firstQuantile"].(float64))
- secondQuantileValue := summaryDP.QuantileValues().AppendEmpty()
- secondQuantileValue.SetQuantile(100)
- secondQuantileValue.SetValue(tc.summaryMetricValue["secondQuantile"].(float64))
+ summaryDP.QuantileValues().EnsureCapacity(len(tc.summaryMetricValue.qMetrics))
+ for _, qMetric := range tc.summaryMetricValue.qMetrics {
+ newQ := summaryDP.QuantileValues().AppendEmpty()
+ newQ.SetValue(qMetric.value)
+ newQ.SetQuantile(qMetric.quantile)
+ }
summaryDatapointSlice := summaryDataPointSlice{deltaMetricMetadata{}, summaryDPS}
if tc.setFlagsFunc != nil {
tc.setFlagsFunc(summaryDatapointSlice.At(0))
}
- isStaleOrNaN, _ := summaryDatapointSlice.IsStaleOrNaN(0)
- tc.expectedBoolAssert(t, isStaleOrNaN)
+ isStaleNaNInf, _ := summaryDatapointSlice.IsStaleNaNInf(0)
+ tc.expectedBoolAssert(t, isStaleNaNInf)
})
}
diff --git a/exporter/awsemfexporter/emf_exporter.go b/exporter/awsemfexporter/emf_exporter.go
index 148e874062ad..d2a446481b53 100644
--- a/exporter/awsemfexporter/emf_exporter.go
+++ b/exporter/awsemfexporter/emf_exporter.go
@@ -172,7 +172,7 @@ func (emf *emfExporter) pushMetricsData(_ context.Context, md pmetric.Metrics) e
}
}
- emf.config.logger.Info("Finish processing resource metrics", zap.Any("labels", labels))
+ emf.config.logger.Debug("Finish processing resource metrics", zap.Any("labels", labels))
return nil
}
diff --git a/exporter/awsemfexporter/emf_exporter_test.go b/exporter/awsemfexporter/emf_exporter_test.go
index 76542fca93de..499f4226cf32 100644
--- a/exporter/awsemfexporter/emf_exporter_test.go
+++ b/exporter/awsemfexporter/emf_exporter_test.go
@@ -62,7 +62,7 @@ func TestConsumeMetrics(t *testing.T) {
expCfg.Region = "us-west-2"
expCfg.MaxRetries = 0
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
md := generateTestMetrics(testMetric{
@@ -103,7 +103,47 @@ func TestConsumeMetricsWithNaNValues(t *testing.T) {
expCfg.MaxRetries = 0
expCfg.OutputDestination = "stdout"
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
+ assert.NotNil(t, exp)
+ md := tc.generateFunc(tc.testName)
+ require.NoError(t, exp.pushMetricsData(ctx, md))
+ require.NoError(t, exp.shutdown(ctx))
+ })
+ }
+
+}
+
+func TestConsumeMetricsWithInfValues(t *testing.T) {
+ tests := []struct {
+ testName string
+ generateFunc func(string) pmetric.Metrics
+ }{
+ {
+ "histograme-with-inf",
+ generateTestHistogramMetricWithInfs,
+ }, {
+ "gauge-with-inf",
+ generateTestGaugeMetricInf,
+ }, {
+ "summary-with-inf",
+ generateTestSummaryMetricWithInf,
+ }, {
+ "exponentialHistogram-with-inf",
+ generateTestExponentialHistogramMetricWithInfs,
+ },
+ }
+
+ for _, tc := range tests {
+ t.Run(tc.testName, func(t *testing.T) {
+ ctx, cancel := context.WithCancel(context.Background())
+ defer cancel()
+ factory := NewFactory()
+ expCfg := factory.CreateDefaultConfig().(*Config)
+ expCfg.Region = "us-west-2"
+ expCfg.MaxRetries = 0
+ expCfg.OutputDestination = "stdout"
+ exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
+ assert.NoError(t, err)
assert.NotNil(t, exp)
md := tc.generateFunc(tc.testName)
require.NoError(t, exp.pushMetricsData(ctx, md))
@@ -122,7 +162,7 @@ func TestConsumeMetricsWithOutputDestination(t *testing.T) {
expCfg.MaxRetries = 0
expCfg.OutputDestination = "stdout"
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
md := generateTestMetrics(testMetric{
@@ -143,7 +183,7 @@ func TestConsumeMetricsWithLogGroupStreamConfig(t *testing.T) {
expCfg.LogGroupName = "test-logGroupName"
expCfg.LogStreamName = "test-logStreamName"
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
md := generateTestMetrics(testMetric{
@@ -170,7 +210,7 @@ func TestConsumeMetricsWithLogGroupStreamValidPlaceholder(t *testing.T) {
expCfg.LogGroupName = "/aws/ecs/containerinsights/{ClusterName}/performance"
expCfg.LogStreamName = "{TaskId}"
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
md := generateTestMetrics(testMetric{
@@ -201,7 +241,7 @@ func TestConsumeMetricsWithOnlyLogStreamPlaceholder(t *testing.T) {
expCfg.LogGroupName = "test-logGroupName"
expCfg.LogStreamName = "{TaskId}"
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
md := generateTestMetrics(testMetric{
@@ -232,7 +272,7 @@ func TestConsumeMetricsWithWrongPlaceholder(t *testing.T) {
expCfg.LogGroupName = "test-logGroupName"
expCfg.LogStreamName = "{WrongKey}"
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
md := generateTestMetrics(testMetric{
@@ -263,7 +303,7 @@ func TestPushMetricsDataWithErr(t *testing.T) {
expCfg.LogGroupName = "test-logGroupName"
expCfg.LogStreamName = "test-logStreamName"
exp, err := newEmfExporter(expCfg, exportertest.NewNopCreateSettings())
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
logPusher := new(mockPusher)
@@ -295,7 +335,7 @@ func TestNewExporterWithoutConfig(t *testing.T) {
t.Setenv("AWS_STS_REGIONAL_ENDPOINTS", "fake")
exp, err := newEmfExporter(expCfg, settings)
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.Nil(t, exp)
assert.Equal(t, settings.Logger, expCfg.logger)
}
@@ -332,10 +372,10 @@ func TestNewExporterWithMetricDeclarations(t *testing.T) {
params.Logger = zap.New(obs)
exp, err := newEmfExporter(expCfg, params)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
err = expCfg.Validate()
- assert.Nil(t, err)
+ assert.NoError(t, err)
// Invalid metric declaration should be filtered out
assert.Equal(t, 3, len(exp.config.MetricDeclarations))
@@ -365,7 +405,7 @@ func TestNewExporterWithMetricDeclarations(t *testing.T) {
func TestNewExporterWithoutSession(t *testing.T) {
exp, err := newEmfExporter(nil, exportertest.NewNopCreateSettings())
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.Nil(t, exp)
}
@@ -387,13 +427,14 @@ func TestNewEmfExporterWithoutConfig(t *testing.T) {
t.Setenv("AWS_STS_REGIONAL_ENDPOINTS", "fake")
exp, err := newEmfExporter(expCfg, settings)
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.Nil(t, exp)
assert.Equal(t, settings.Logger, expCfg.logger)
}
func TestMiddleware(t *testing.T) {
- id := component.NewID("test")
+ testType, _ := component.NewType("test")
+ id := component.NewID(testType)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
factory := NewFactory()
diff --git a/exporter/awsemfexporter/factory_test.go b/exporter/awsemfexporter/factory_test.go
index 5a01cde8e03c..d1b71fec7f84 100644
--- a/exporter/awsemfexporter/factory_test.go
+++ b/exporter/awsemfexporter/factory_test.go
@@ -38,7 +38,7 @@ func TestCreateTracesExporter(t *testing.T) {
ctx := context.Background()
exporter, err := factory.CreateTracesExporter(ctx, exportertest.NewNopCreateSettings(), cfg)
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.Nil(t, exporter)
}
@@ -54,6 +54,6 @@ func TestCreateMetricsExporter(t *testing.T) {
ctx := context.Background()
exporter, err := factory.CreateMetricsExporter(ctx, exportertest.NewNopCreateSettings(), cfg)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exporter)
}
diff --git a/exporter/awsemfexporter/generated_component_test.go b/exporter/awsemfexporter/generated_component_test.go
new file mode 100644
index 000000000000..8613a09d57d9
--- /dev/null
+++ b/exporter/awsemfexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package awsemfexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/awsemfexporter/go.mod b/exporter/awsemfexporter/go.mod
index 3668d21c949b..6fb7f4694a6b 100644
--- a/exporter/awsemfexporter/go.mod
+++ b/exporter/awsemfexporter/go.mod
@@ -1,36 +1,43 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsemfexporter
-go 1.20
+go 1.21
require (
- github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-00010101000000-000000000000
- github.com/aws/aws-sdk-go v1.47.10
- github.com/google/uuid v1.4.0
- github.com/jellydator/ttlcache/v3 v3.1.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/metrics v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-20240419190856-2f880467f335
+ github.com/aws/aws-sdk-go v1.51.17
+ github.com/google/uuid v1.6.0
+ github.com/jellydator/ttlcache/v3 v3.2.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/cwlogs v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/metrics v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/featuregate v1.5.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22
+ go.uber.org/zap v1.27.0
+ golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc
)
require (
github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-00010101000000-000000000000 // indirect
github.com/aws/aws-sdk-go-v2 v1.22.2 // indirect
github.com/aws/smithy-go v1.16.0 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
@@ -38,29 +45,33 @@ require (
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sync v0.3.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/awsemfexporter/go.sum b/exporter/awsemfexporter/go.sum
index 5d50f63cf2b4..7852498cf43e 100644
--- a/exporter/awsemfexporter/go.sum
+++ b/exporter/awsemfexporter/go.sum
@@ -1,73 +1,58 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-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/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 h1:OPLEkmhXf6xFPiz0bLeDArZIDx1NNS4oJyG4nv3Gct0=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 h1:6lJvvkQ9HmbHZ4h/IEwclwv2mrTW8Uq1SOB/kXy0mfw=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 h1:m0QTSI6pZYJTk5WSKx3fm5cNW/DCicVzULBgU/6IyD0=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 h1:eev2yZX7esGRjqRbnVk1UxMLw4CyVZDpZXRCcy75oQk=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 h1:v0jkRigbSD6uOdwcaUQmgEwG1BkPfAPDqaeNt/29ghg=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8=
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 h1:wl5dxN1NONhTDQD9uaEvNsDRX29cBmGED/nl0jkWlt4=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM=
github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/jellydator/ttlcache/v3 v3.1.0 h1:0gPFG0IHHP6xyUyXq+JaD8fwkDCqgqwohXNJBcYE71g=
-github.com/jellydator/ttlcache/v3 v3.1.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
+github.com/jellydator/ttlcache/v3 v3.2.0 h1:6lqVJ8X3ZaUwvzENqPAobDsXNExfUJd61u++uW8a3LE=
+github.com/jellydator/ttlcache/v3 v3.2.0/go.mod h1:hi7MGFdMAwZna5n2tuvh63DvFLzVKySzCVW6+0gA2n4=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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=
@@ -80,15 +65,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -98,108 +82,96 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -207,39 +179,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/awsemfexporter/grouped_metric.go b/exporter/awsemfexporter/grouped_metric.go
index c62c723a4a5e..dd3426cdc2e9 100644
--- a/exporter/awsemfexporter/grouped_metric.go
+++ b/exporter/awsemfexporter/grouped_metric.go
@@ -27,16 +27,24 @@ type metricInfo struct {
}
// addToGroupedMetric processes OT metrics and adds them into GroupedMetric buckets
-func addToGroupedMetric(pmd pmetric.Metric, groupedMetrics map[any]*groupedMetric, metadata cWMetricMetadata, patternReplaceSucceeded bool, logger *zap.Logger, descriptor map[string]MetricDescriptor, config *Config, calculators *emfCalculators) error {
-
- dps := getDataPoints(pmd, metadata, logger)
+func addToGroupedMetric(
+ pmd pmetric.Metric,
+ groupedMetrics map[any]*groupedMetric,
+ metadata cWMetricMetadata,
+ patternReplaceSucceeded bool,
+ descriptor map[string]MetricDescriptor,
+ config *Config,
+ calculators *emfCalculators,
+) error {
+
+ dps := getDataPoints(pmd, metadata, config.logger)
if dps == nil || dps.Len() == 0 {
return nil
}
for i := 0; i < dps.Len(); i++ {
// Drop stale or NaN metric values
- if staleOrNan, attrs := dps.IsStaleOrNaN(i); staleOrNan {
+ if isStaleNanInf, attrs := dps.IsStaleNaNInf(i); isStaleNanInf {
if config != nil && config.logger != nil {
config.logger.Debug("dropped metric with nan value",
zap.String("metric.name", pmd.Name()),
@@ -83,7 +91,7 @@ func addToGroupedMetric(pmd pmetric.Metric, groupedMetrics map[any]*groupedMetri
if _, ok := groupedMetrics[groupKey]; ok {
// if MetricName already exists in metrics map, print warning log
if _, ok := groupedMetrics[groupKey].metrics[dp.name]; ok {
- logger.Warn(
+ config.logger.Warn(
"Duplicate metric found",
zap.String("Name", dp.name),
zap.Any("Labels", labels),
diff --git a/exporter/awsemfexporter/grouped_metric_test.go b/exporter/awsemfexporter/grouped_metric_test.go
index a21d5f523771..47bee6e50fea 100644
--- a/exporter/awsemfexporter/grouped_metric_test.go
+++ b/exporter/awsemfexporter/grouped_metric_test.go
@@ -27,7 +27,6 @@ func TestAddToGroupedMetric(t *testing.T) {
namespace := "namespace"
instrumentationLibName := "cloudwatch-otel"
timestamp := time.Now().UnixNano() / int64(time.Millisecond)
- logger := zap.NewNop()
testCases := []struct {
name string
@@ -110,11 +109,11 @@ func TestAddToGroupedMetric(t *testing.T) {
for i := 0; i < metrics.Len(); i++ {
err := addToGroupedMetric(metrics.At(i), groupedMetrics,
generateTestMetricMetadata(namespace, timestamp, logGroup, logStreamName, instrumentationLibName, metrics.At(i).Type()),
- true, zap.NewNop(),
+ true,
nil,
testCfg,
emfCalcs)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
assert.Equal(t, 1, len(groupedMetrics))
@@ -153,11 +152,10 @@ func TestAddToGroupedMetric(t *testing.T) {
groupedMetrics,
generateTestMetricMetadata(namespace, timestamp, logGroup, logStreamName, instrumentationLibName, metrics.At(i).Type()),
true,
- logger,
nil,
testCfg,
emfCalcs)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
assert.Equal(t, 4, len(groupedMetrics))
@@ -192,7 +190,7 @@ func TestAddToGroupedMetric(t *testing.T) {
}
})
- t.Run("Add multiple different metrics with NaN types", func(t *testing.T) {
+ t.Run("Add multiple different metrics with NaN and Inf types", func(t *testing.T) {
emfCalcs := setupEmfCalculators()
defer require.NoError(t, shutdownEmfCalculators(emfCalcs))
@@ -204,28 +202,32 @@ func TestAddToGroupedMetric(t *testing.T) {
generateTestSumMetric("int-sum", intValueType),
generateTestSumMetric("double-sum", doubleValueType),
generateTestSummaryMetric("summary"),
- // We do not expect these to be added to the grouped metric. Metrics with NaN values should be dropped.
+ // We do not expect these to be added to the grouped metric. Metrics with NaN or Inf values should be dropped.
generateTestGaugeMetricNaN("double-gauge-nan"),
generateTestExponentialHistogramMetricWithNaNs("expo-with-nan"),
generateTestHistogramMetricWithNaNs("histo-with-nan"),
generateTestSummaryMetricWithNaN("sum-with-nan"),
+ generateTestGaugeMetricInf("double-gauge-inf"),
+ generateTestExponentialHistogramMetricWithInfs("expo-with-inf"),
+ generateTestHistogramMetricWithInfs("histo-with-inf"),
+ generateTestSummaryMetricWithInf("sum-with-inf"),
}
finalOtelMetrics := generateOtelTestMetrics(generateMetrics...)
rms := finalOtelMetrics.ResourceMetrics()
ilms := rms.At(0).ScopeMetrics()
metrics := ilms.At(0).Metrics()
- require.Equal(t, 14, metrics.Len(), "mock metric creation failed")
+ // Verify if all metrics are generated, including NaN, Inf values
+ require.Equal(t, 19, metrics.Len(), "mock metric creation failed")
for i := 0; i < metrics.Len(); i++ {
err := addToGroupedMetric(metrics.At(i),
groupedMetrics,
generateTestMetricMetadata(namespace, timestamp, logGroup, logStreamName, instrumentationLibName, metrics.At(i).Type()),
true,
- logger,
nil,
testCfg,
emfCalcs)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
assert.Equal(t, 4, len(groupedMetrics))
@@ -272,11 +274,11 @@ func TestAddToGroupedMetric(t *testing.T) {
err := addToGroupedMetric(metric,
groupedMetrics,
metricMetadata1,
- true, logger,
+ true,
nil,
testCfg,
emfCalcs)
- assert.Nil(t, err)
+ assert.NoError(t, err)
metricMetadata2 := generateTestMetricMetadata(namespace,
timestamp,
@@ -285,8 +287,8 @@ func TestAddToGroupedMetric(t *testing.T) {
instrumentationLibName,
metric.Type(),
)
- err = addToGroupedMetric(metric, groupedMetrics, metricMetadata2, true, logger, nil, testCfg, emfCalcs)
- assert.Nil(t, err)
+ err = addToGroupedMetric(metric, groupedMetrics, metricMetadata2, true, nil, testCfg, emfCalcs)
+ assert.NoError(t, err)
assert.Len(t, groupedMetrics, 2)
seenLogGroup1 := false
@@ -333,18 +335,18 @@ func TestAddToGroupedMetric(t *testing.T) {
assert.Equal(t, 2, metrics.Len())
obs, logs := observer.New(zap.WarnLevel)
- obsLogger := zap.New(obs)
+ testCfg.logger = zap.New(obs)
for i := 0; i < metrics.Len(); i++ {
err := addToGroupedMetric(metrics.At(i),
groupedMetrics,
generateTestMetricMetadata(namespace, timestamp, logGroup, logStreamName, instrumentationLibName, metrics.At(i).Type()),
- true, obsLogger,
+ true,
nil,
testCfg,
emfCalcs,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
assert.Equal(t, 1, len(groupedMetrics))
@@ -377,17 +379,16 @@ func TestAddToGroupedMetric(t *testing.T) {
metric.SetUnit("Count")
obs, logs := observer.New(zap.WarnLevel)
- obsLogger := zap.New(obs)
+ testCfg.logger = zap.New(obs)
err := addToGroupedMetric(metric,
groupedMetrics,
generateTestMetricMetadata(namespace, timestamp, logGroup, logStreamName, instrumentationLibName, pmetric.MetricTypeEmpty),
true,
- obsLogger,
nil,
testCfg,
emfCalcs,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, 0, len(groupedMetrics))
// Test output warning logs
@@ -455,14 +456,12 @@ func BenchmarkAddToGroupedMetric(b *testing.B) {
metrics := rms.At(0).ScopeMetrics().At(0).Metrics()
numMetrics := metrics.Len()
- logger := zap.NewNop()
-
b.ResetTimer()
for n := 0; n < b.N; n++ {
groupedMetrics := make(map[any]*groupedMetric)
for i := 0; i < numMetrics; i++ {
metadata := generateTestMetricMetadata("namespace", int64(1596151098037), "log-group", "log-stream", "cloudwatch-otel", metrics.At(i).Type())
- err := addToGroupedMetric(metrics.At(i), groupedMetrics, metadata, true, logger, nil, testCfg, emfCalcs)
+ err := addToGroupedMetric(metrics.At(i), groupedMetrics, metadata, true, nil, testCfg, emfCalcs)
assert.Nil(b, err)
}
}
@@ -496,7 +495,7 @@ func TestTranslateUnit(t *testing.T) {
"Bi": "Bits",
}
for input, output := range translateUnitCases {
- t.Run(input, func(tt *testing.T) {
+ t.Run(input, func(_ *testing.T) {
metric.SetUnit(input)
v := translateUnit(metric, translator.metricDescriptor)
diff --git a/exporter/awsemfexporter/internal/metadata/generated_status.go b/exporter/awsemfexporter/internal/metadata/generated_status.go
index 4496ea408180..5d050d27619a 100644
--- a/exporter/awsemfexporter/internal/metadata/generated_status.go
+++ b/exporter/awsemfexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("awsemf")
)
const (
- Type = "awsemf"
MetricsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/awsemf")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/awsemf")
+}
diff --git a/exporter/awsemfexporter/metadata.yaml b/exporter/awsemfexporter/metadata.yaml
index 582e4087ead6..62292f087f17 100644
--- a/exporter/awsemfexporter/metadata.yaml
+++ b/exporter/awsemfexporter/metadata.yaml
@@ -1,9 +1,17 @@
type: awsemf
+scope_name: otelcol/awsemf
status:
class: exporter
stability:
beta: [metrics]
- distributions: [contrib, aws, observiq]
+ distributions: [contrib]
codeowners:
active: [Aneurysm9, shaochengwang, mxiamxia, bryan-aguilar]
+
+tests:
+ config:
+ region: 'us-west-2'
+ resource_to_telemetry_conversion:
+ enabled: true
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/awsemfexporter/metric_declaration_test.go b/exporter/awsemfexporter/metric_declaration_test.go
index 78c6d11bff5e..00706b006a33 100644
--- a/exporter/awsemfexporter/metric_declaration_test.go
+++ b/exporter/awsemfexporter/metric_declaration_test.go
@@ -19,37 +19,37 @@ func TestLabelMatcherInit(t *testing.T) {
Regex: ".+",
}
err := lm.init()
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, ";", lm.Separator)
assert.Equal(t, ".+", lm.Regex)
assert.NotNil(t, lm.compiledRegex)
lm.Separator = ""
err = lm.init()
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, ";", lm.Separator)
lm.Separator = ","
err = lm.init()
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, ",", lm.Separator)
lm.Regex = "a*"
err = lm.init()
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, "a*", lm.Regex)
assert.NotNil(t, lm.compiledRegex)
// Test error
lm.Regex = ""
err = lm.init()
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.EqualError(t, err, "regex not specified for label matcher")
lm.LabelNames = []string{}
lm.Regex = ".+"
err = lm.init()
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.EqualError(t, err, "label matcher must have at least one label name specified")
}
@@ -104,7 +104,7 @@ func TestGetConcatenatedLabels(t *testing.T) {
Regex: ".+",
}
err := lm.init()
- assert.Nil(t, err)
+ assert.NoError(t, err)
t.Run(tc.testName, func(t *testing.T) {
concatenatedLabels := lm.getConcatenatedLabels(labels)
assert.Equal(t, tc.expected, concatenatedLabels)
@@ -210,7 +210,7 @@ func TestLabelMatcherMatches(t *testing.T) {
for _, tc := range testCases {
err := tc.labelMatcher.init()
- assert.Nil(t, err)
+ assert.NoError(t, err)
t.Run(tc.testName, func(t *testing.T) {
matches := tc.labelMatcher.Matches(tc.labels)
assert.Equal(t, tc.expected, matches)
@@ -225,7 +225,7 @@ func TestMetricDeclarationInit(t *testing.T) {
MetricNameSelectors: []string{"a", "b", "aa"},
}
err := m.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, 3, len(m.metricRegexList))
})
@@ -238,7 +238,7 @@ func TestMetricDeclarationInit(t *testing.T) {
MetricNameSelectors: []string{"a.*", "b$", "aa+"},
}
err := m.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, 3, len(m.metricRegexList))
assert.Equal(t, 2, len(m.Dimensions))
})
@@ -255,7 +255,7 @@ func TestMetricDeclarationInit(t *testing.T) {
obs, logs := observer.New(zap.WarnLevel)
obsLogger := zap.New(obs)
err := m.init(obsLogger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, 3, len(m.metricRegexList))
assert.Equal(t, 1, len(m.Dimensions))
// Check logged warning message
@@ -280,7 +280,7 @@ func TestMetricDeclarationInit(t *testing.T) {
obs, logs := observer.New(zap.DebugLevel)
obsLogger := zap.New(obs)
err := m.init(obsLogger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, 1, len(m.Dimensions))
assert.Equal(t, []string{"a", "b", "c"}, m.Dimensions[0])
// Check logged warning message
@@ -302,7 +302,7 @@ func TestMetricDeclarationInit(t *testing.T) {
t.Run("invalid metric declaration", func(t *testing.T) {
m := &MetricDeclaration{}
err := m.init(logger)
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.EqualError(t, err, "invalid metric declaration: no metric name selectors defined")
})
@@ -323,7 +323,7 @@ func TestMetricDeclarationInit(t *testing.T) {
},
}
err := m.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, 2, len(m.LabelMatchers))
assert.Equal(t, ";", m.LabelMatchers[0].Separator)
assert.Equal(t, ".+", m.LabelMatchers[0].Regex)
@@ -349,7 +349,7 @@ func TestMetricDeclarationInit(t *testing.T) {
},
}
err := m.init(logger)
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.EqualError(t, err, "label matcher must have at least one label name specified")
m = &MetricDeclaration{
@@ -361,7 +361,7 @@ func TestMetricDeclarationInit(t *testing.T) {
},
}
err = m.init(logger)
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.EqualError(t, err, "regex not specified for label matcher")
})
}
@@ -372,7 +372,7 @@ func TestMetricDeclarationMatchesName(t *testing.T) {
}
logger := zap.NewNop()
err := m.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, m.MatchesName("a"))
assert.True(t, m.MatchesName("aa"))
@@ -497,7 +497,7 @@ func TestMetricDeclarationMatchesLabels(t *testing.T) {
}
t.Run(tc.testName, func(t *testing.T) {
err := m.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
matches := m.MatchesLabels(labels)
assert.Equal(t, tc.expected, matches)
})
@@ -580,7 +580,7 @@ func TestExtractDimensions(t *testing.T) {
}
t.Run(tc.testName, func(t *testing.T) {
err := m.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
dimensions := m.ExtractDimensions(tc.labels)
assert.Equal(t, tc.extractedDimensions, dimensions)
})
diff --git a/exporter/awsemfexporter/metric_translator.go b/exporter/awsemfexporter/metric_translator.go
index f432a07dcaa3..19415b46113b 100644
--- a/exporter/awsemfexporter/metric_translator.go
+++ b/exporter/awsemfexporter/metric_translator.go
@@ -160,7 +160,7 @@ func (mt metricTranslator) translateOTelToGroupedMetric(rm pmetric.ResourceMetri
instrumentationScopeName: instrumentationScopeName,
receiver: metricReceiver,
}
- err := addToGroupedMetric(metric, groupedMetrics, metadata, patternReplaceSucceeded, config.logger, mt.metricDescriptor, config, mt.calculators)
+ err := addToGroupedMetric(metric, groupedMetrics, metadata, patternReplaceSucceeded, mt.metricDescriptor, config, mt.calculators)
if err != nil {
return err
}
diff --git a/exporter/awsemfexporter/metric_translator_test.go b/exporter/awsemfexporter/metric_translator_test.go
index 852ccdcc54d5..3c893c07e0ba 100644
--- a/exporter/awsemfexporter/metric_translator_test.go
+++ b/exporter/awsemfexporter/metric_translator_test.go
@@ -412,7 +412,7 @@ func TestTranslateOtToGroupedMetric(t *testing.T) {
t.Run(tc.testName, func(t *testing.T) {
groupedMetrics := make(map[any]*groupedMetric)
err := translator.translateOTelToGroupedMetric(tc.metric, groupedMetrics, config)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, groupedMetrics)
assert.Equal(t, defaultNumberOfTestMetrics, len(groupedMetrics))
@@ -453,7 +453,7 @@ func TestTranslateOtToGroupedMetric(t *testing.T) {
rm.Resource().Attributes().PutStr(occonventions.AttributeExporterVersion, "SomeVersion")
groupedMetrics := make(map[any]*groupedMetric)
err := translator.translateOTelToGroupedMetric(rm, groupedMetrics, config)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, 0, len(groupedMetrics))
})
}
@@ -996,7 +996,7 @@ func TestTranslateGroupedMetricToCWMetric(t *testing.T) {
}
for _, decl := range tc.metricDeclarations {
err := decl.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
cWMetric := translateGroupedMetricToCWMetric(tc.groupedMetric, config)
assert.NotNil(t, cWMetric)
@@ -1640,7 +1640,7 @@ func TestGroupedMetricToCWMeasurementsWithFilters(t *testing.T) {
}
for _, decl := range tc.metricDeclarations {
err := decl.init(logger)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
cWMeasurements := groupedMetricToCWMeasurementsWithFilters(groupedMetric, config)
@@ -1685,7 +1685,7 @@ func TestGroupedMetricToCWMeasurementsWithFilters(t *testing.T) {
}
for _, decl := range metricDeclarations {
err := decl.init(zap.NewNop())
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
obs, logs := observer.New(zap.DebugLevel)
logger := zap.New(obs)
@@ -1750,7 +1750,7 @@ func TestGroupedMetricToCWMeasurementsWithFilters(t *testing.T) {
}
for _, decl := range metricDeclarations {
err := decl.init(zap.NewNop())
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
obs, logs := observer.New(zap.DebugLevel)
logger := zap.New(obs)
@@ -2165,7 +2165,7 @@ func TestGroupedMetricToCWMeasurementsWithFilters(t *testing.T) {
}
for _, decl := range tc.metricDeclarations {
err := decl.init(zap.NewNop())
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
config := &Config{
DimensionRollupOption: tc.dimensionRollupOption,
@@ -2550,7 +2550,7 @@ func TestTranslateOtToGroupedMetricForLogGroupAndStream(t *testing.T) {
rm := test.inputMetrics.ResourceMetrics().At(0)
err := translator.translateOTelToGroupedMetric(rm, groupedMetrics, config)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, groupedMetrics)
assert.Equal(t, 1, len(groupedMetrics))
@@ -2581,7 +2581,7 @@ func TestTranslateOtToGroupedMetricForInitialDeltaValue(t *testing.T) {
rm := test.inputMetrics.ResourceMetrics().At(0)
err := translator.translateOTelToGroupedMetric(rm, groupedMetrics, config)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, groupedMetrics)
assert.Equal(t, 1, len(groupedMetrics))
diff --git a/exporter/awskinesisexporter/README.md b/exporter/awskinesisexporter/README.md
index cea253290ec0..a6e873e2e7d9 100644
--- a/exporter/awskinesisexporter/README.md
+++ b/exporter/awskinesisexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fawskinesis%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fawskinesis) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fawskinesis%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fawskinesis) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@Aneurysm9](https://www.github.com/Aneurysm9), [@MovieStoreGuy](https://www.github.com/MovieStoreGuy) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
The kinesis exporter currently exports dynamic encodings to the configured kinesis stream.
diff --git a/exporter/awskinesisexporter/config.go b/exporter/awskinesisexporter/config.go
index c58ee025a584..b4aded26792a 100644
--- a/exporter/awskinesisexporter/config.go
+++ b/exporter/awskinesisexporter/config.go
@@ -7,6 +7,7 @@ import (
"fmt"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -27,7 +28,7 @@ type Encoding struct {
type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"`
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
Encoding `mapstructure:"encoding"`
AWS AWSConfig `mapstructure:"aws"`
diff --git a/exporter/awskinesisexporter/config_test.go b/exporter/awskinesisexporter/config_test.go
index 37f0001d63ef..bc5d78ece97b 100644
--- a/exporter/awskinesisexporter/config_test.go
+++ b/exporter/awskinesisexporter/config_test.go
@@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -34,7 +35,7 @@ func TestLoadConfig(t *testing.T) {
id: component.NewIDWithName(metadata.Type, "default"),
expected: &Config{
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
Encoding: Encoding{
Name: "otlp",
@@ -50,7 +51,7 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, ""),
expected: &Config{
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: false,
MaxInterval: 30 * time.Second,
InitialInterval: 5 * time.Second,
diff --git a/exporter/awskinesisexporter/factory.go b/exporter/awskinesisexporter/factory.go
index 47fc792b008d..d4d0a4c48dc2 100644
--- a/exporter/awskinesisexporter/factory.go
+++ b/exporter/awskinesisexporter/factory.go
@@ -9,6 +9,7 @@ import (
"context"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -35,7 +36,7 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
Encoding: Encoding{
Name: defaultEncoding,
@@ -62,7 +63,7 @@ func newTracesExporter(ctx context.Context, params exporter.CreateSettings, conf
exp.consumeTraces,
exporterhelper.WithStart(exp.start),
exporterhelper.WithTimeout(c.TimeoutSettings),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
exporterhelper.WithQueue(c.QueueSettings),
)
}
@@ -80,7 +81,7 @@ func newMetricsExporter(ctx context.Context, params exporter.CreateSettings, con
exp.consumeMetrics,
exporterhelper.WithStart(exp.start),
exporterhelper.WithTimeout(c.TimeoutSettings),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
exporterhelper.WithQueue(c.QueueSettings),
)
}
@@ -98,7 +99,7 @@ func newLogsExporter(ctx context.Context, params exporter.CreateSettings, conf c
exp.consumeLogs,
exporterhelper.WithStart(exp.start),
exporterhelper.WithTimeout(c.TimeoutSettings),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
exporterhelper.WithQueue(c.QueueSettings),
)
}
diff --git a/exporter/awskinesisexporter/generated_component_test.go b/exporter/awskinesisexporter/generated_component_test.go
new file mode 100644
index 000000000000..597a3eb9754f
--- /dev/null
+++ b/exporter/awskinesisexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package awskinesisexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/awskinesisexporter/go.mod b/exporter/awskinesisexporter/go.mod
index 74813841f3de..5aaa4011dffb 100644
--- a/exporter/awskinesisexporter/go.mod
+++ b/exporter/awskinesisexporter/go.mod
@@ -1,75 +1,83 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awskinesisexporter
-go 1.20
+go 1.21
require (
- github.com/aws/aws-sdk-go-v2 v1.22.2
- github.com/aws/aws-sdk-go-v2/config v1.24.0
- github.com/aws/aws-sdk-go-v2/credentials v1.15.2
- github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1
- github.com/aws/aws-sdk-go-v2/service/sts v1.25.1
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/aws/aws-sdk-go-v2 v1.26.1
+ github.com/aws/aws-sdk-go-v2/config v1.27.11
+ github.com/aws/aws-sdk-go-v2/credentials v1.17.11
+ github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4
+ github.com/aws/aws-sdk-go-v2/service/sts v1.28.6
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/gogo/protobuf v1.3.2
- github.com/google/uuid v1.4.0
- github.com/jaegertracing/jaeger v1.48.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ github.com/google/uuid v1.6.0
+ github.com/jaegertracing/jaeger v1.55.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
)
require (
github.com/apache/thrift v0.19.0 // indirect
- github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 // indirect
- github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 // indirect
- github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 // indirect
- github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 // indirect
- github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 // indirect
- github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 // indirect
- github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 // indirect
- github.com/aws/smithy-go v1.16.0 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
+ github.com/aws/smithy-go v1.20.2 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
github.com/openzipkin/zipkin-go v0.4.2 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/atomic v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.49.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/awskinesisexporter/go.sum b/exporter/awskinesisexporter/go.sum
index 44e06bd0f779..a76c4a0c5972 100644
--- a/exporter/awskinesisexporter/go.sum
+++ b/exporter/awskinesisexporter/go.sum
@@ -1,90 +1,65 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
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/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
-github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0 h1:hHgLiIrTRtddC0AKcJr5s7i/hLgcpTt+q/FKxf1Zayk=
-github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.5.0/go.mod h1:w4I/v3NOWgD+qvs1NPEwhd++1h3XPHFaVxasfY6HlYQ=
-github.com/aws/aws-sdk-go-v2/config v1.24.0 h1:4LEk29JO3w+y9dEo/5Tq5QTP7uIEw+KQrKiHOs4xlu4=
-github.com/aws/aws-sdk-go-v2/config v1.24.0/go.mod h1:11nNDAuK86kOUHeuEQo8f3CkcV5xuUxvPwFjTZE/PnQ=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2 h1:rKH7khRMxPdD0u3dHecd0Q7NOVw3EUe7AqdkUOkiOGI=
-github.com/aws/aws-sdk-go-v2/credentials v1.15.2/go.mod h1:tXM8wmaeAhfC7nZoCxb0FzM/aRaB1m1WQ7x0qlBLq80=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3 h1:G5KawTAkyHH6WyKQCdHiW4h3PmAXNJpOgwKg3H7sDRE=
-github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.14.3/go.mod h1:hugKmSFnZB+HgNI1sYGT14BUPZkO6alC/e0AWu+0IAQ=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2 h1:AaQsr5vvGR7rmeSWBtTCcw16tT9r51mWijuCQhzLnq8=
-github.com/aws/aws-sdk-go-v2/internal/configsources v1.2.2/go.mod h1:o1IiRn7CWocIFTXJjGKJDOwxv1ibL53NpcvcqGWyRBA=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2 h1:UZx8SXZ0YtzRiALzYAWcjb9Y9hZUR7MBKaBQ5ouOjPs=
-github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.5.2/go.mod h1:ipuRpcSaklmxR6C39G187TpBAO132gUfleTGccUPs8c=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0 h1:usgqiJtamuGIBj+OvYmMq89+Z1hIKkMJToz1WpoeNUY=
-github.com/aws/aws-sdk-go-v2/internal/ini v1.7.0/go.mod h1:6fQQgfuGmw8Al/3M2IgIllycxV7ZW7WCdVSqfBeUiCY=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2 h1:h7j73yuAVVjic8pqswh+L/7r2IHP43QwRyOu6zcCDDE=
-github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.10.2/go.mod h1:H07AHdK5LSy8F7EJUQhoxyiCNkePoHj2D8P2yGTWafo=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1 h1:wLRIuz/llNgtN1OvZDmSotR+hjIXSxbxX/3Nw9ViaRg=
-github.com/aws/aws-sdk-go-v2/service/kinesis v1.22.1/go.mod h1:tMRFyoPjrh0oGqCKQHOf1EkxVzLynY/uQk2pejYVrzk=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1 h1:km+ZNjtLtpXYf42RdaDZnNHm9s7SYAuDGTafy6nd89A=
-github.com/aws/aws-sdk-go-v2/service/sso v1.17.1/go.mod h1:aHBr3pvBSD5MbzOvQtYutyPLLRPbl/y9x86XyJJnUXQ=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1 h1:iRFNqZH4a67IqPvK8xxtyQYnyrlsvwmpHOe9r55ggBA=
-github.com/aws/aws-sdk-go-v2/service/ssooidc v1.19.1/go.mod h1:pTy5WM+6sNv2tB24JNKFtn6EvciQ5k40ZJ0pq/Iaxj0=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1 h1:txgVXIXWPXyqdiVn92BV6a/rgtpX31HYdsOYj0sVQQQ=
-github.com/aws/aws-sdk-go-v2/service/sts v1.25.1/go.mod h1:VAiJiNaoP1L89STFlEMgmHX1bKixY+FaP+TpRFrmyZ4=
-github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
-github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
+github.com/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=
+github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 h1:x6xsQXGSmW6frevwDA+vi/wqhp1ct18mVXYN08/93to=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2/go.mod h1:lPprDr1e6cJdyYeGXnRaJoP4Md+cDBvi2eOj00BlGmg=
+github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=
+github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4 h1:Oe8awBiS/iitcsRJB5+DHa3iCxoA0KwJJf0JNrYMINY=
+github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.4/go.mod h1:RCZCSFbieSgNG1RKegO26opXV4EXyef/vNBVJsUyHuw=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
+github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
+github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+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/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/jaegertracing/jaeger v1.48.0 h1:YuKooQ7qJsjgxws9xuf8C/BLNTPx8qTAJz4wv7IHhSc=
-github.com/jaegertracing/jaeger v1.48.0/go.mod h1:BoAPkdCAIEuLsVz/EDhjXd+GSVpHtJhiGqWoFEvBCKg=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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=
@@ -97,16 +72,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -114,115 +87,93 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
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/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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.49.0 h1:ToNTdK4zSnPVJmh698mGFkDor9wBI/iGaJy5dbH1EgI=
+github.com/prometheus/common v0.49.0/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
-go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -230,39 +181,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/awskinesisexporter/internal/batch/batch.go b/exporter/awskinesisexporter/internal/batch/batch.go
index ee2c35401d04..9aab615793cc 100644
--- a/exporter/awskinesisexporter/internal/batch/batch.go
+++ b/exporter/awskinesisexporter/internal/batch/batch.go
@@ -67,7 +67,7 @@ func New(opts ...Option) *Batch {
maxBatchSize: MaxBatchedRecords,
maxRecordSize: MaxRecordSize,
compression: compress.NewNoopCompressor(),
- records: make([]types.PutRecordsRequestEntry, 0, MaxRecordSize),
+ records: make([]types.PutRecordsRequestEntry, 0, MaxBatchedRecords),
}
for _, op := range opts {
diff --git a/exporter/awskinesisexporter/internal/batch/batch_max_records_test.go b/exporter/awskinesisexporter/internal/batch/batch_max_records_test.go
new file mode 100644
index 000000000000..fb4215117448
--- /dev/null
+++ b/exporter/awskinesisexporter/internal/batch/batch_max_records_test.go
@@ -0,0 +1,18 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package batch
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+)
+
+func TestBatchRecordsCapacity(t *testing.T) {
+ t.Parallel()
+
+ b := New()
+
+ assert.Equal(t, MaxBatchedRecords, cap(b.records), "Must have correct value set")
+}
diff --git a/exporter/awskinesisexporter/internal/batch/package_test.go b/exporter/awskinesisexporter/internal/batch/package_test.go
new file mode 100644
index 000000000000..89fc4ed7891f
--- /dev/null
+++ b/exporter/awskinesisexporter/internal/batch/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package batch
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/awskinesisexporter/internal/compress/compresser.go b/exporter/awskinesisexporter/internal/compress/compresser.go
index f3060253678f..9197d19e3556 100644
--- a/exporter/awskinesisexporter/internal/compress/compresser.go
+++ b/exporter/awskinesisexporter/internal/compress/compresser.go
@@ -16,6 +16,7 @@ type bufferedResetWriter interface {
Write(p []byte) (int, error)
Flush() error
Reset(newWriter io.Writer)
+ Close() error
}
type Compressor interface {
@@ -74,5 +75,11 @@ func (c *compressor) Do(in []byte) ([]byte, error) {
return nil, err
}
+ if closer, ok := c.compression.(io.Closer); ok {
+ if err := closer.Close(); err != nil {
+ return nil, err
+ }
+ }
+
return buf.Bytes(), nil
}
diff --git a/exporter/awskinesisexporter/internal/compress/noop_compression.go b/exporter/awskinesisexporter/internal/compress/noop_compression.go
index 0c8abf17b329..be594b6214f1 100644
--- a/exporter/awskinesisexporter/internal/compress/noop_compression.go
+++ b/exporter/awskinesisexporter/internal/compress/noop_compression.go
@@ -26,3 +26,5 @@ func (n noop) Write(p []byte) (int, error) {
func (n noop) Flush() error {
return nil
}
+
+func (n *noop) Close() error { return nil }
diff --git a/exporter/awskinesisexporter/internal/compress/package_test.go b/exporter/awskinesisexporter/internal/compress/package_test.go
new file mode 100644
index 000000000000..0f565f12cfbf
--- /dev/null
+++ b/exporter/awskinesisexporter/internal/compress/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package compress
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/awskinesisexporter/internal/key/package_test.go b/exporter/awskinesisexporter/internal/key/package_test.go
new file mode 100644
index 000000000000..9b314959f169
--- /dev/null
+++ b/exporter/awskinesisexporter/internal/key/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package key
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/awskinesisexporter/internal/metadata/generated_status.go b/exporter/awskinesisexporter/internal/metadata/generated_status.go
index 3f8213f8f2cf..72c8f97afd97 100644
--- a/exporter/awskinesisexporter/internal/metadata/generated_status.go
+++ b/exporter/awskinesisexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("awskinesis")
)
const (
- Type = "awskinesis"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/awskinesis")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/awskinesis")
+}
diff --git a/exporter/awskinesisexporter/internal/producer/package_test.go b/exporter/awskinesisexporter/internal/producer/package_test.go
new file mode 100644
index 000000000000..be7a4a5eaf8a
--- /dev/null
+++ b/exporter/awskinesisexporter/internal/producer/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package producer
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/awskinesisexporter/metadata.yaml b/exporter/awskinesisexporter/metadata.yaml
index c35b07494fc0..2efe3f753cf1 100644
--- a/exporter/awskinesisexporter/metadata.yaml
+++ b/exporter/awskinesisexporter/metadata.yaml
@@ -1,9 +1,15 @@
type: awskinesis
+scope_name: otelcol/awskinesis
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
active: [Aneurysm9, MovieStoreGuy]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
+
diff --git a/exporter/awskinesisexporter/package_test.go b/exporter/awskinesisexporter/package_test.go
new file mode 100644
index 000000000000..fb24f8d2fb50
--- /dev/null
+++ b/exporter/awskinesisexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package awskinesisexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/awss3exporter/README.md b/exporter/awss3exporter/README.md
index 1fad6621f116..ba2f1b8cbf92 100644
--- a/exporter/awss3exporter/README.md
+++ b/exporter/awss3exporter/README.md
@@ -4,14 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [alpha]: traces, metrics, logs |
-| Distributions | [contrib], [observiq], [sumo] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fawss3%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fawss3) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fawss3%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fawss3) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atoulme](https://www.github.com/atoulme), [@pdelewski](https://www.github.com/pdelewski) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
## Schema supported
@@ -19,26 +17,44 @@ This exporter targets to support proto/json format.
## Exporter Configuration
-The following exporter configuration parameters are supported.
-
-| Name | Description | Default |
-|:---------------|:-----------------------------------------------------------------------------------------------------|-------------|
-| `region` | AWS region. | "us-east-1" |
-| `s3_bucket` | S3 bucket | |
-| `s3_prefix` | prefix for the S3 key (root directory inside bucket). | |
-| `s3_partition` | time granularity of S3 key: hour or minute | "minute" |
-| `role_arn` | the Role ARN to be assumed | |
-| `file_prefix` | file prefix defined by user | |
-| `marshaler` | marshaler used to produce output data | `otlp_json` |
-| `endpoint` | overrides the endpoint used by the exporter instead of constructing it from `region` and `s3_bucket` | |
+The following exporter configuration parameters are supported.
+
+| Name | Description | Default |
+|:----------------------|:-------------------------------------------------------------------------------------------------------------------------------------------|-------------|
+| `region` | AWS region. | "us-east-1" |
+| `s3_bucket` | S3 bucket | |
+| `s3_prefix` | prefix for the S3 key (root directory inside bucket). | |
+| `s3_partition` | time granularity of S3 key: hour or minute | "minute" |
+| `role_arn` | the Role ARN to be assumed | |
+| `file_prefix` | file prefix defined by user | |
+| `marshaler` | marshaler used to produce output data | `otlp_json` |
+| `encoding` | Encoding extension to use to marshal data. Overrides the `marshaler` configuration option if set. | |
+| `encoding_file_extension` | file format extension suffix when using the `encoding` configuration option. May be left empty for no suffix to be appended. | |
+| `endpoint` | overrides the endpoint used by the exporter instead of constructing it from `region` and `s3_bucket` | |
+| `s3_force_path_style` | [set this to `true` to force the request to use path-style addressing](http://docs.aws.amazon.com/AmazonS3/latest/dev/VirtualHosting.html) | false |
+| `disable_ssl` | set this to `true` to disable SSL when sending requests | false |
+| `compression` | should the file be compressed | none |
### Marshaler
Marshaler determines the format of data sent to AWS S3. Currently, the following marshalers are implemented:
- `otlp_json` (default): the [OpenTelemetry Protocol format](https://github.com/open-telemetry/opentelemetry-proto), represented as json.
+- `otlp_proto`: the [OpenTelemetry Protocol format](https://github.com/open-telemetry/opentelemetry-proto), represented as Protocol Buffers. A single protobuf message is written into each object.
- `sumo_ic`: the [Sumo Logic Installed Collector Archive format](https://help.sumologic.com/docs/manage/data-archiving/archive/).
**This format is supported only for logs.**
+- `body`: export the log body as string.
+ **This format is supported only for logs.**
+
+### Encoding
+
+Encoding overrides marshaler if present and sets to use an encoding extension defined in the collector configuration.
+
+See https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/extension/encoding.
+
+### Compression
+- `none` (default): No compression will be applied
+- `gzip`: Files will be compressed with gzip. **This does not support `sumo_ic`marshaler.**
# Example Configuration
@@ -67,3 +83,13 @@ This exporter follows default credential resolution for the
Follow the [guidelines](https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/configuring-sdk.html) for the
credential configuration.
+
+### OpenTelemetry Collector Helm Chart for Kubernetes
+For example, when using OpenTelemetry Collector Helm Chart you could use `extraEnvs` in the values.yaml.
+```yaml
+extraEnvs:
+- name: AWS_ACCESS_KEY_ID
+ value: "< YOUR AWS ACCESS KEY >"
+- name: AWS_SECRET_ACCESS_KEY
+ value: "< YOUR AWS SECRET ACCESS KEY >"
+```
diff --git a/exporter/awss3exporter/body_marshaler.go b/exporter/awss3exporter/body_marshaler.go
new file mode 100644
index 000000000000..b526c3ea4e6e
--- /dev/null
+++ b/exporter/awss3exporter/body_marshaler.go
@@ -0,0 +1,52 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package awss3exporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter"
+
+import (
+ "bytes"
+ "fmt"
+
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+type bodyMarshaler struct{}
+
+func (*bodyMarshaler) format() string {
+ return "txt"
+}
+
+func newbodyMarshaler() bodyMarshaler {
+ return bodyMarshaler{}
+}
+
+func (bodyMarshaler) MarshalLogs(ld plog.Logs) ([]byte, error) {
+ buf := bytes.Buffer{}
+ rls := ld.ResourceLogs()
+ for i := 0; i < rls.Len(); i++ {
+ rl := rls.At(i)
+
+ ills := rl.ScopeLogs()
+ for j := 0; j < ills.Len(); j++ {
+ ils := ills.At(j)
+ logs := ils.LogRecords()
+ for k := 0; k < logs.Len(); k++ {
+ lr := logs.At(k)
+ body := lr.Body()
+ buf.WriteString(body.AsString())
+ buf.WriteString("\n")
+ }
+ }
+ }
+ return buf.Bytes(), nil
+}
+
+func (s bodyMarshaler) MarshalTraces(_ ptrace.Traces) ([]byte, error) {
+ return nil, fmt.Errorf("traces can't be marshaled into %s format", s.format())
+}
+
+func (s bodyMarshaler) MarshalMetrics(_ pmetric.Metrics) ([]byte, error) {
+ return nil, fmt.Errorf("metrics can't be marshaled into %s format", s.format())
+}
diff --git a/exporter/awss3exporter/body_marshaler_test.go b/exporter/awss3exporter/body_marshaler_test.go
new file mode 100644
index 000000000000..0363e20722a2
--- /dev/null
+++ b/exporter/awss3exporter/body_marshaler_test.go
@@ -0,0 +1,81 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package awss3exporter
+
+import (
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+)
+
+func TestBodyMarshalerWithBooleanType(t *testing.T) {
+ logs := plog.NewLogs()
+ rls := logs.ResourceLogs().AppendEmpty()
+ sl := rls.ScopeLogs().AppendEmpty()
+
+ const recordNum = 0
+ ts := pcommon.Timestamp(int64(recordNum) * time.Millisecond.Nanoseconds())
+ logRecord := sl.LogRecords().AppendEmpty()
+ logRecord.SetTimestamp(ts)
+
+ // Boolean
+ logRecord.Body().SetBool(true)
+
+ marshaler := &bodyMarshaler{}
+ require.NotNil(t, marshaler)
+ body, err := marshaler.MarshalLogs(logs)
+ assert.NoError(t, err)
+ assert.Equal(t, body, []byte("true\n"))
+}
+
+func TestBodyMarshalerWithNumberType(t *testing.T) {
+ logs := plog.NewLogs()
+ rls := logs.ResourceLogs().AppendEmpty()
+ sl := rls.ScopeLogs().AppendEmpty()
+
+ const recordNum = 0
+ ts := pcommon.Timestamp(int64(recordNum) * time.Millisecond.Nanoseconds())
+ logRecord := sl.LogRecords().AppendEmpty()
+ logRecord.SetTimestamp(ts)
+
+ // Number
+ logRecord.Body().SetDouble(0.05)
+
+ marshaler := &bodyMarshaler{}
+ require.NotNil(t, marshaler)
+ body, err := marshaler.MarshalLogs(logs)
+ assert.NoError(t, err)
+ assert.Equal(t, body, []byte("0.05\n"))
+}
+
+func TestBodyMarshalerWithMapType(t *testing.T) {
+ logs := plog.NewLogs()
+ rls := logs.ResourceLogs().AppendEmpty()
+ sl := rls.ScopeLogs().AppendEmpty()
+
+ const recordNum = 0
+ ts := pcommon.Timestamp(int64(recordNum) * time.Millisecond.Nanoseconds())
+ logRecord := sl.LogRecords().AppendEmpty()
+ logRecord.SetTimestamp(ts)
+
+ // Map
+ m := logRecord.Body().SetEmptyMap()
+ m.PutStr("foo", "foo")
+ m.PutStr("bar", "bar")
+ m.PutBool("foobar", false)
+ m.PutDouble("foobardouble", 0.006)
+ m.PutInt("foobarint", 1)
+
+ var expect = `{"bar":"bar","foo":"foo","foobar":false,"foobardouble":0.006,"foobarint":1}`
+
+ marshaler := &bodyMarshaler{}
+ require.NotNil(t, marshaler)
+ body, err := marshaler.MarshalLogs(logs)
+ assert.NoError(t, err)
+ assert.Equal(t, body, []byte(expect+"\n"))
+}
diff --git a/exporter/awss3exporter/config.go b/exporter/awss3exporter/config.go
index d63631a98e7e..276d73f357b1 100644
--- a/exporter/awss3exporter/config.go
+++ b/exporter/awss3exporter/config.go
@@ -6,26 +6,33 @@ package awss3exporter // import "github.com/open-telemetry/opentelemetry-collect
import (
"errors"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configcompression"
"go.uber.org/multierr"
)
// S3UploaderConfig contains aws s3 uploader related config to controls things
// like bucket, prefix, batching, connections, retries, etc.
type S3UploaderConfig struct {
- Region string `mapstructure:"region"`
- S3Bucket string `mapstructure:"s3_bucket"`
- S3Prefix string `mapstructure:"s3_prefix"`
- S3Partition string `mapstructure:"s3_partition"`
- FilePrefix string `mapstructure:"file_prefix"`
- Endpoint string `mapstructure:"endpoint"`
- RoleArn string `mapstructure:"role_arn"`
+ Region string `mapstructure:"region"`
+ S3Bucket string `mapstructure:"s3_bucket"`
+ S3Prefix string `mapstructure:"s3_prefix"`
+ S3Partition string `mapstructure:"s3_partition"`
+ FilePrefix string `mapstructure:"file_prefix"`
+ Endpoint string `mapstructure:"endpoint"`
+ RoleArn string `mapstructure:"role_arn"`
+ S3ForcePathStyle bool `mapstructure:"s3_force_path_style"`
+ DisableSSL bool `mapstructure:"disable_ssl"`
+ Compression configcompression.Type `mapstructure:"compression"`
}
type MarshalerType string
const (
- OtlpJSON MarshalerType = "otlp_json"
- SumoIC MarshalerType = "sumo_ic"
+ OtlpProtobuf MarshalerType = "otlp_proto"
+ OtlpJSON MarshalerType = "otlp_json"
+ SumoIC MarshalerType = "sumo_ic"
+ Body MarshalerType = "body"
)
// Config contains the main configuration options for the s3 exporter
@@ -33,7 +40,9 @@ type Config struct {
S3Uploader S3UploaderConfig `mapstructure:"s3uploader"`
MarshalerName MarshalerType `mapstructure:"marshaler"`
- FileFormat string `mapstructure:"file_format"`
+ // Encoding to apply. If present, overrides the marshaler configuration option.
+ Encoding *component.ID `mapstructure:"encoding"`
+ EncodingFileExtension string `mapstructure:"encoding_file_extension"`
}
func (c *Config) Validate() error {
@@ -44,5 +53,15 @@ func (c *Config) Validate() error {
if c.S3Uploader.S3Bucket == "" {
errs = multierr.Append(errs, errors.New("bucket is required"))
}
+ compression := c.S3Uploader.Compression
+ if compression.IsCompressed() {
+ if compression != configcompression.TypeGzip {
+ errs = multierr.Append(errs, errors.New("unknown compression type"))
+ }
+
+ if c.MarshalerName == SumoIC {
+ errs = multierr.Append(errs, errors.New("marshaler does not support compression"))
+ }
+ }
return errs
}
diff --git a/exporter/awss3exporter/config_test.go b/exporter/awss3exporter/config_test.go
index b4d9013ab0e0..8638aa27076b 100644
--- a/exporter/awss3exporter/config_test.go
+++ b/exporter/awss3exporter/config_test.go
@@ -13,6 +13,8 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/otelcol/otelcoltest"
"go.uber.org/multierr"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter/internal/metadata"
)
func TestLoadConfig(t *testing.T) {
@@ -20,15 +22,18 @@ func TestLoadConfig(t *testing.T) {
assert.NoError(t, err)
factory := NewFactory()
- factories.Exporters["awss3"] = factory
+ factories.Exporters[metadata.Type] = factory
cfg, err := otelcoltest.LoadConfigAndValidate(filepath.Join("testdata", "default.yaml"), factories)
require.NoError(t, err)
require.NotNil(t, cfg)
- e := cfg.Exporters[component.NewID("awss3")].(*Config)
+ e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
+ encoding := component.MustNewIDWithName("foo", "bar")
assert.Equal(t, e,
&Config{
+ Encoding: &encoding,
+ EncodingFileExtension: "baz",
S3Uploader: S3UploaderConfig{
Region: "us-east-1",
S3Bucket: "foo",
@@ -41,7 +46,7 @@ func TestLoadConfig(t *testing.T) {
func TestConfig(t *testing.T) {
factories, err := otelcoltest.NopFactories()
- assert.Nil(t, err)
+ assert.NoError(t, err)
factory := NewFactory()
factories.Exporters[factory.Type()] = factory
@@ -51,7 +56,7 @@ func TestConfig(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, cfg)
- e := cfg.Exporters[component.NewID("awss3")].(*Config)
+ e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
assert.Equal(t, e,
&Config{
@@ -67,6 +72,36 @@ func TestConfig(t *testing.T) {
)
}
+func TestConfigForS3CompatibleSystems(t *testing.T) {
+ factories, err := otelcoltest.NopFactories()
+ assert.NoError(t, err)
+
+ factory := NewFactory()
+ factories.Exporters[factory.Type()] = factory
+ cfg, err := otelcoltest.LoadConfigAndValidate(
+ filepath.Join("testdata", "config-s3-compatible-systems.yaml"), factories)
+
+ require.NoError(t, err)
+ require.NotNil(t, cfg)
+
+ e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
+
+ assert.Equal(t, e,
+ &Config{
+ S3Uploader: S3UploaderConfig{
+ Region: "us-east-1",
+ S3Bucket: "foo",
+ S3Prefix: "bar",
+ S3Partition: "minute",
+ Endpoint: "alternative-s3-system.example.com",
+ S3ForcePathStyle: true,
+ DisableSSL: true,
+ },
+ MarshalerName: "otlp_json",
+ },
+ )
+}
+
func TestConfig_Validate(t *testing.T) {
tests := []struct {
name string
@@ -127,7 +162,7 @@ func TestConfig_Validate(t *testing.T) {
func TestMarshallerName(t *testing.T) {
factories, err := otelcoltest.NopFactories()
- assert.Nil(t, err)
+ assert.NoError(t, err)
factory := NewFactory()
factories.Exporters[factory.Type()] = factory
@@ -137,7 +172,7 @@ func TestMarshallerName(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, cfg)
- e := cfg.Exporters[component.NewID("awss3")].(*Config)
+ e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
assert.Equal(t, e,
&Config{
@@ -149,4 +184,60 @@ func TestMarshallerName(t *testing.T) {
MarshalerName: "sumo_ic",
},
)
+
+ e = cfg.Exporters[component.MustNewIDWithName("awss3", "proto")].(*Config)
+
+ assert.Equal(t, e,
+ &Config{
+ S3Uploader: S3UploaderConfig{
+ Region: "us-east-1",
+ S3Bucket: "bar",
+ S3Partition: "minute",
+ },
+ MarshalerName: "otlp_proto",
+ },
+ )
+
+}
+
+func TestCompressionName(t *testing.T) {
+ factories, err := otelcoltest.NopFactories()
+ assert.NoError(t, err)
+
+ factory := NewFactory()
+ factories.Exporters[factory.Type()] = factory
+ cfg, err := otelcoltest.LoadConfigAndValidate(
+ filepath.Join("testdata", "compression.yaml"), factories)
+
+ require.NoError(t, err)
+ require.NotNil(t, cfg)
+
+ e := cfg.Exporters[component.MustNewID("awss3")].(*Config)
+
+ assert.Equal(t, e,
+ &Config{
+ S3Uploader: S3UploaderConfig{
+ Region: "us-east-1",
+ S3Bucket: "foo",
+ S3Partition: "minute",
+ Compression: "gzip",
+ },
+ MarshalerName: "otlp_json",
+ },
+ )
+
+ e = cfg.Exporters[component.MustNewIDWithName("awss3", "proto")].(*Config)
+
+ assert.Equal(t, e,
+ &Config{
+ S3Uploader: S3UploaderConfig{
+ Region: "us-east-1",
+ S3Bucket: "bar",
+ S3Partition: "minute",
+ Compression: "none",
+ },
+ MarshalerName: "otlp_proto",
+ },
+ )
+
}
diff --git a/exporter/awss3exporter/exporter.go b/exporter/awss3exporter/exporter.go
index 6f86d185e19a..f4524ee40be0 100644
--- a/exporter/awss3exporter/exporter.go
+++ b/exporter/awss3exporter/exporter.go
@@ -5,8 +5,9 @@ package awss3exporter // import "github.com/open-telemetry/opentelemetry-collect
import (
"context"
- "errors"
+ "fmt"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/plog"
@@ -23,26 +24,32 @@ type s3Exporter struct {
}
func newS3Exporter(config *Config,
- params exporter.CreateSettings) (*s3Exporter, error) {
-
- if config == nil {
- return nil, errors.New("s3 exporter config is nil")
- }
-
- logger := params.Logger
-
- m, err := newMarshaler(config.MarshalerName, logger)
- if err != nil {
- return nil, errors.New("unknown marshaler")
- }
+ params exporter.CreateSettings) *s3Exporter {
s3Exporter := &s3Exporter{
config: config,
dataWriter: &s3Writer{},
- logger: logger,
- marshaler: m,
+ logger: params.Logger,
}
- return s3Exporter, nil
+ return s3Exporter
+}
+
+func (e *s3Exporter) start(_ context.Context, host component.Host) error {
+
+ var m marshaler
+ var err error
+ if e.config.Encoding != nil {
+ if m, err = newMarshalerFromEncoding(e.config.Encoding, e.config.EncodingFileExtension, host, e.logger); err != nil {
+ return err
+ }
+ } else {
+ if m, err = newMarshaler(e.config.MarshalerName, e.logger); err != nil {
+ return fmt.Errorf("unknown marshaler %q", e.config.MarshalerName)
+ }
+ }
+
+ e.marshaler = m
+ return nil
}
func (e *s3Exporter) Capabilities() consumer.Capabilities {
diff --git a/exporter/awss3exporter/factory.go b/exporter/awss3exporter/factory.go
index 61c64807f483..12c1ead83d1a 100644
--- a/exporter/awss3exporter/factory.go
+++ b/exporter/awss3exporter/factory.go
@@ -39,24 +39,19 @@ func createLogsExporter(ctx context.Context,
params exporter.CreateSettings,
config component.Config) (exporter.Logs, error) {
- s3Exporter, err := newS3Exporter(config.(*Config), params)
- if err != nil {
- return nil, err
- }
+ s3Exporter := newS3Exporter(config.(*Config), params)
return exporterhelper.NewLogsExporter(ctx, params,
config,
- s3Exporter.ConsumeLogs)
+ s3Exporter.ConsumeLogs,
+ exporterhelper.WithStart(s3Exporter.start))
}
func createMetricsExporter(ctx context.Context,
params exporter.CreateSettings,
config component.Config) (exporter.Metrics, error) {
- s3Exporter, err := newS3Exporter(config.(*Config), params)
- if err != nil {
- return nil, err
- }
+ s3Exporter := newS3Exporter(config.(*Config), params)
if config.(*Config).MarshalerName == SumoIC {
return nil, fmt.Errorf("metrics are not supported by sumo_ic output format")
@@ -64,17 +59,15 @@ func createMetricsExporter(ctx context.Context,
return exporterhelper.NewMetricsExporter(ctx, params,
config,
- s3Exporter.ConsumeMetrics)
+ s3Exporter.ConsumeMetrics,
+ exporterhelper.WithStart(s3Exporter.start))
}
func createTracesExporter(ctx context.Context,
params exporter.CreateSettings,
config component.Config) (exporter.Traces, error) {
- s3Exporter, err := newS3Exporter(config.(*Config), params)
- if err != nil {
- return nil, err
- }
+ s3Exporter := newS3Exporter(config.(*Config), params)
if config.(*Config).MarshalerName == SumoIC {
return nil, fmt.Errorf("traces are not supported by sumo_ic output format")
@@ -83,5 +76,6 @@ func createTracesExporter(ctx context.Context,
return exporterhelper.NewTracesExporter(ctx,
params,
config,
- s3Exporter.ConsumeTraces)
+ s3Exporter.ConsumeTraces,
+ exporterhelper.WithStart(s3Exporter.start))
}
diff --git a/exporter/awss3exporter/generated_component_test.go b/exporter/awss3exporter/generated_component_test.go
new file mode 100644
index 000000000000..cd70588d72a3
--- /dev/null
+++ b/exporter/awss3exporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package awss3exporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/awss3exporter/go.mod b/exporter/awss3exporter/go.mod
index cdb5570d406b..41515195e9b4 100644
--- a/exporter/awss3exporter/go.mod
+++ b/exporter/awss3exporter/go.mod
@@ -1,99 +1,103 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awss3exporter
-go 1.20
+go 1.21
require (
- github.com/aws/aws-sdk-go v1.47.10
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/otelcol v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ github.com/aws/aws-sdk-go v1.51.17
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configcompression v1.5.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
)
require (
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/go-kit/log v0.2.1 // indirect
- github.com/go-logfmt/logfmt v0.5.1 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/uuid v1.4.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/confmap v0.89.0 // indirect
- go.opentelemetry.io/collector/connector v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/processor v0.89.0 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/propagators/b3 v1.20.0 // indirect
- go.opentelemetry.io/otel v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/connector v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0 // indirect
+ go.opentelemetry.io/collector/processor v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
+ golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/awss3exporter/go.sum b/exporter/awss3exporter/go.sum
index 08d347656b19..a96d18cafbea 100644
--- a/exporter/awss3exporter/go.sum
+++ b/exporter/awss3exporter/go.sum
@@ -1,62 +1,14 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
-cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
-cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
-cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
-cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
-cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
-cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
-cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
-cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
-cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
-cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
-cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
-cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
-cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
-github.com/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/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/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
@@ -67,583 +19,296 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs=
github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU=
github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU=
-github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g=
-github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-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/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
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.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/confignet v0.89.0 h1:Ekh+XhXelnnJ9as8IWhdUOfjnDPhz12XMJQ8sWNAbGw=
-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/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/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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-go.opentelemetry.io/collector/extension/zpagesextension v0.89.0 h1:opvHcGANx+dS4HJwGTPtRMd6dZdOmmGn6c3PfW/bihQ=
-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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.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/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.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=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
-google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
-google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
-google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -652,38 +317,17 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
-rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
diff --git a/exporter/awss3exporter/internal/metadata/generated_status.go b/exporter/awss3exporter/internal/metadata/generated_status.go
index 37542f92cd7e..d8c6a2dacd2c 100644
--- a/exporter/awss3exporter/internal/metadata/generated_status.go
+++ b/exporter/awss3exporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("awss3")
)
const (
- Type = "awss3"
TracesStability = component.StabilityLevelAlpha
MetricsStability = component.StabilityLevelAlpha
LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/awss3")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/awss3")
+}
diff --git a/exporter/awss3exporter/marshaler.go b/exporter/awss3exporter/marshaler.go
index 30d18bfd3b86..57ac6455d823 100644
--- a/exporter/awss3exporter/marshaler.go
+++ b/exporter/awss3exporter/marshaler.go
@@ -5,7 +5,9 @@ package awss3exporter // import "github.com/open-telemetry/opentelemetry-collect
import (
"errors"
+ "fmt"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
@@ -23,9 +25,28 @@ var (
ErrUnknownMarshaler = errors.New("unknown marshaler")
)
+func newMarshalerFromEncoding(encoding *component.ID, fileFormat string, host component.Host, logger *zap.Logger) (marshaler, error) {
+ marshaler := &s3Marshaler{logger: logger}
+ e, ok := host.GetExtensions()[*encoding]
+ if !ok {
+ return nil, fmt.Errorf("unknown encoding %q", encoding)
+ }
+ // cast with ok to avoid panics.
+ marshaler.logsMarshaler, _ = e.(plog.Marshaler)
+ marshaler.metricsMarshaler, _ = e.(pmetric.Marshaler)
+ marshaler.tracesMarshaler, _ = e.(ptrace.Marshaler)
+ marshaler.fileFormat = fileFormat
+ return marshaler, nil
+}
+
func newMarshaler(mType MarshalerType, logger *zap.Logger) (marshaler, error) {
marshaler := &s3Marshaler{logger: logger}
switch mType {
+ case OtlpProtobuf:
+ marshaler.logsMarshaler = &plog.ProtoMarshaler{}
+ marshaler.tracesMarshaler = &ptrace.ProtoMarshaler{}
+ marshaler.metricsMarshaler = &pmetric.ProtoMarshaler{}
+ marshaler.fileFormat = "binpb"
case OtlpJSON:
marshaler.logsMarshaler = &plog.JSONMarshaler{}
marshaler.tracesMarshaler = &ptrace.JSONMarshaler{}
@@ -35,6 +56,10 @@ func newMarshaler(mType MarshalerType, logger *zap.Logger) (marshaler, error) {
sumomarshaler := newSumoICMarshaler()
marshaler.logsMarshaler = &sumomarshaler
marshaler.fileFormat = "json.gz"
+ case Body:
+ exportbodyMarshaler := newbodyMarshaler()
+ marshaler.logsMarshaler = &exportbodyMarshaler
+ marshaler.fileFormat = exportbodyMarshaler.format()
default:
return nil, ErrUnknownMarshaler
}
diff --git a/exporter/awss3exporter/marshaler_test.go b/exporter/awss3exporter/marshaler_test.go
index d0ede1990099..9a56d83d1f6f 100644
--- a/exporter/awss3exporter/marshaler_test.go
+++ b/exporter/awss3exporter/marshaler_test.go
@@ -4,10 +4,13 @@
package awss3exporter
import (
+ "context"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
"go.uber.org/zap"
)
@@ -18,6 +21,12 @@ func TestMarshaler(t *testing.T) {
require.NotNil(t, m)
assert.Equal(t, m.format(), "json")
}
+ {
+ m, err := newMarshaler("otlp_proto", zap.NewNop())
+ assert.NoError(t, err)
+ require.NotNil(t, m)
+ assert.Equal(t, m.format(), "binpb")
+ }
{
m, err := newMarshaler("sumo_ic", zap.NewNop())
assert.NoError(t, err)
@@ -29,4 +38,66 @@ func TestMarshaler(t *testing.T) {
assert.Error(t, err)
require.Nil(t, m)
}
+ {
+ m, err := newMarshaler("body", zap.NewNop())
+ assert.NoError(t, err)
+ require.NotNil(t, m)
+ assert.Equal(t, m.format(), "txt")
+ }
+}
+
+type hostWithExtensions struct {
+ encoding encodingExtension
+}
+
+func (h hostWithExtensions) Start(context.Context, component.Host) error {
+ panic("unsupported")
+}
+
+func (h hostWithExtensions) Shutdown(context.Context) error {
+ panic("unsupported")
+}
+
+func (h hostWithExtensions) GetFactory(component.Kind, component.Type) component.Factory {
+ panic("unsupported")
+}
+
+func (h hostWithExtensions) GetExtensions() map[component.ID]component.Component {
+ return map[component.ID]component.Component{
+ component.MustNewID("foo"): h.encoding,
+ }
+}
+
+func (h hostWithExtensions) GetExporters() map[component.DataType]map[component.ID]component.Component {
+ panic("unsupported")
+}
+
+type encodingExtension struct {
+}
+
+func (e encodingExtension) Start(_ context.Context, _ component.Host) error {
+ panic("unsupported")
+}
+
+func (e encodingExtension) Shutdown(_ context.Context) error {
+ panic("unsupported")
+}
+
+func TestMarshalerFromEncoding(t *testing.T) {
+ id := component.MustNewID("foo")
+
+ {
+ host := hostWithExtensions{
+ encoding: encodingExtension{},
+ }
+ m, err := newMarshalerFromEncoding(&id, "myext", host, zap.NewNop())
+ assert.NoError(t, err)
+ require.NotNil(t, m)
+ assert.Equal(t, "myext", m.format())
+ }
+ {
+ m, err := newMarshalerFromEncoding(&id, "", componenttest.NewNopHost(), zap.NewNop())
+ assert.EqualError(t, err, `unknown encoding "foo"`)
+ require.Nil(t, m)
+ }
}
diff --git a/exporter/awss3exporter/metadata.yaml b/exporter/awss3exporter/metadata.yaml
index 2c3f6559028b..9e41b330e1f7 100644
--- a/exporter/awss3exporter/metadata.yaml
+++ b/exporter/awss3exporter/metadata.yaml
@@ -1,9 +1,13 @@
type: awss3
+scope_name: otelcol/awss3
status:
class: exporter
stability:
alpha: [traces, metrics, logs]
- distributions: [contrib, observiq, sumo]
+ distributions: [contrib]
codeowners:
active: [atoulme, pdelewski]
+
+tests:
+ expect_consumer_error: true
diff --git a/exporter/awss3exporter/s3_writer.go b/exporter/awss3exporter/s3_writer.go
index 367e1dc8b4ed..38376c45605d 100644
--- a/exporter/awss3exporter/s3_writer.go
+++ b/exporter/awss3exporter/s3_writer.go
@@ -5,6 +5,7 @@ package awss3exporter // import "github.com/open-telemetry/opentelemetry-collect
import (
"bytes"
+ "compress/gzip"
"context"
"fmt"
"math/rand"
@@ -15,6 +16,7 @@ import (
"github.com/aws/aws-sdk-go/aws/credentials/stscreds"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3/s3manager"
+ "go.opentelemetry.io/collector/config/configcompression"
)
type s3Writer struct {
@@ -38,18 +40,29 @@ func randomInRange(low, hi int) int {
return low + rand.Intn(hi-low)
}
-func getS3Key(time time.Time, keyPrefix string, partition string, filePrefix string, metadata string, fileformat string) string {
+func getS3Key(time time.Time, keyPrefix string, partition string, filePrefix string, metadata string, fileFormat string, compression configcompression.Type) string {
timeKey := getTimeKey(time, partition)
randomID := randomInRange(100000000, 999999999)
+ suffix := ""
+ if fileFormat != "" {
+ suffix = "." + fileFormat
+ }
+
+ s3Key := keyPrefix + "/" + timeKey + "/" + filePrefix + metadata + "_" + strconv.Itoa(randomID) + suffix
- s3Key := keyPrefix + "/" + timeKey + "/" + filePrefix + metadata + "_" + strconv.Itoa(randomID) + "." + fileformat
+ // add ".gz" extension to files if compression is enabled
+ if compression == configcompression.TypeGzip {
+ s3Key += ".gz"
+ }
return s3Key
}
func getSessionConfig(config *Config) *aws.Config {
sessionConfig := &aws.Config{
- Region: aws.String(config.S3Uploader.Region),
+ Region: aws.String(config.S3Uploader.Region),
+ S3ForcePathStyle: &config.S3Uploader.S3ForcePathStyle,
+ DisableSSL: &config.S3Uploader.DisableSSL,
}
endpoint := config.S3Uploader.Endpoint
@@ -75,10 +88,28 @@ func (s3writer *s3Writer) writeBuffer(_ context.Context, buf []byte, config *Con
now := time.Now()
key := getS3Key(now,
config.S3Uploader.S3Prefix, config.S3Uploader.S3Partition,
- config.S3Uploader.FilePrefix, metadata, format)
-
- // create a reader from data data in memory
- reader := bytes.NewReader(buf)
+ config.S3Uploader.FilePrefix, metadata, format, config.S3Uploader.Compression)
+
+ encoding := ""
+ var reader *bytes.Reader
+ if config.S3Uploader.Compression == configcompression.TypeGzip {
+ // set s3 uploader content encoding to "gzip"
+ encoding = "gzip"
+ var gzipContents bytes.Buffer
+
+ // create a gzip from data
+ gzipWriter := gzip.NewWriter(&gzipContents)
+ _, err := gzipWriter.Write(buf)
+ if err != nil {
+ return err
+ }
+ gzipWriter.Close()
+
+ reader = bytes.NewReader(gzipContents.Bytes())
+ } else {
+ // create a reader from data in memory
+ reader = bytes.NewReader(buf)
+ }
sessionConfig := getSessionConfig(config)
sess, err := getSession(config, sessionConfig)
@@ -90,9 +121,10 @@ func (s3writer *s3Writer) writeBuffer(_ context.Context, buf []byte, config *Con
uploader := s3manager.NewUploader(sess)
_, err = uploader.Upload(&s3manager.UploadInput{
- Bucket: aws.String(config.S3Uploader.S3Bucket),
- Key: aws.String(key),
- Body: reader,
+ Bucket: aws.String(config.S3Uploader.S3Bucket),
+ Key: aws.String(key),
+ Body: reader,
+ ContentEncoding: &encoding,
})
if err != nil {
return err
diff --git a/exporter/awss3exporter/s3_writer_test.go b/exporter/awss3exporter/s3_writer_test.go
index 8b5e4eedcb5d..6df1998b07d5 100644
--- a/exporter/awss3exporter/s3_writer_test.go
+++ b/exporter/awss3exporter/s3_writer_test.go
@@ -36,7 +36,49 @@ func TestS3Key(t *testing.T) {
require.NotNil(t, tm)
re := regexp.MustCompile(`keyprefix/year=2022/month=06/day=05/hour=00/minute=00/fileprefixlogs_([0-9]+).json`)
- s3Key := getS3Key(tm, "keyprefix", "minute", "fileprefix", "logs", "json")
+ s3Key := getS3Key(tm, "keyprefix", "minute", "fileprefix", "logs", "json", "")
+ matched := re.MatchString(s3Key)
+ assert.Equal(t, true, matched)
+}
+
+func TestS3KeyEmptyFileFormat(t *testing.T) {
+ const layout = "2006-01-02"
+
+ tm, err := time.Parse(layout, "2022-06-05")
+
+ assert.NoError(t, err)
+ require.NotNil(t, tm)
+
+ re := regexp.MustCompile(`keyprefix/year=2022/month=06/day=05/hour=00/minute=00/fileprefixlogs_([0-9]+)`)
+ s3Key := getS3Key(tm, "keyprefix", "minute", "fileprefix", "logs", "", "")
+ matched := re.MatchString(s3Key)
+ assert.Equal(t, true, matched)
+}
+
+func TestS3KeyOfCompressedFile(t *testing.T) {
+ const layout = "2006-01-02"
+
+ tm, err := time.Parse(layout, "2022-06-05")
+
+ assert.NoError(t, err)
+ require.NotNil(t, tm)
+
+ re := regexp.MustCompile(`keyprefix/year=2022/month=06/day=05/hour=00/minute=00/fileprefixlogs_([0-9]+).json.gz`)
+ s3Key := getS3Key(tm, "keyprefix", "minute", "fileprefix", "logs", "json", "gzip")
+ matched := re.MatchString(s3Key)
+ assert.Equal(t, true, matched)
+}
+
+func TestS3KeyOfCompressedFileEmptyFileFormat(t *testing.T) {
+ const layout = "2006-01-02"
+
+ tm, err := time.Parse(layout, "2022-06-05")
+
+ assert.NoError(t, err)
+ require.NotNil(t, tm)
+
+ re := regexp.MustCompile(`keyprefix/year=2022/month=06/day=05/hour=00/minute=00/fileprefixlogs_([0-9]+).gz`)
+ s3Key := getS3Key(tm, "keyprefix", "minute", "fileprefix", "logs", "", "gzip")
matched := re.MatchString(s3Key)
assert.Equal(t, true, matched)
}
diff --git a/exporter/awss3exporter/testdata/compression.yaml b/exporter/awss3exporter/testdata/compression.yaml
new file mode 100644
index 000000000000..68966317b961
--- /dev/null
+++ b/exporter/awss3exporter/testdata/compression.yaml
@@ -0,0 +1,26 @@
+receivers:
+ nop:
+
+exporters:
+ awss3:
+ s3uploader:
+ s3_bucket: "foo"
+ compression: "gzip"
+ marshaler: otlp_json
+
+ awss3/proto:
+ s3uploader:
+ s3_bucket: "bar"
+ compression: "none"
+ marshaler: otlp_proto
+
+
+processors:
+ nop:
+
+service:
+ pipelines:
+ traces:
+ receivers: [nop]
+ processors: [nop]
+ exporters: [awss3, awss3/proto]
diff --git a/exporter/awss3exporter/testdata/config-s3-compatible-systems.yaml b/exporter/awss3exporter/testdata/config-s3-compatible-systems.yaml
new file mode 100644
index 000000000000..f6342e4b14c1
--- /dev/null
+++ b/exporter/awss3exporter/testdata/config-s3-compatible-systems.yaml
@@ -0,0 +1,22 @@
+receivers:
+ nop:
+
+exporters:
+ awss3:
+ s3uploader:
+ s3_bucket: 'foo'
+ s3_prefix: 'bar'
+ s3_partition: 'minute'
+ endpoint: "alternative-s3-system.example.com"
+ s3_force_path_style: true
+ disable_ssl: true
+
+processors:
+ nop:
+
+service:
+ pipelines:
+ traces:
+ receivers: [nop]
+ processors: [nop]
+ exporters: [awss3]
diff --git a/exporter/awss3exporter/testdata/default.yaml b/exporter/awss3exporter/testdata/default.yaml
index 09513cb0fae0..656db12122ea 100644
--- a/exporter/awss3exporter/testdata/default.yaml
+++ b/exporter/awss3exporter/testdata/default.yaml
@@ -3,6 +3,8 @@ receivers:
exporters:
awss3:
+ encoding: "foo/bar"
+ encoding_file_extension: "baz"
s3uploader:
s3_bucket: "foo"
region: 'us-east-1'
diff --git a/exporter/awss3exporter/testdata/marshaler.yaml b/exporter/awss3exporter/testdata/marshaler.yaml
index fcbcba6be079..8527410a0a12 100644
--- a/exporter/awss3exporter/testdata/marshaler.yaml
+++ b/exporter/awss3exporter/testdata/marshaler.yaml
@@ -7,6 +7,12 @@ exporters:
s3_bucket: "foo"
marshaler: sumo_ic
+ awss3/proto:
+ s3uploader:
+ s3_bucket: "bar"
+ marshaler: otlp_proto
+
+
processors:
nop:
@@ -15,4 +21,4 @@ service:
traces:
receivers: [nop]
processors: [nop]
- exporters: [awss3]
+ exporters: [awss3, awss3/proto]
diff --git a/exporter/awsxrayexporter/README.md b/exporter/awsxrayexporter/README.md
index e8898f731be6..22f57948317b 100644
--- a/exporter/awsxrayexporter/README.md
+++ b/exporter/awsxrayexporter/README.md
@@ -4,14 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces |
-| Distributions | [contrib], [aws], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fawsxray%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fawsxray) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fawsxray%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fawsxray) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@wangzlei](https://www.github.com/wangzlei), [@srprash](https://www.github.com/srprash) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter converts OpenTelemetry spans to
diff --git a/exporter/awsxrayexporter/awsxray.go b/exporter/awsxrayexporter/awsxray.go
index 3454b5e663a0..04a9e42b545f 100644
--- a/exporter/awsxrayexporter/awsxray.go
+++ b/exporter/awsxrayexporter/awsxray.go
@@ -35,7 +35,7 @@ func newTracesExporter(
cn awsutil.ConnAttr,
registry telemetry.Registry,
) (exporter.Traces, error) {
- typeLog := zap.String("type", string(set.ID.Type()))
+ typeLog := zap.String("type", set.ID.Type().String())
nameLog := zap.String("name", set.ID.String())
logger := set.Logger
awsConfig, session, err := awsutil.GetAWSConfigSession(logger, cn, &cfg.AWSSessionSettings)
@@ -53,7 +53,7 @@ func newTracesExporter(
context.TODO(),
set,
cfg,
- func(ctx context.Context, td ptrace.Traces) error {
+ func(_ context.Context, td ptrace.Traces) error {
var err error
logger.Debug("TracesExporter", typeLog, nameLog, zap.Int("#spans", td.SpanCount()))
diff --git a/exporter/awsxrayexporter/awsxray_test.go b/exporter/awsxrayexporter/awsxray_test.go
index 27802d97ebfc..da13617f5973 100644
--- a/exporter/awsxrayexporter/awsxray_test.go
+++ b/exporter/awsxrayexporter/awsxray_test.go
@@ -34,9 +34,9 @@ func TestTraceExport(t *testing.T) {
ctx := context.Background()
td := constructSpanData()
err := traceExporter.ConsumeTraces(ctx, td)
- assert.NotNil(t, err)
+ assert.Error(t, err)
err = traceExporter.Shutdown(ctx)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
func TestXraySpanTraceResourceExtraction(t *testing.T) {
@@ -50,9 +50,9 @@ func TestXrayAndW3CSpanTraceExport(t *testing.T) {
ctx := context.Background()
td := constructXrayAndW3CSpanData()
err := traceExporter.ConsumeTraces(ctx, td)
- assert.NotNil(t, err)
+ assert.Error(t, err)
err = traceExporter.Shutdown(ctx)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
func TestXrayAndW3CSpanTraceResourceExtraction(t *testing.T) {
@@ -72,20 +72,22 @@ func TestTelemetryEnabled(t *testing.T) {
registry := telemetry.NewRegistry()
sink := telemetrytest.NewSenderSink()
// preload the sender that the exporter will use
- sender, loaded := registry.LoadOrStore(component.NewID(""), sink)
+ set := exportertest.NewNopCreateSettings()
+ sender, loaded := registry.LoadOrStore(set.ID, sink)
require.False(t, loaded)
require.NotNil(t, sender)
require.Equal(t, sink, sender)
cfg := generateConfig(t)
cfg.TelemetryConfig.Enabled = true
- traceExporter := initializeTracesExporter(t, cfg, registry)
+ traceExporter, err := newTracesExporter(cfg, set, new(awsutil.Conn), registry)
+ assert.NoError(t, err)
ctx := context.Background()
assert.NoError(t, traceExporter.Start(ctx, componenttest.NewNopHost()))
td := constructSpanData()
- err := traceExporter.ConsumeTraces(ctx, td)
- assert.NotNil(t, err)
+ err = traceExporter.ConsumeTraces(ctx, td)
+ assert.Error(t, err)
err = traceExporter.Shutdown(ctx)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.EqualValues(t, 1, sink.StartCount.Load())
assert.EqualValues(t, 1, sink.StopCount.Load())
assert.True(t, sink.HasRecording())
@@ -94,7 +96,8 @@ func TestTelemetryEnabled(t *testing.T) {
}
func TestMiddleware(t *testing.T) {
- id := component.NewID("test")
+ testType, _ := component.NewType("test")
+ id := component.NewID(testType)
cfg := generateConfig(t)
cfg.MiddlewareID = &id
handler := new(awsmiddleware.MockHandler)
diff --git a/exporter/awsxrayexporter/factory_test.go b/exporter/awsxrayexporter/factory_test.go
index 321eb82a7601..35763d0afaef 100644
--- a/exporter/awsxrayexporter/factory_test.go
+++ b/exporter/awsxrayexporter/factory_test.go
@@ -81,7 +81,7 @@ func TestCreateTracesExporter(t *testing.T) {
ctx := context.Background()
exporter, err := factory.CreateTracesExporter(ctx, exportertest.NewNopCreateSettings(), cfg)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exporter)
}
@@ -97,6 +97,6 @@ func TestCreateMetricsExporter(t *testing.T) {
ctx := context.Background()
exporter, err := factory.CreateMetricsExporter(ctx, exportertest.NewNopCreateSettings(), cfg)
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.Nil(t, exporter)
}
diff --git a/exporter/awsxrayexporter/generated_component_test.go b/exporter/awsxrayexporter/generated_component_test.go
new file mode 100644
index 000000000000..de2a712670ad
--- /dev/null
+++ b/exporter/awsxrayexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package awsxrayexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/awsxrayexporter/go.mod b/exporter/awsxrayexporter/go.mod
index f62ce1411986..99670b6b79d3 100644
--- a/exporter/awsxrayexporter/go.mod
+++ b/exporter/awsxrayexporter/go.mod
@@ -1,61 +1,73 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/awsxrayexporter
-go 1.20
+go 1.21
require (
- github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-00010101000000-000000000000
- github.com/aws/aws-sdk-go v1.47.10
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/amazon-contributing/opentelemetry-collector-contrib/extension/awsmiddleware v0.0.0-20240419190856-2f880467f335
+ github.com/aws/aws-sdk-go v1.51.17
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/awsutil v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/xray v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/featuregate v1.5.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-00010101000000-000000000000 // indirect
github.com/aws/aws-sdk-go-v2 v1.22.2 // indirect
github.com/aws/smithy-go v1.16.0 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/awsxrayexporter/go.sum b/exporter/awsxrayexporter/go.sum
index 0e137ce8057b..f798a1e43afd 100644
--- a/exporter/awsxrayexporter/go.sum
+++ b/exporter/awsxrayexporter/go.sum
@@ -1,69 +1,54 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-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/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/aws/aws-sdk-go-v2 v1.22.2 h1:lV0U8fnhAnPz8YcdmZVV60+tr6CakHzqA6P8T46ExJI=
github.com/aws/aws-sdk-go-v2 v1.22.2/go.mod h1:Kd0OJtkW3Q0M0lUWGszapWjEvrXDzRW+D21JNsroB+c=
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13 h1:OPLEkmhXf6xFPiz0bLeDArZIDx1NNS4oJyG4nv3Gct0=
+github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.4.13/go.mod h1:gpAbvyDGQFozTEmlTFO8XcQKHzubdq0LzRyJpG6MiXM=
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41 h1:22dGT7PneFMx4+b3pz7lMTRyN8ZKH7M2cW4GP9yUS2g=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35 h1:SijA0mgjV8E+8G45ltVHs0fvKpTj8xmZJ3VwhGKtUSI=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4 h1:6lJvvkQ9HmbHZ4h/IEwclwv2mrTW8Uq1SOB/kXy0mfw=
+github.com/aws/aws-sdk-go-v2/internal/v4a v1.1.4/go.mod h1:1PrKYwxTM+zjpw9Y41KFtoJCQrJ34Z47Y4VgVbfndjo=
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14 h1:m0QTSI6pZYJTk5WSKx3fm5cNW/DCicVzULBgU/6IyD0=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.9.14/go.mod h1:dDilntgHy9WnHXsh7dDtUPgHKEfTJIBUTHM8OWm0f/0=
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36 h1:eev2yZX7esGRjqRbnVk1UxMLw4CyVZDpZXRCcy75oQk=
+github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.1.36/go.mod h1:lGnOkH9NJATw0XEPcAknFBj3zzNTEGRHtSw+CwC1YTg=
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35 h1:CdzPW9kKitgIiLV1+MHobfR5Xg25iYnyzWZhyQuSlDI=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.35/go.mod h1:QGF2Rs33W5MaN9gYdEQOBBFPLwTZkEhRwI33f7KIG0o=
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4 h1:v0jkRigbSD6uOdwcaUQmgEwG1BkPfAPDqaeNt/29ghg=
+github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.15.4/go.mod h1:LhTyt8J04LL+9cIt7pYJ5lbS/U98ZmXovLOR/4LUsk8=
github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0 h1:wl5dxN1NONhTDQD9uaEvNsDRX29cBmGED/nl0jkWlt4=
+github.com/aws/aws-sdk-go-v2/service/s3 v1.40.0/go.mod h1:rDGMZA7f4pbmTtPOk5v5UM2lmX6UAbRnMDJeDvnH7AM=
github.com/aws/smithy-go v1.16.0 h1:gJZEH/Fqh+RsvlJ1Zt4tVAtV6bKkp3cC+R6FCZMNzik=
github.com/aws/smithy-go v1.16.0/go.mod h1:NukqUGpCZIILqqiV0NIjeFh24kd/FAa4beRb6nbIUPE=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
@@ -78,15 +63,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -96,104 +80,92 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -201,39 +173,19 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/awsxrayexporter/internal/metadata/generated_status.go b/exporter/awsxrayexporter/internal/metadata/generated_status.go
index 12af796c7f9f..63420257a6a6 100644
--- a/exporter/awsxrayexporter/internal/metadata/generated_status.go
+++ b/exporter/awsxrayexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("awsxray")
)
const (
- Type = "awsxray"
TracesStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/awsxray")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/awsxray")
+}
diff --git a/exporter/awsxrayexporter/internal/translator/package_test.go b/exporter/awsxrayexporter/internal/translator/package_test.go
new file mode 100644
index 000000000000..3b3d8ccb5c0f
--- /dev/null
+++ b/exporter/awsxrayexporter/internal/translator/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package translator
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/awsxrayexporter/internal/translator/segment.go b/exporter/awsxrayexporter/internal/translator/segment.go
index c8d78792fa11..ff8efb3090f5 100644
--- a/exporter/awsxrayexporter/internal/translator/segment.go
+++ b/exporter/awsxrayexporter/internal/translator/segment.go
@@ -15,6 +15,7 @@ import (
"time"
awsP "github.com/aws/aws-sdk-go/aws"
+ "go.opentelemetry.io/collector/featuregate"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
conventions "go.opentelemetry.io/collector/semconv/v1.8.0"
@@ -51,6 +52,15 @@ var (
reInvalidSpanCharacters = regexp.MustCompile(`[^ 0-9\p{L}N_.:/%=+,\-@]`)
)
+var (
+ remoteXrayExporterDotConverter = featuregate.GlobalRegistry().MustRegister(
+ "exporter.xray.allowDot",
+ featuregate.StageAlpha,
+ featuregate.WithRegisterDescription("X-Ray Exporter will no longer convert . to _ in annotation keys when this feature gate is enabled. "),
+ featuregate.WithRegisterFromVersion("v0.97.0"),
+ )
+)
+
const (
// defaultMetadataNamespace is used for non-namespaced non-indexed attributes.
defaultMetadataNamespace = "default"
@@ -746,7 +756,7 @@ func fixAnnotationKey(key string) string {
fallthrough
case 'a' <= r && r <= 'z':
fallthrough
- case r == '.':
+ case remoteXrayExporterDotConverter.IsEnabled() && r == '.':
return r
default:
return '_'
diff --git a/exporter/awsxrayexporter/internal/translator/segment_test.go b/exporter/awsxrayexporter/internal/translator/segment_test.go
index 27774221adad..f0082f891ccb 100644
--- a/exporter/awsxrayexporter/internal/translator/segment_test.go
+++ b/exporter/awsxrayexporter/internal/translator/segment_test.go
@@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/featuregate"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
conventions "go.opentelemetry.io/collector/semconv/v1.8.0"
@@ -59,7 +60,7 @@ func TestClientSpanWithRpcAwsSdkClientAttributes(t *testing.T) {
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
assert.NotNil(t, jsonStr)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, strings.Contains(jsonStr, "DynamoDB"))
assert.True(t, strings.Contains(jsonStr, "GetItem"))
assert.False(t, strings.Contains(jsonStr, user))
@@ -92,7 +93,7 @@ func TestClientSpanWithLegacyAwsSdkClientAttributes(t *testing.T) {
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
assert.NotNil(t, jsonStr)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, strings.Contains(jsonStr, "DynamoDB"))
assert.True(t, strings.Contains(jsonStr, "GetItem"))
assert.False(t, strings.Contains(jsonStr, user))
@@ -333,7 +334,7 @@ func TestSpanWithInvalidTraceId(t *testing.T) {
_, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
- assert.NotNil(t, err)
+ assert.Error(t, err)
}
func TestSpanWithExpiredTraceId(t *testing.T) {
@@ -345,7 +346,7 @@ func TestSpanWithExpiredTraceId(t *testing.T) {
binary.BigEndian.PutUint32(tempTraceID[0:4], uint32(ExpiredEpoch))
_, err := convertToAmazonTraceID(tempTraceID, false)
- assert.NotNil(t, err)
+ assert.Error(t, err)
}
func TestSpanWithInvalidTraceIdWithoutTimestampValidation(t *testing.T) {
@@ -367,13 +368,13 @@ func TestSpanWithInvalidTraceIdWithoutTimestampValidation(t *testing.T) {
span.SetTraceID(traceID)
segment, err := MakeSegment(span, resource, nil, false, nil, true)
- require.Nil(t, err)
+ require.NoError(t, err)
assert.Equal(t, "ProducerService", *segment.Name)
assert.Equal(t, "subsegment", *segment.Type)
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, true)
- require.Nil(t, err)
+ require.NoError(t, err)
assert.NotNil(t, jsonStr)
assert.True(t, strings.Contains(jsonStr, "ProducerService"))
assert.False(t, strings.Contains(jsonStr, user))
@@ -389,7 +390,7 @@ func TestSpanWithExpiredTraceIdWithoutTimestampValidation(t *testing.T) {
binary.BigEndian.PutUint32(tempTraceID[0:4], uint32(ExpiredEpoch))
amazonTraceID, err := convertToAmazonTraceID(tempTraceID, true)
- assert.Nil(t, err)
+ assert.NoError(t, err)
expectedTraceID := "1-" + fmt.Sprintf("%x", tempTraceID[0:4]) + "-" + fmt.Sprintf("%x", tempTraceID[4:16])
assert.Equal(t, expectedTraceID, amazonTraceID)
}
@@ -407,9 +408,30 @@ func TestFixSegmentName(t *testing.T) {
}
func TestFixAnnotationKey(t *testing.T) {
+ err := featuregate.GlobalRegistry().Set("exporter.xray.allowDot", false)
+ assert.Nil(t, err)
+
+ validKey := "Key_1"
+ fixedKey := fixAnnotationKey(validKey)
+ assert.Equal(t, validKey, fixedKey)
+ validDotKey := "Key.1"
+ fixedDotKey := fixAnnotationKey(validDotKey)
+ assert.Equal(t, "Key_1", fixedDotKey)
+ invalidKey := "Key@1"
+ fixedKey = fixAnnotationKey(invalidKey)
+ assert.Equal(t, "Key_1", fixedKey)
+}
+
+func TestFixAnnotationKeyWithAllowDot(t *testing.T) {
+ err := featuregate.GlobalRegistry().Set("exporter.xray.allowDot", true)
+ assert.Nil(t, err)
+
validKey := "Key_1"
fixedKey := fixAnnotationKey(validKey)
assert.Equal(t, validKey, fixedKey)
+ validDotKey := "Key.1"
+ fixedDotKey := fixAnnotationKey(validDotKey)
+ assert.Equal(t, validDotKey, fixedDotKey)
invalidKey := "Key@1"
fixedKey = fixAnnotationKey(invalidKey)
assert.Equal(t, "Key_1", fixedKey)
@@ -562,12 +584,14 @@ func TestSpanWithAttributesSegmentMetadata(t *testing.T) {
}
func TestResourceAttributesCanBeIndexed(t *testing.T) {
+ err := featuregate.GlobalRegistry().Set("exporter.xray.allowDot", true)
+ assert.Nil(t, err)
+
spanName := "/api/locations"
parentSpanID := newSegmentID()
attributes := make(map[string]any)
resource := constructDefaultResource()
span := constructServerSpan(parentSpanID, spanName, ptrace.StatusCodeError, "OK", attributes)
-
segment, _ := MakeSegment(span, resource, []string{
"otel.resource.string.key",
"otel.resource.int.key",
@@ -615,6 +639,9 @@ func TestResourceAttributesNotIndexedIfSubsegment(t *testing.T) {
}
func TestSpanWithSpecialAttributesAsListed(t *testing.T) {
+ err := featuregate.GlobalRegistry().Set("exporter.xray.allowDot", true)
+ assert.Nil(t, err)
+
spanName := "/api/locations"
parentSpanID := newSegmentID()
attributes := make(map[string]any)
@@ -631,7 +658,30 @@ func TestSpanWithSpecialAttributesAsListed(t *testing.T) {
assert.Equal(t, "rpc_method_val", segment.Annotations["rpc.method"])
}
+func TestSpanWithSpecialAttributesAsListedWithAllowDot(t *testing.T) {
+ err := featuregate.GlobalRegistry().Set("exporter.xray.allowDot", true)
+ assert.Nil(t, err)
+
+ spanName := "/api/locations"
+ parentSpanID := newSegmentID()
+ attributes := make(map[string]any)
+ attributes[awsxray.AWSOperationAttribute] = "aws_operation_val"
+ attributes[conventions.AttributeRPCMethod] = "rpc_method_val"
+ resource := constructDefaultResource()
+ span := constructServerSpan(parentSpanID, spanName, ptrace.StatusCodeError, "OK", attributes)
+
+ segment, _ := MakeSegment(span, resource, []string{awsxray.AWSOperationAttribute, conventions.AttributeRPCMethod}, false, nil, false)
+
+ assert.NotNil(t, segment)
+ assert.Equal(t, 2, len(segment.Annotations))
+ assert.Equal(t, "aws_operation_val", segment.Annotations[awsxray.AWSOperationAttribute])
+ assert.Equal(t, "rpc_method_val", segment.Annotations[conventions.AttributeRPCMethod])
+}
+
func TestSpanWithSpecialAttributesAsListedAndIndexAll(t *testing.T) {
+ err := featuregate.GlobalRegistry().Set("exporter.xray.allowDot", true)
+ assert.Nil(t, err)
+
spanName := "/api/locations"
parentSpanID := newSegmentID()
attributes := make(map[string]any)
@@ -647,6 +697,25 @@ func TestSpanWithSpecialAttributesAsListedAndIndexAll(t *testing.T) {
assert.Equal(t, "rpc_method_val", segment.Annotations["rpc.method"])
}
+func TestSpanWithSpecialAttributesAsListedAndIndexAllWithAllowDot(t *testing.T) {
+ err := featuregate.GlobalRegistry().Set("exporter.xray.allowDot", true)
+ assert.Nil(t, err)
+
+ spanName := "/api/locations"
+ parentSpanID := newSegmentID()
+ attributes := make(map[string]any)
+ attributes[awsxray.AWSOperationAttribute] = "aws_operation_val"
+ attributes[conventions.AttributeRPCMethod] = "rpc_method_val"
+ resource := constructDefaultResource()
+ span := constructServerSpan(parentSpanID, spanName, ptrace.StatusCodeError, "OK", attributes)
+
+ segment, _ := MakeSegment(span, resource, []string{awsxray.AWSOperationAttribute, conventions.AttributeRPCMethod}, true, nil, false)
+
+ assert.NotNil(t, segment)
+ assert.Equal(t, "aws_operation_val", segment.Annotations[awsxray.AWSOperationAttribute])
+ assert.Equal(t, "rpc_method_val", segment.Annotations[conventions.AttributeRPCMethod])
+}
+
func TestSpanWithSpecialAttributesNotListedAndIndexAll(t *testing.T) {
spanName := "/api/locations"
parentSpanID := newSegmentID()
@@ -986,7 +1055,7 @@ func TestClientSpanWithAwsRemoteServiceName(t *testing.T) {
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
assert.NotNil(t, jsonStr)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, strings.Contains(jsonStr, "PaymentService"))
assert.False(t, strings.Contains(jsonStr, user))
assert.False(t, strings.Contains(jsonStr, "user"))
@@ -1013,7 +1082,7 @@ func TestAwsSdkSpanWithAwsRemoteServiceName(t *testing.T) {
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
assert.NotNil(t, jsonStr)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, strings.Contains(jsonStr, "DynamoDb"))
assert.False(t, strings.Contains(jsonStr, "DynamoDb.PutItem"))
assert.False(t, strings.Contains(jsonStr, user))
@@ -1042,7 +1111,7 @@ func TestProducerSpanWithAwsRemoteServiceName(t *testing.T) {
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
assert.NotNil(t, jsonStr)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, strings.Contains(jsonStr, "ProducerService"))
assert.False(t, strings.Contains(jsonStr, user))
assert.False(t, strings.Contains(jsonStr, "user"))
@@ -1061,7 +1130,7 @@ func TestConsumerSpanWithAwsRemoteServiceName(t *testing.T) {
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
assert.NotNil(t, jsonStr)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, strings.Contains(jsonStr, "ConsumerService"))
assert.False(t, strings.Contains(jsonStr, user))
assert.False(t, strings.Contains(jsonStr, "user"))
@@ -1089,7 +1158,7 @@ func TestServerSpanWithAwsLocalServiceName(t *testing.T) {
jsonStr, err := MakeSegmentDocumentString(span, resource, nil, false, nil, false)
assert.NotNil(t, jsonStr)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.True(t, strings.Contains(jsonStr, "PaymentLocalService"))
assert.False(t, strings.Contains(jsonStr, user))
assert.False(t, strings.Contains(jsonStr, "user"))
diff --git a/exporter/awsxrayexporter/metadata.yaml b/exporter/awsxrayexporter/metadata.yaml
index 327ff2f2a011..684c17f946ee 100644
--- a/exporter/awsxrayexporter/metadata.yaml
+++ b/exporter/awsxrayexporter/metadata.yaml
@@ -1,9 +1,15 @@
type: awsxray
+scope_name: otelcol/awsxray
status:
class: exporter
stability:
beta: [traces]
- distributions: [contrib, aws, observiq]
+ distributions: [contrib]
codeowners:
active: [wangzlei, srprash]
+
+tests:
+ config:
+ region: 'us-west-2'
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/azuredataexplorerexporter/adx_exporter_test.go b/exporter/azuredataexplorerexporter/adx_exporter_test.go
index 653c3626a8f8..857ab8902ebb 100644
--- a/exporter/azuredataexplorerexporter/adx_exporter_test.go
+++ b/exporter/azuredataexplorerexporter/adx_exporter_test.go
@@ -37,18 +37,24 @@ func TestNewExporter(t *testing.T) {
LogTableMapping: "otellogs_mapping",
TraceTableMapping: "oteltraces_mapping",
}
- texp, err := newExporter(&c, logger, metricsType, component.NewDefaultBuildInfo().Version)
+ mexp, err := newExporter(&c, logger, metricsType, component.NewDefaultBuildInfo().Version)
assert.NoError(t, err)
- assert.NotNil(t, texp)
- texp, err = newExporter(&c, logger, logsType, component.NewDefaultBuildInfo().Version)
+ assert.NotNil(t, mexp)
+ assert.NoError(t, mexp.Close(context.Background()))
+
+ lexp, err := newExporter(&c, logger, logsType, component.NewDefaultBuildInfo().Version)
assert.NoError(t, err)
- assert.NotNil(t, texp)
- texp, err = newExporter(&c, logger, tracesType, component.NewDefaultBuildInfo().Version)
+ assert.NotNil(t, lexp)
+ assert.NoError(t, lexp.Close(context.Background()))
+
+ texp, err := newExporter(&c, logger, tracesType, component.NewDefaultBuildInfo().Version)
assert.NoError(t, err)
assert.NotNil(t, texp)
- texp, err = newExporter(&c, logger, 5, component.NewDefaultBuildInfo().Version)
+ assert.NoError(t, texp.Close(context.Background()))
+
+ fexp, err := newExporter(&c, logger, 5, component.NewDefaultBuildInfo().Version)
assert.Error(t, err)
- assert.Nil(t, texp)
+ assert.Nil(t, fexp)
}
func TestMetricsDataPusherStreaming(t *testing.T) {
@@ -66,7 +72,8 @@ func TestMetricsDataPusherStreaming(t *testing.T) {
}
assert.NotNil(t, adxDataProducer)
err := adxDataProducer.metricsDataPusher(context.Background(), createMetricsData(10))
- assert.NotNil(t, err)
+ assert.Error(t, err)
+ assert.NoError(t, adxDataProducer.Close(context.Background()))
}
func TestMetricsDataPusherQueued(t *testing.T) {
@@ -84,7 +91,8 @@ func TestMetricsDataPusherQueued(t *testing.T) {
}
assert.NotNil(t, adxDataProducer)
err := adxDataProducer.metricsDataPusher(context.Background(), createMetricsData(10))
- assert.NotNil(t, err)
+ assert.Error(t, err)
+ assert.NoError(t, adxDataProducer.Close(context.Background()))
}
func TestLogsDataPusher(t *testing.T) {
@@ -102,7 +110,8 @@ func TestLogsDataPusher(t *testing.T) {
}
assert.NotNil(t, adxDataProducer)
err := adxDataProducer.logsDataPusher(context.Background(), createLogsData())
- assert.NotNil(t, err)
+ assert.Error(t, err)
+ assert.NoError(t, adxDataProducer.Close(context.Background()))
}
func TestTracesDataPusher(t *testing.T) {
@@ -120,7 +129,8 @@ func TestTracesDataPusher(t *testing.T) {
}
assert.NotNil(t, adxDataProducer)
err := adxDataProducer.tracesDataPusher(context.Background(), createTracesData())
- assert.NotNil(t, err)
+ assert.Error(t, err)
+ assert.NoError(t, adxDataProducer.Close(context.Background()))
}
func TestClose(t *testing.T) {
@@ -137,7 +147,7 @@ func TestClose(t *testing.T) {
logger: logger,
}
err := adxDataProducer.Close(context.Background())
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
func TestIngestedDataRecordCount(t *testing.T) {
@@ -159,7 +169,7 @@ func TestIngestedDataRecordCount(t *testing.T) {
err := adxDataProducer.metricsDataPusher(context.Background(), createMetricsData(recordstoingest))
ingestedrecordsactual := ingestor.Records()
assert.Equal(t, recordstoingest, len(ingestedrecordsactual), "Number of metrics created should match number of records ingested")
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
func TestCreateKcsb(t *testing.T) {
diff --git a/exporter/azuredataexplorerexporter/config.go b/exporter/azuredataexplorerexporter/config.go
index 084566b8c76e..e6d92cbbaf5d 100644
--- a/exporter/azuredataexplorerexporter/config.go
+++ b/exporter/azuredataexplorerexporter/config.go
@@ -10,6 +10,7 @@ import (
"github.com/google/uuid"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -17,7 +18,7 @@ import (
type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
ClusterURI string `mapstructure:"cluster_uri"`
ApplicationID string `mapstructure:"application_id"`
ApplicationKey configopaque.String `mapstructure:"application_key"`
diff --git a/exporter/azuredataexplorerexporter/config_test.go b/exporter/azuredataexplorerexporter/config_test.go
index 9167568179ae..2c6667c3db61 100644
--- a/exporter/azuredataexplorerexporter/config_test.go
+++ b/exporter/azuredataexplorerexporter/config_test.go
@@ -11,6 +11,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -97,7 +98,7 @@ func TestLoadConfig(t *testing.T) {
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 60 * time.Second,
diff --git a/exporter/azuredataexplorerexporter/factory.go b/exporter/azuredataexplorerexporter/factory.go
index ca77d82ea13e..e2a4ee4ac6b0 100644
--- a/exporter/azuredataexplorerexporter/factory.go
+++ b/exporter/azuredataexplorerexporter/factory.go
@@ -75,7 +75,7 @@ func createMetricsExporter(
adxCfg,
adp.metricsDataPusher,
exporterhelper.WithTimeout(adxCfg.TimeoutSettings),
- exporterhelper.WithRetry(adxCfg.RetrySettings),
+ exporterhelper.WithRetry(adxCfg.BackOffConfig),
exporterhelper.WithQueue(adxCfg.QueueSettings),
exporterhelper.WithShutdown(adp.Close))
@@ -107,7 +107,7 @@ func createTracesExporter(
adxCfg,
adp.tracesDataPusher,
exporterhelper.WithTimeout(adxCfg.TimeoutSettings),
- exporterhelper.WithRetry(adxCfg.RetrySettings),
+ exporterhelper.WithRetry(adxCfg.BackOffConfig),
exporterhelper.WithQueue(adxCfg.QueueSettings),
exporterhelper.WithShutdown(adp.Close))
@@ -139,7 +139,7 @@ func createLogsExporter(
adxCfg,
adp.logsDataPusher,
exporterhelper.WithTimeout(adxCfg.TimeoutSettings),
- exporterhelper.WithRetry(adxCfg.RetrySettings),
+ exporterhelper.WithRetry(adxCfg.BackOffConfig),
exporterhelper.WithQueue(adxCfg.QueueSettings),
exporterhelper.WithShutdown(adp.Close))
diff --git a/exporter/azuredataexplorerexporter/generated_component_test.go b/exporter/azuredataexplorerexporter/generated_component_test.go
new file mode 100644
index 000000000000..dff9e46e372b
--- /dev/null
+++ b/exporter/azuredataexplorerexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package azuredataexplorerexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/azuredataexplorerexporter/go.mod b/exporter/azuredataexplorerexporter/go.mod
index b7d6a649329a..ddb8604302e1 100644
--- a/exporter/azuredataexplorerexporter/go.mod
+++ b/exporter/azuredataexplorerexporter/go.mod
@@ -1,76 +1,87 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuredataexplorerexporter
-go 1.20
+go 1.21
require (
- github.com/Azure/azure-kusto-go v0.13.1
- github.com/google/uuid v1.4.0
+ github.com/Azure/azure-kusto-go v0.15.2
+ github.com/google/uuid v1.6.0
github.com/json-iterator/go v1.1.12
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
github.com/Azure/azure-pipeline-go v0.2.3 // indirect
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 // indirect
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 // indirect
- github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd // indirect
+ github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe // indirect
github.com/Azure/go-autorest v14.2.0+incompatible // indirect
- github.com/Azure/go-autorest/autorest v0.11.28 // indirect
- github.com/Azure/go-autorest/autorest/adal v0.9.22 // indirect
+ github.com/Azure/go-autorest/autorest v0.11.29 // indirect
+ github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect
github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
github.com/Azure/go-autorest/logger v0.2.1 // indirect
github.com/Azure/go-autorest/tracing v0.6.0 // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/gofrs/uuid v4.2.0+incompatible // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/gofrs/uuid v4.4.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
+ github.com/golang-jwt/jwt/v5 v5.0.0 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
- github.com/mattn/go-ieproxy v0.0.1 // indirect
+ github.com/mattn/go-ieproxy v0.0.11 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/samber/lo v1.37.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/samber/lo v1.38.1 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/crypto v0.21.0 // indirect
+ golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/azuredataexplorerexporter/go.sum b/exporter/azuredataexplorerexporter/go.sum
index 78c498e3df41..1efaebd6f565 100644
--- a/exporter/azuredataexplorerexporter/go.sum
+++ b/exporter/azuredataexplorerexporter/go.sum
@@ -1,100 +1,78 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/Azure/azure-kusto-go v0.13.1 h1:0w4CmUTROT8qbLbKq921PhCb7mIfRFWeDu4iJxrNEOM=
-github.com/Azure/azure-kusto-go v0.13.1/go.mod h1:AyWTO0r50y7rAkxkTveLtn80njNyXpJP5WADvoSZ/P4=
+github.com/Azure/azure-kusto-go v0.15.2 h1:OlABJilic9TythSgWW6i8Fd0SgNTg0t9jBu6WVsaixM=
+github.com/Azure/azure-kusto-go v0.15.2/go.mod h1:9F2zvXH8B6eWzgI1S4k1ZXAIufnBZ1bv1cW1kB1n3D0=
github.com/Azure/azure-pipeline-go v0.1.8/go.mod h1:XA1kFWRVhSK+KNFiOhfv83Fv8L9achrP7OxIzeTn1Yg=
github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVtCdfBE21U=
github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k=
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU=
github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.2 h1:t5+QXLCK9SVi0PPdaY0PrFvYUo24KwA0QwxnaHRSVd4=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.2/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1 h1:LNHhpdK7hzUcx/k1LIcuh5k7k1LGIWLQfCjaneSj7Fc=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.1/go.mod h1:uE9zaUfEQT/nbQjVi2IblCG9iaLtZsuYZ8ne+PuQ02M=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0 h1:Ma67P/GGprNwsslzEH6+Kb8nybI8jpDTm4Wmzu2ReK8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.2.0/go.mod h1:c+Lifp3EDEamAkPVzMooRNOK6CZjNSdEnf1A7jsI9u4=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0 h1:gggzg0SUMs6SQbEw+3LoSsYf9YMjkupeAnHMX8O9mmY=
github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.0/go.mod h1:+6KLcKIVgxoBDMqMO/Nvy7bZ9a0nbU3I1DtFQK3YvB4=
-github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd h1:b3wyxBl3vvr15tUAziPBPK354y+LSdfPCpex5oBttHo=
-github.com/Azure/azure-storage-queue-go v0.0.0-20191125232315-636801874cdd/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8=
+github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe h1:HGuouUM1533rBXmMtR7qh5pYNSSjUZG90b/MgJAnb/A=
+github.com/Azure/azure-storage-queue-go v0.0.0-20230531184854-c06a8eff66fe/go.mod h1:K6am8mT+5iFXgingS9LUc7TmbsW6XBw3nxaRyaMyWc8=
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/Azure/go-autorest/autorest v0.11.28 h1:ndAExarwr5Y+GaHE6VCaY1kyS/HwwGGyuimVhWsHOEM=
-github.com/Azure/go-autorest/autorest v0.11.28/go.mod h1:MrkzG3Y3AH668QyF9KRk5neJnGgmhQ6krbhR8Q5eMvA=
-github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ=
-github.com/Azure/go-autorest/autorest/adal v0.9.22 h1:/GblQdIudfEM3AWWZ0mrYJQSd7JS4S/Mbzh6F0ov0Xc=
+github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw=
+github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs=
github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk=
+github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8=
+github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c=
github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw=
github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU=
github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk=
+github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0 h1:hVeq+yCyUi+MsoO/CU95yqCIcdzra5ovzk8Q2BBpV2M=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.0/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
-github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA=
+github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
-github.com/golang-jwt/jwt/v4 v4.2.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
+github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE=
+github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -103,19 +81,19 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI=
github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/mattn/go-ieproxy v0.0.11 h1:MQ/5BuGSgDAHZOJe6YY80IF2UVCfGkwfo6AeD7HtHYo=
+github.com/mattn/go-ieproxy v0.0.11/go.mod h1:/NsJd+kxZBmjMc5hrJCKMbP57B84rvq9BiDRbtO9AS0=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -129,15 +107,18 @@ github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/samber/lo v1.37.0 h1:XjVcB8g6tgUp8rsPsJ2CvhClfImrpL04YpQHXeHPhRw=
-github.com/samber/lo v1.37.0/go.mod h1:9vaz2O4o8oOnK23pd2TrXufcbdbJIa3b6cstBWKpopA=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/samber/lo v1.38.1 h1:j2XEAqXKb09Am4ebOg31SpvzUTTs6EN3VfgeLUhPdXM=
+github.com/samber/lo v1.38.1/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -146,86 +127,84 @@ github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpE
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tj/assert v0.0.3 h1:Df/BlaZ20mq6kuai7f5z2TvPFiwC3xaWJSDQNiIS3Rk=
+github.com/tj/assert v0.0.3/go.mod h1:Ne6X72Q+TB1AteidzQncjw9PabbMp4PBMZ1k+vd1Pvk=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-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-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
+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/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-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/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/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -234,60 +213,45 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/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/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+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=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/azuredataexplorerexporter/internal/metadata/generated_status.go b/exporter/azuredataexplorerexporter/internal/metadata/generated_status.go
index 9e42ff39a993..7bc6416a120b 100644
--- a/exporter/azuredataexplorerexporter/internal/metadata/generated_status.go
+++ b/exporter/azuredataexplorerexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("azuredataexplorer")
)
const (
- Type = "azuredataexplorer"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/azuredataexplorer")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/azuredataexplorer")
+}
diff --git a/exporter/azuredataexplorerexporter/metadata.yaml b/exporter/azuredataexplorerexporter/metadata.yaml
index 7b7c031da4da..efc972b0b490 100644
--- a/exporter/azuredataexplorerexporter/metadata.yaml
+++ b/exporter/azuredataexplorerexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: azuredataexplorer
+scope_name: otelcol/azuredataexplorer
status:
class: exporter
@@ -6,4 +7,13 @@ status:
beta: [traces, metrics, logs]
distributions: [contrib]
codeowners:
- active: [asaharn, ag-ramachandran]
\ No newline at end of file
+ active: [asaharn, ag-ramachandran]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ config:
+ cluster_uri: "https://CLUSTER.kusto.windows.net"
+ application_id: "f80da32c-108c-415c-a19e-643f461a677a"
+ application_key: "xx-xx-xx-xx"
+ tenant_id: "21ff9e36-fbaa-43c8-98ba-00431ea10bc3"
+ skip_lifecycle: true
\ No newline at end of file
diff --git a/exporter/azuredataexplorerexporter/package_test.go b/exporter/azuredataexplorerexporter/package_test.go
new file mode 100644
index 000000000000..37c834b440ea
--- /dev/null
+++ b/exporter/azuredataexplorerexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package azuredataexplorerexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/azuremonitorexporter/AUTHENTICATION.md b/exporter/azuremonitorexporter/AUTHENTICATION.md
index 8317edc1fc7f..c2c4b8dc8863 100644
--- a/exporter/azuremonitorexporter/AUTHENTICATION.md
+++ b/exporter/azuremonitorexporter/AUTHENTICATION.md
@@ -2,42 +2,41 @@
## Local Authentication
-The default authentication mechanism used by the Azure Monitor Exporter is "Local Authentication" - based solely on the Application Insights Instrumentation Key. An example of the exporters section of the configuration is
+The default authentication mechanism used by the Azure Monitor Exporter is "Local Authentication", which relies exclusively on the `InstrumentationKey` obtained from the connection string of the Application Insights. Below is an illustrative example of the exporters section in a configuration file:
```yaml
exporters:
azuremonitor:
- instrumentation_key: 00000000-0000-0000-0000-000000000000
+ connection_string: "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://ingestion.azuremonitor.com/"
```
-Where the zero guid is replaced with the instrumentation key of your Application Insights instance.
+Use the connection string from your Application Insights instance.
The same can be achieved by using an environment variable to hold the key
```yaml
exporters:
azuremonitor:
- instrumentation_key: ${env:APP_INSIGHTS_KEY}
+ connection_string: ${env:APPLICATIONINSIGHTS_CONNECTION_STRING}
```
## AAD/Entra Authentication
-Local Authentication can be disabled in [Application Insights](https://learn.microsoft.com/en-us/azure/azure-monitor/app/azure-ad-authentication) and an AAD based identity can be used in conjunction with the instrumentation key. The instrumentation key is still required by the Exporter, but it is no long sufficient to just have this in order to import data.
+Local Authentication can be disabled in [Application Insights](https://learn.microsoft.com/en-us/azure/azure-monitor/app/azure-ad-authentication) and an AAD based identity can be used in conjunction with the instrumentation key.
The Azure Monitor Exporter does not support this approach directly, but it can be used with the [AAD Authentication Proxy](https://github.com/Azure/aad-auth-proxy) from the Azure Monitor product group.
The AAD Auth Proxy is a separate container/side-car that proxies calls to the Application Insights ingestion endpoint and attaches a bearer token to each call, asserting an AAD identity. This identity is managed by a certificate in the container that is registered with a Service Principal in AAD.
-To use this, both Azure Monitor Exporter and the AAD Auth Proxy require specific configuration. In the Exporter's configuration, it is necessary to override the default endpoint used to send data to. In the following example, it is assumed the AAD Auth Proxy is listening on localhost:8081.
+To integrate this setup, both the Azure Monitor Exporter and the AAD Auth Proxy must be configured appropriately. For the Exporter, replace the ingestion endpoint in the connection string with the proxy endpoint. For instance, if the AAD Auth Proxy listens on localhost:8081, configure as follows:
```yaml
exporters:
azuremonitor:
- instrumentation_key: ${env:APP_INSIGHTS_KEY}
- endpoint: http://localhost:8081/v2.1/track
+ connection_string: "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=http://localhost:8081"
```
-The key difference is this uses the `v2.1` endpoint, not the standard `v2` one.
+The original `IngestionEndpoint` from the connection string needs to be set as the `TARGET_HOST` environment variable in the aad-auth-proxy configuration.
In the docker compose file for AAD Auth Proxy, the following values need to be set:
@@ -60,7 +59,7 @@ azuremonitor-ingestion-proxy:
```
- `AUDIENCE`: value is the generic Azure Monitor Scope.
-- `TARGET_HOST`: the Application Insights IngestionEndpoint value from the Connection String, available in the Azure Portal.
+- `TARGET_HOST`: the Application Insights `IngestionEndpoint` value from the Connection String, available in the Azure Portal.
- `AAD_CLIENT_ID`: client id of the service principal representing the AAD identity to use.
- `AAD_TENANT_ID`: id of the AAD Tenant the service principal exists in.
- `AAD_CLIENT_CERTIFICATE_PATH`: path to the .pem certificate file containing the CERTIFICATE and PRIVATE KEY parts of the certificate registered with the service principal.
diff --git a/exporter/azuremonitorexporter/README.md b/exporter/azuremonitorexporter/README.md
index d2d5f1ed4f25..54bbea0df5f7 100644
--- a/exporter/azuremonitorexporter/README.md
+++ b/exporter/azuremonitorexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fazuremonitor%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fazuremonitor) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fazuremonitor%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fazuremonitor) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@pcwiese](https://www.github.com/pcwiese) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter sends logs, traces and metrics to [Azure Monitor](https://docs.microsoft.com/azure/azure-monitor/).
@@ -22,6 +21,14 @@ To configure the Azure Monitor Exporter, you must specify one of the following s
- `connection_string` (recommended): The Azure Application Insights Connection String is required to send telemetry data to the monitoring service. It is the recommended method for configuring the exporter, aligning with Azure Monitor's best practices. If you need guidance on creating Azure resources, please refer to the step-by-step guides to [Create an Application Insights resource](https://docs.microsoft.com/azure/azure-monitor/app/create-new-resource) and [find your connection string](https://docs.microsoft.com/azure/azure-monitor/app/sdk-connection-string?tabs=net#find-your-connection-string).
- `instrumentation_key`: Application Insights instrumentation key, which can be found in the Application Insights resource in the Azure Portal. While it is currently supported, its use is discouraged and it is slated for deprecation. It is highly encouraged to use the `connection_string` setting for new configurations and migrate existing configurations to use the `connection_string` as soon as possible.
+### Environment Variable Support
+
+In addition to the above configuration options, the Azure Monitor Exporter now supports setting the connection string via the `APPLICATIONINSIGHTS_CONNECTION_STRING` environment variable. This method is particularly useful for cloud or containerized environments where managing configuration through environment variables is standard practice.
+
+**Note:** If both the environment variable and the `connection_string` configuration option are provided, the environment variable takes precedence.
+
+### Configuration Options
+
**Important**: Only one of `connection_string` or `instrumentation_key` should be specified in your configuration. If both are provided, `connection_string` will be used as the priority setting.
The following settings can be optionally configured:
@@ -58,6 +65,15 @@ exporters:
instrumentation_key: b1cd0778-85fc-4677-a3fa-79d3c23e0efd
```
+Example using environment variable:
+
+Ensure `APPLICATIONINSIGHTS_CONNECTION_STRING` is set in your environment, then configure the exporter without specifying a connection string or instrumentation key:
+
+```yaml
+exporters:
+ azuremonitor:
+```
+
## Attribute mapping
### Traces
diff --git a/exporter/azuremonitorexporter/config_test.go b/exporter/azuremonitorexporter/config_test.go
index 4eb5bc07022f..ba1e41f7fefb 100644
--- a/exporter/azuremonitorexporter/config_test.go
+++ b/exporter/azuremonitorexporter/config_test.go
@@ -23,7 +23,7 @@ func TestLoadConfig(t *testing.T) {
cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
require.NoError(t, err)
- disk := component.NewIDWithName("disk", "")
+ disk := component.MustNewIDWithName("disk", "")
tests := []struct {
id component.ID
diff --git a/exporter/azuremonitorexporter/connection_string_parser.go b/exporter/azuremonitorexporter/connection_string_parser.go
index 15b4f57827fc..064f09c8a6f6 100644
--- a/exporter/azuremonitorexporter/connection_string_parser.go
+++ b/exporter/azuremonitorexporter/connection_string_parser.go
@@ -6,6 +6,7 @@ package azuremonitorexporter // import "github.com/open-telemetry/opentelemetry-
import (
"fmt"
"net/url"
+ "os"
"path"
"strings"
)
@@ -16,14 +17,22 @@ type ConnectionVars struct {
}
const (
- DefaultIngestionEndpoint = "https://dc.services.visualstudio.com/"
- IngestionEndpointKey = "IngestionEndpoint"
- InstrumentationKey = "InstrumentationKey"
- ConnectionStringMaxLength = 4096
+ ApplicationInsightsConnectionString = "APPLICATIONINSIGHTS_CONNECTION_STRING"
+ DefaultIngestionEndpoint = "https://dc.services.visualstudio.com/"
+ IngestionEndpointKey = "IngestionEndpoint"
+ InstrumentationKey = "InstrumentationKey"
+ ConnectionStringMaxLength = 4096
)
func parseConnectionString(exporterConfig *Config) (*ConnectionVars, error) {
- connectionString := string(exporterConfig.ConnectionString)
+ // First, try to get the connection string from the environment variable
+ connectionString := os.Getenv(ApplicationInsightsConnectionString)
+
+ // If not found in the environment, use the one from the configuration
+ if connectionString == "" {
+ connectionString = string(exporterConfig.ConnectionString)
+ }
+
instrumentationKey := string(exporterConfig.InstrumentationKey)
connectionVars := &ConnectionVars{}
@@ -75,6 +84,6 @@ func getIngestionURL(ingestionEndpoint string) string {
ingestionURL, _ = url.Parse(DefaultIngestionEndpoint)
}
- ingestionURL.Path = path.Join(ingestionURL.Path, "/v2/track")
+ ingestionURL.Path = path.Join(ingestionURL.Path, "/v2.1/track")
return ingestionURL.String()
}
diff --git a/exporter/azuremonitorexporter/connection_string_parser_test.go b/exporter/azuremonitorexporter/connection_string_parser_test.go
index ad8315f49159..dd0adb373c0b 100644
--- a/exporter/azuremonitorexporter/connection_string_parser_test.go
+++ b/exporter/azuremonitorexporter/connection_string_parser_test.go
@@ -4,6 +4,7 @@
package azuremonitorexporter
import (
+ "os"
"strings"
"testing"
@@ -15,6 +16,7 @@ import (
func TestParseConnectionString(t *testing.T) {
tests := []struct {
name string
+ envValue string
config *Config
want *ConnectionVars
wantError bool
@@ -27,7 +29,7 @@ func TestParseConnectionString(t *testing.T) {
},
want: &ConnectionVars{
InstrumentationKey: "00000000-0000-0000-0000-000000000000",
- IngestionURL: "https://ingestion.azuremonitor.com/v2/track",
+ IngestionURL: "https://ingestion.azuremonitor.com/v2.1/track",
},
wantError: false,
},
@@ -38,7 +40,7 @@ func TestParseConnectionString(t *testing.T) {
},
want: &ConnectionVars{
InstrumentationKey: "00000000-0000-0000-0000-000000000000",
- IngestionURL: DefaultIngestionEndpoint + "v2/track",
+ IngestionURL: DefaultIngestionEndpoint + "v2.1/track",
},
wantError: false,
},
@@ -49,7 +51,7 @@ func TestParseConnectionString(t *testing.T) {
},
want: &ConnectionVars{
InstrumentationKey: "00000000-0000-0000-0000-000000000000",
- IngestionURL: "https://ingestion.azuremonitor.com/v2/track",
+ IngestionURL: "https://ingestion.azuremonitor.com/v2.1/track",
},
wantError: false,
},
@@ -93,7 +95,7 @@ func TestParseConnectionString(t *testing.T) {
},
want: &ConnectionVars{
InstrumentationKey: "00000000-0000-0000-0000-000000000000",
- IngestionURL: "https://ingestion.azuremonitor.com/v2/track",
+ IngestionURL: "https://ingestion.azuremonitor.com/v2.1/track",
},
wantError: false,
},
@@ -104,7 +106,7 @@ func TestParseConnectionString(t *testing.T) {
},
want: &ConnectionVars{
InstrumentationKey: "00000000-0000-0000-0000-000000000000",
- IngestionURL: "https://ingestion.azuremonitor.com/v2/track",
+ IngestionURL: "https://ingestion.azuremonitor.com/v2.1/track",
},
wantError: false,
},
@@ -116,10 +118,38 @@ func TestParseConnectionString(t *testing.T) {
want: nil,
wantError: true,
},
+ {
+ name: "Environment variable only",
+ envValue: "InstrumentationKey=00000000-0000-0000-0000-00000000ENV;IngestionEndpoint=https://ingestion.env.azuremonitor.com/",
+ config: &Config{},
+ want: &ConnectionVars{
+ InstrumentationKey: "00000000-0000-0000-0000-00000000ENV",
+ IngestionURL: "https://ingestion.env.azuremonitor.com/v2.1/track",
+ },
+ wantError: false,
+ },
+ {
+ name: "Environment variable override",
+ envValue: "InstrumentationKey=00000000-0000-0000-0000-00000000ENV;IngestionEndpoint=https://ingestion.override.azuremonitor.com/",
+ config: &Config{
+ ConnectionString: "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://ingestion.azuremonitor.com/",
+ InstrumentationKey: "00000000-0000-0000-0000-00000000IKEY",
+ },
+ want: &ConnectionVars{
+ InstrumentationKey: "00000000-0000-0000-0000-00000000ENV",
+ IngestionURL: "https://ingestion.override.azuremonitor.com/v2.1/track",
+ },
+ wantError: false,
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
+ if tt.envValue != "" {
+ os.Setenv(ApplicationInsightsConnectionString, tt.envValue)
+ defer os.Unsetenv(ApplicationInsightsConnectionString)
+ }
+
got, err := parseConnectionString(tt.config)
if tt.wantError {
require.Error(t, err, "Expected an error but got none")
diff --git a/exporter/azuremonitorexporter/factory_test.go b/exporter/azuremonitorexporter/factory_test.go
index 5fa5bd0f2f86..9572b67168f9 100644
--- a/exporter/azuremonitorexporter/factory_test.go
+++ b/exporter/azuremonitorexporter/factory_test.go
@@ -24,7 +24,7 @@ func TestCreateTracesExporterUsingSpecificTransportChannel(t *testing.T) {
config.ConnectionString = "InstrumentationKey=test-key;IngestionEndpoint=https://test-endpoint/"
exporter, err := f.createTracesExporter(ctx, params, config)
assert.NotNil(t, exporter)
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
func TestCreateTracesExporterUsingDefaultTransportChannel(t *testing.T) {
@@ -36,7 +36,7 @@ func TestCreateTracesExporterUsingDefaultTransportChannel(t *testing.T) {
config.ConnectionString = "InstrumentationKey=test-key;IngestionEndpoint=https://test-endpoint/"
exporter, err := f.createTracesExporter(ctx, exportertest.NewNopCreateSettings(), config)
assert.NotNil(t, exporter)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, f.tChannel)
}
@@ -51,5 +51,5 @@ func TestCreateTracesExporterUsingBadConfig(t *testing.T) {
exporter, err := f.createTracesExporter(ctx, params, badConfig)
assert.Nil(t, exporter)
- assert.NotNil(t, err)
+ assert.Error(t, err)
}
diff --git a/exporter/azuremonitorexporter/generated_component_test.go b/exporter/azuremonitorexporter/generated_component_test.go
new file mode 100644
index 000000000000..d2d202bfd315
--- /dev/null
+++ b/exporter/azuremonitorexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package azuremonitorexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/azuremonitorexporter/go.mod b/exporter/azuremonitorexporter/go.mod
index 0180c33ec43b..d35810d3fb6a 100644
--- a/exporter/azuremonitorexporter/go.mod
+++ b/exporter/azuremonitorexporter/go.mod
@@ -1,56 +1,66 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/azuremonitorexporter
-go 1.20
+go 1.21
require (
github.com/microsoft/ApplicationInsights-Go v0.4.4
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
- golang.org/x/net v0.18.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/zap v1.27.0
+ golang.org/x/net v0.24.0
)
require (
code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gofrs/uuid v4.0.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/azuremonitorexporter/go.sum b/exporter/azuremonitorexporter/go.sum
index 1b0d9b59664a..39d3f7eba100 100644
--- a/exporter/azuremonitorexporter/go.sum
+++ b/exporter/azuremonitorexporter/go.sum
@@ -1,60 +1,37 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c h1:5eeuG0BHx1+DHeT3AP+ISKZ2ht1UjGhm581ljqYpVeQ=
code.cloudfoundry.org/clock v0.0.0-20180518195852-02e53af36e6c/go.mod h1:QD9Lzhd/ux6eNQVUDVRJX/RKTigpewimNYBi7ivZKY8=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
@@ -64,20 +41,19 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/microsoft/ApplicationInsights-Go v0.4.4 h1:G4+H9WNs6ygSCe6sUyxRc2U81TI5Es90b2t/MwX5KqY=
github.com/microsoft/ApplicationInsights-Go v0.4.4/go.mod h1:fKRUseBqkw6bDiXTs3ESTiU/4YTIHsQS4W3fP2ieF4U=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -90,109 +66,96 @@ github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+W
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tedsuo/ifrit v0.0.0-20180802180643-bea94bb476cc/go.mod h1:eyZnKCc955uh98WQvzOm0dgAeLnf2O0Rz0LPoC5ze+0=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -200,42 +163,20 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
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=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/azuremonitorexporter/internal/metadata/generated_status.go b/exporter/azuremonitorexporter/internal/metadata/generated_status.go
index 5dd0580e914d..f11bc387284c 100644
--- a/exporter/azuremonitorexporter/internal/metadata/generated_status.go
+++ b/exporter/azuremonitorexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("azuremonitor")
)
const (
- Type = "azuremonitor"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/azuremonitor")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/azuremonitor")
+}
diff --git a/exporter/azuremonitorexporter/metadata.yaml b/exporter/azuremonitorexporter/metadata.yaml
index f6b86a88aac0..7ea9d35e4e82 100644
--- a/exporter/azuremonitorexporter/metadata.yaml
+++ b/exporter/azuremonitorexporter/metadata.yaml
@@ -1,9 +1,16 @@
type: azuremonitor
+scope_name: otelcol/azuremonitor
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
- active: [pcwiese]
\ No newline at end of file
+ active: [pcwiese]
+
+tests:
+ config:
+ connection_string: "InstrumentationKey=00000000-0000-0000-0000-000000000000;IngestionEndpoint=https://ingestion.azuremonitor.com/"
+ instrumentation_key: b1cd0778-85fc-4677-a3fa-79d3c23e0efd
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/azuremonitorexporter/trace_to_envelope.go b/exporter/azuremonitorexporter/trace_to_envelope.go
index 0ee4df804355..2daa54d26790 100644
--- a/exporter/azuremonitorexporter/trace_to_envelope.go
+++ b/exporter/azuremonitorexporter/trace_to_envelope.go
@@ -191,7 +191,6 @@ func spanToRequestData(span ptrace.Span, incomingSpanType spanType) *contracts.R
data.Name = span.Name()
data.Duration = formatSpanDuration(span)
data.Properties = make(map[string]string)
- data.Measurements = make(map[string]float64)
data.ResponseCode, data.Success = getDefaultFormattedSpanStatus(span.Status())
switch incomingSpanType {
@@ -202,7 +201,7 @@ func spanToRequestData(span ptrace.Span, incomingSpanType spanType) *contracts.R
case messagingSpanType:
fillRequestDataMessaging(span, data)
case unknownSpanType:
- copyAttributesWithoutMapping(span.Attributes(), data.Properties, data.Measurements)
+ copyAttributesWithoutMapping(span.Attributes(), data.Properties)
}
return data
@@ -218,7 +217,6 @@ func spanToRemoteDependencyData(span ptrace.Span, incomingSpanType spanType) *co
data.ResultCode, data.Success = getDefaultFormattedSpanStatus(span.Status())
data.Duration = formatSpanDuration(span)
data.Properties = make(map[string]string)
- data.Measurements = make(map[string]float64)
switch incomingSpanType {
case httpSpanType:
@@ -230,7 +228,7 @@ func spanToRemoteDependencyData(span ptrace.Span, incomingSpanType spanType) *co
case messagingSpanType:
fillRemoteDependencyDataMessaging(span, data)
case unknownSpanType:
- copyAttributesWithoutMapping(span.Attributes(), data.Properties, data.Measurements)
+ copyAttributesWithoutMapping(span.Attributes(), data.Properties)
}
return data
@@ -240,9 +238,8 @@ func spanToRemoteDependencyData(span ptrace.Span, incomingSpanType spanType) *co
func spanEventToExceptionData(spanEvent ptrace.SpanEvent) *contracts.ExceptionData {
data := contracts.NewExceptionData()
data.Properties = make(map[string]string)
- data.Measurements = make(map[string]float64)
- attrs := copyAndExtractExceptionAttributes(spanEvent.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractExceptionAttributes(spanEvent.Attributes(), data.Properties)
details := contracts.NewExceptionDetails()
details.TypeName = attrs.ExceptionType
@@ -262,7 +259,7 @@ func spanEventToMessageData(spanEvent ptrace.SpanEvent) *contracts.MessageData {
data.Message = spanEvent.Name()
data.Properties = make(map[string]string)
- copyAttributesWithoutMapping(spanEvent.Attributes(), data.Properties, nil)
+ copyAttributesWithoutMapping(spanEvent.Attributes(), data.Properties)
return data
}
@@ -274,7 +271,7 @@ func getFormattedHTTPStatusValues(statusCode int64) (statusAsString string, succ
// Maps HTTP Server Span to AppInsights RequestData
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/http.md#semantic-conventions-for-http-spans
func fillRequestDataHTTP(span ptrace.Span, data *contracts.RequestData) {
- attrs := copyAndExtractHTTPAttributes(span.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractHTTPAttributes(span.Attributes(), data.Properties)
if attrs.HTTPStatusCode != 0 {
data.ResponseCode, data.Success = getFormattedHTTPStatusValues(attrs.HTTPStatusCode)
@@ -361,7 +358,7 @@ func fillRequestDataHTTP(span ptrace.Span, data *contracts.RequestData) {
// Maps HTTP Client Span to AppInsights RemoteDependencyData
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/http.md
func fillRemoteDependencyDataHTTP(span ptrace.Span, data *contracts.RemoteDependencyData) {
- attrs := copyAndExtractHTTPAttributes(span.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractHTTPAttributes(span.Attributes(), data.Properties)
data.Type = "HTTP"
if attrs.HTTPStatusCode != 0 {
@@ -449,7 +446,7 @@ func fillRemoteDependencyDataHTTP(span ptrace.Span, data *contracts.RemoteDepend
// Maps RPC Server Span to AppInsights RequestData
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md
func fillRequestDataRPC(span ptrace.Span, data *contracts.RequestData) {
- attrs := copyAndExtractRPCAttributes(span.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractRPCAttributes(span.Attributes(), data.Properties)
data.ResponseCode = getRPCStatusCodeAsString(attrs)
@@ -475,7 +472,7 @@ func fillRequestDataRPC(span ptrace.Span, data *contracts.RequestData) {
// Maps RPC Client Span to AppInsights RemoteDependencyData
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/rpc.md
func fillRemoteDependencyDataRPC(span ptrace.Span, data *contracts.RemoteDependencyData) {
- attrs := copyAndExtractRPCAttributes(span.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractRPCAttributes(span.Attributes(), data.Properties)
data.ResultCode = getRPCStatusCodeAsString(attrs)
@@ -501,7 +498,7 @@ func getRPCStatusCodeAsString(rpcAttributes *RPCAttributes) (statusCodeAsString
// Maps Database Client Span to AppInsights RemoteDependencyData
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/database.md
func fillRemoteDependencyDataDatabase(span ptrace.Span, data *contracts.RemoteDependencyData) {
- attrs := copyAndExtractDatabaseAttributes(span.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractDatabaseAttributes(span.Attributes(), data.Properties)
data.Type = attrs.DBSystem
@@ -519,7 +516,7 @@ func fillRemoteDependencyDataDatabase(span ptrace.Span, data *contracts.RemoteDe
// Maps Messaging Consumer/Server Span to AppInsights RequestData
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/messaging.md
func fillRequestDataMessaging(span ptrace.Span, data *contracts.RequestData) {
- attrs := copyAndExtractMessagingAttributes(span.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractMessagingAttributes(span.Attributes(), data.Properties)
// TODO Understand how to map attributes to RequestData fields
if attrs.MessagingURL != "" {
@@ -534,7 +531,7 @@ func fillRequestDataMessaging(span ptrace.Span, data *contracts.RequestData) {
// Maps Messaging Producer/Client Span to AppInsights RemoteDependencyData
// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/semantic_conventions/messaging.md
func fillRemoteDependencyDataMessaging(span ptrace.Span, data *contracts.RemoteDependencyData) {
- attrs := copyAndExtractMessagingAttributes(span.Attributes(), data.Properties, data.Measurements)
+ attrs := copyAndExtractMessagingAttributes(span.Attributes(), data.Properties)
// TODO Understand how to map attributes to RemoteDependencyData fields
data.Data = attrs.MessagingURL
@@ -553,11 +550,10 @@ func fillRemoteDependencyDataMessaging(span ptrace.Span, data *contracts.RemoteD
func copyAndMapAttributes(
attributeMap pcommon.Map,
properties map[string]string,
- measurements map[string]float64,
mappingFunc func(k string, v pcommon.Value)) {
attributeMap.Range(func(k string, v pcommon.Value) bool {
- setAttributeValueAsPropertyOrMeasurement(k, v, properties, measurements)
+ setAttributeValueAsProperty(k, v, properties)
if mappingFunc != nil {
mappingFunc(k, v)
}
@@ -568,23 +564,20 @@ func copyAndMapAttributes(
// Copies all attributes to either properties or measurements without any kind of mapping to a known set of attributes
func copyAttributesWithoutMapping(
attributeMap pcommon.Map,
- properties map[string]string,
- measurements map[string]float64) {
+ properties map[string]string) {
- copyAndMapAttributes(attributeMap, properties, measurements, nil)
+ copyAndMapAttributes(attributeMap, properties, nil)
}
// Attribute extraction logic for HTTP Span attributes
func copyAndExtractHTTPAttributes(
attributeMap pcommon.Map,
- properties map[string]string,
- measurements map[string]float64) *HTTPAttributes {
+ properties map[string]string) *HTTPAttributes {
attrs := &HTTPAttributes{}
copyAndMapAttributes(
attributeMap,
properties,
- measurements,
func(k string, v pcommon.Value) { attrs.MapAttribute(k, v) })
return attrs
@@ -593,14 +586,12 @@ func copyAndExtractHTTPAttributes(
// Attribute extraction logic for RPC Span attributes
func copyAndExtractRPCAttributes(
attributeMap pcommon.Map,
- properties map[string]string,
- measurements map[string]float64) *RPCAttributes {
+ properties map[string]string) *RPCAttributes {
attrs := &RPCAttributes{}
copyAndMapAttributes(
attributeMap,
properties,
- measurements,
func(k string, v pcommon.Value) { attrs.MapAttribute(k, v) })
return attrs
@@ -609,14 +600,12 @@ func copyAndExtractRPCAttributes(
// Attribute extraction logic for Database Span attributes
func copyAndExtractDatabaseAttributes(
attributeMap pcommon.Map,
- properties map[string]string,
- measurements map[string]float64) *DatabaseAttributes {
+ properties map[string]string) *DatabaseAttributes {
attrs := &DatabaseAttributes{}
copyAndMapAttributes(
attributeMap,
properties,
- measurements,
func(k string, v pcommon.Value) { attrs.MapAttribute(k, v) })
return attrs
@@ -625,14 +614,12 @@ func copyAndExtractDatabaseAttributes(
// Attribute extraction logic for Messaging Span attributes
func copyAndExtractMessagingAttributes(
attributeMap pcommon.Map,
- properties map[string]string,
- measurements map[string]float64) *MessagingAttributes {
+ properties map[string]string) *MessagingAttributes {
attrs := &MessagingAttributes{}
copyAndMapAttributes(
attributeMap,
properties,
- measurements,
func(k string, v pcommon.Value) { attrs.MapAttribute(k, v) })
return attrs
@@ -641,14 +628,12 @@ func copyAndExtractMessagingAttributes(
// Attribute extraction logic for Span event exception attributes
func copyAndExtractExceptionAttributes(
attributeMap pcommon.Map,
- properties map[string]string,
- measurements map[string]float64) *ExceptionAttributes {
+ properties map[string]string) *ExceptionAttributes {
attrs := &ExceptionAttributes{}
copyAndMapAttributes(
attributeMap,
properties,
- measurements,
func(k string, v pcommon.Value) { attrs.MapAttribute(k, v) })
return attrs
@@ -715,13 +700,10 @@ func writeFormattedPeerAddressFromNetworkAttributes(networkAttributes *NetworkAt
}
}
-// Sets the attribute value as a property or measurement.
-// Int and floats go to measurements if measurements is not nil, otherwise everything goes to properties.
-func setAttributeValueAsPropertyOrMeasurement(
+func setAttributeValueAsProperty(
key string,
attributeValue pcommon.Value,
- properties map[string]string,
- measurements map[string]float64) {
+ properties map[string]string) {
switch attributeValue.Type() {
case pcommon.ValueTypeBool:
@@ -731,18 +713,10 @@ func setAttributeValueAsPropertyOrMeasurement(
properties[key] = attributeValue.Str()
case pcommon.ValueTypeInt:
- if measurements == nil {
- properties[key] = strconv.FormatInt(attributeValue.Int(), 10)
- } else {
- measurements[key] = float64(attributeValue.Int())
- }
+ properties[key] = strconv.FormatInt(attributeValue.Int(), 10)
case pcommon.ValueTypeDouble:
- if measurements == nil {
- properties[key] = strconv.FormatFloat(attributeValue.Double(), 'f', -1, 64)
- } else {
- measurements[key] = attributeValue.Double()
- }
+ properties[key] = strconv.FormatFloat(attributeValue.Double(), 'f', -1, 64)
}
}
diff --git a/exporter/azuremonitorexporter/trace_to_envelope_test.go b/exporter/azuremonitorexporter/trace_to_envelope_test.go
index b575971b9b6b..25f7473a674e 100644
--- a/exporter/azuremonitorexporter/trace_to_envelope_test.go
+++ b/exporter/azuremonitorexporter/trace_to_envelope_test.go
@@ -589,7 +589,7 @@ func commonRequestDataValidations(
span ptrace.Span,
data *contracts.RequestData) {
- assertAttributesCopiedToPropertiesOrMeasurements(t, span.Attributes(), data.Properties, data.Measurements)
+ assertAttributesCopiedToProperties(t, span.Attributes(), data.Properties)
assert.Equal(t, defaultSpanIDAsHex, data.Id)
assert.Equal(t, defaultSpanDuration, data.Duration)
@@ -616,7 +616,7 @@ func commonRemoteDependencyDataValidations(
span ptrace.Span,
data *contracts.RemoteDependencyData) {
- assertAttributesCopiedToPropertiesOrMeasurements(t, span.Attributes(), data.Properties, data.Measurements)
+ assertAttributesCopiedToProperties(t, span.Attributes(), data.Properties)
assert.Equal(t, defaultSpanIDAsHex, data.Id)
assert.Equal(t, defaultSpanDuration, data.Duration)
}
@@ -711,35 +711,29 @@ func defaultInternalRemoteDependencyDataValidations(
span ptrace.Span,
data *contracts.RemoteDependencyData) {
- assertAttributesCopiedToPropertiesOrMeasurements(t, span.Attributes(), data.Properties, data.Measurements)
+ assertAttributesCopiedToProperties(t, span.Attributes(), data.Properties)
assert.Equal(t, "InProc", data.Type)
}
-// Verifies that all attributes are copies to either the properties or measurements maps of the envelope's data element
-func assertAttributesCopiedToPropertiesOrMeasurements(
+// Verifies that all attributes are copies to either the properties maps of the envelope's data element
+func assertAttributesCopiedToProperties(
t *testing.T,
attributeMap pcommon.Map,
- properties map[string]string,
- measurements map[string]float64) {
+ properties map[string]string) {
attributeMap.Range(func(k string, v pcommon.Value) bool {
+ p, exists := properties[k]
+ assert.True(t, exists)
+
switch v.Type() {
case pcommon.ValueTypeStr:
- p, exists := properties[k]
- assert.True(t, exists)
assert.Equal(t, v.Str(), p)
case pcommon.ValueTypeBool:
- p, exists := properties[k]
- assert.True(t, exists)
assert.Equal(t, strconv.FormatBool(v.Bool()), p)
case pcommon.ValueTypeInt:
- m, exists := measurements[k]
- assert.True(t, exists)
- assert.Equal(t, float64(v.Int()), m)
+ assert.Equal(t, strconv.FormatInt(v.Int(), 10), p)
case pcommon.ValueTypeDouble:
- m, exists := measurements[k]
- assert.True(t, exists)
- assert.Equal(t, v.Double(), m)
+ assert.Equal(t, strconv.FormatFloat(v.Double(), 'f', -1, 64), p)
}
return true
})
diff --git a/exporter/carbonexporter/README.md b/exporter/carbonexporter/README.md
index 327a66fda990..17d5dbc1236b 100644
--- a/exporter/carbonexporter/README.md
+++ b/exporter/carbonexporter/README.md
@@ -4,14 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: metrics |
-| Distributions | [contrib], [observiq], [sumo] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fcarbon%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fcarbon) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fcarbon%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fcarbon) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@aboguszewski-sumo](https://www.github.com/aboguszewski-sumo) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
The [Carbon](https://github.com/graphite-project/carbon) exporter supports
@@ -24,8 +22,6 @@ The following settings are required:
- `endpoint` (default = `localhost:2003`): Address and port that the
exporter should send data to.
-- `timeout` (default = `5s`): Maximum duration allowed to connect
- and send data to the configured `endpoint`.
Example:
@@ -45,3 +41,10 @@ exporters:
The full list of settings exposed for this receiver are documented [here](./config.go)
with detailed sample configurations [here](./testdata/config.yaml).
+
+## Advanced Configuration
+
+Several helper files are leveraged to provide additional capabilities automatically:
+
+- [net settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/confignet/README.md)
+- [Queuing, retry and timeout settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md)
diff --git a/exporter/carbonexporter/config.go b/exporter/carbonexporter/config.go
index ead7eee80219..de3d0f75e08d 100644
--- a/exporter/carbonexporter/config.go
+++ b/exporter/carbonexporter/config.go
@@ -7,26 +7,30 @@ import (
"errors"
"fmt"
"net"
- "time"
-)
-// Defaults for not specified configuration settings.
-const (
- DefaultEndpoint = "localhost:2003"
- DefaultSendTimeout = 5 * time.Second
+ "go.opentelemetry.io/collector/config/confignet"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
)
// Config defines configuration for Carbon exporter.
type Config struct {
-
- // Endpoint specifies host and port to send metrics in the Carbon plaintext
- // format. The default value is defined by the DefaultEndpoint constant.
- Endpoint string `mapstructure:"endpoint"`
+ // Specifies the connection endpoint config. The default value is "localhost:2003".
+ confignet.TCPAddrConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ // MaxIdleConns is used to set a limit to the maximum idle TCP connections the client can keep open. Default value is 100.
+ // If `sending_queue` is enabled, it is recommended to use same value as `sending_queue::num_consumers`.
+ MaxIdleConns int `mapstructure:"max_idle_conns"`
// Timeout is the maximum duration allowed to connecting and sending the
- // data to the Carbon/Graphite backend.
- // The default value is defined by the DefaultSendTimeout constant.
- Timeout time.Duration `mapstructure:"timeout"`
+ // data to the Carbon/Graphite backend. The default value is 5s.
+ exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ QueueConfig exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ RetryConfig configretry.BackOffConfig `mapstructure:"retry_on_failure"`
+
+ // ResourceToTelemetrySettings defines configuration for converting resource attributes to metric labels.
+ ResourceToTelemetryConfig resourcetotelemetry.Settings `mapstructure:"resource_to_telemetry_conversion"`
}
func (cfg *Config) Validate() error {
@@ -38,7 +42,11 @@ func (cfg *Config) Validate() error {
// Negative timeouts are not acceptable, since all sends will fail.
if cfg.Timeout < 0 {
- return errors.New("exporter requires a positive timeout")
+ return errors.New("'timeout' must be non-negative")
+ }
+
+ if cfg.MaxIdleConns < 0 {
+ return errors.New("'max_idle_conns' must be non-negative")
}
return nil
diff --git a/exporter/carbonexporter/config_test.go b/exporter/carbonexporter/config_test.go
index 07cfaf48e42b..767908147d08 100644
--- a/exporter/carbonexporter/config_test.go
+++ b/exporter/carbonexporter/config_test.go
@@ -11,9 +11,13 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/confignet"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter/internal/metadata"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
)
func TestLoadConfig(t *testing.T) {
@@ -35,8 +39,29 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "allsettings"),
expected: &Config{
- Endpoint: "localhost:8080",
- Timeout: 10 * time.Second,
+ TCPAddrConfig: confignet.TCPAddrConfig{
+ Endpoint: "localhost:8080",
+ },
+ MaxIdleConns: 15,
+ TimeoutSettings: exporterhelper.TimeoutSettings{
+ Timeout: 10 * time.Second,
+ },
+ RetryConfig: configretry.BackOffConfig{
+ Enabled: true,
+ InitialInterval: 10 * time.Second,
+ RandomizationFactor: 0.7,
+ Multiplier: 3.14,
+ MaxInterval: 1 * time.Minute,
+ MaxElapsedTime: 10 * time.Minute,
+ },
+ QueueConfig: exporterhelper.QueueSettings{
+ Enabled: true,
+ NumConsumers: 2,
+ QueueSize: 10,
+ },
+ ResourceToTelemetryConfig: resourcetotelemetry.Settings{
+ Enabled: true,
+ },
},
},
}
@@ -69,14 +94,27 @@ func TestValidateConfig(t *testing.T) {
{
name: "invalid_tcp_addr",
config: &Config{
- Endpoint: "http://localhost:2003",
+ TCPAddrConfig: confignet.TCPAddrConfig{
+ Endpoint: "http://localhost:2003",
+ },
},
wantErr: true,
},
{
name: "invalid_timeout",
config: &Config{
- Timeout: -5 * time.Second,
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: defaultEndpoint},
+ TimeoutSettings: exporterhelper.TimeoutSettings{
+ Timeout: -5 * time.Second,
+ },
+ },
+ wantErr: true,
+ },
+ {
+ name: "invalid_max_idle_conns",
+ config: &Config{
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: defaultEndpoint},
+ MaxIdleConns: -1,
},
wantErr: true,
},
diff --git a/exporter/carbonexporter/exporter.go b/exporter/carbonexporter/exporter.go
index e6a8fbc62ccb..a0c6610ba746 100644
--- a/exporter/carbonexporter/exporter.go
+++ b/exporter/carbonexporter/exporter.go
@@ -9,145 +9,196 @@ import (
"sync"
"time"
+ "go.opentelemetry.io/collector/config/confignet"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/pdata/pmetric"
+ "go.uber.org/multierr"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
)
// newCarbonExporter returns a new Carbon exporter.
-func newCarbonExporter(cfg *Config, set exporter.CreateSettings) (exporter.Metrics, error) {
+func newCarbonExporter(ctx context.Context, cfg *Config, set exporter.CreateSettings) (exporter.Metrics, error) {
sender := carbonSender{
- connPool: newTCPConnPool(cfg.Endpoint, cfg.Timeout),
+ writeTimeout: cfg.Timeout,
+ conns: newConnPool(cfg.TCPAddrConfig, cfg.Timeout, cfg.MaxIdleConns),
}
- return exporterhelper.NewMetricsExporter(
- context.TODO(),
+ exp, err := exporterhelper.NewMetricsExporter(
+ ctx,
set,
cfg,
sender.pushMetricsData,
+ // We don't use exporterhelper.WithTimeout because the TCP connection does not accept writing with context.
+ exporterhelper.WithQueue(cfg.QueueConfig),
+ exporterhelper.WithRetry(cfg.RetryConfig),
exporterhelper.WithShutdown(sender.Shutdown))
+ if err != nil {
+ return nil, err
+ }
+
+ return resourcetotelemetry.WrapMetricsExporter(cfg.ResourceToTelemetryConfig, exp), nil
}
// carbonSender is the struct tying the translation function and the TCP
// connections into an implementations of exporterhelper.PushMetricsData so
// the exporter can leverage the helper and get consistent observability.
type carbonSender struct {
- connPool *connPool
+ writeTimeout time.Duration
+ conns connPool
}
func (cs *carbonSender) pushMetricsData(_ context.Context, md pmetric.Metrics) error {
lines := metricDataToPlaintext(md)
- if _, err := cs.connPool.Write([]byte(lines)); err != nil {
- // Use the sum of converted and dropped since the write failed for all.
+ // There is no way to do a call equivalent to recvfrom with an empty buffer
+ // to check if the connection was terminated (if the size of the buffer is
+ // 0 the Read call doesn't call lower level). So due to buffer sizes it is
+ // possible that a write will succeed on a connection that was already
+ // closed by the server.
+ //
+ // At least on Darwin it is possible to work around this by configuring the
+ // buffer on each call, ie.:
+ //
+ // if err = conn.SetWriteBuffer(len(bytes)-1); err != nil {
+ // return 0, err
+ // }
+ //
+ // However, this causes a performance penalty of ~10% cpu and it is not
+ // present in various implementations of Carbon clients. Considering these
+ // facts this "workaround" is not being added at this moment. If it is
+ // needed in some scenarios the workaround should be validated on other
+ // platforms and offered as a configuration setting.
+ conn, err := cs.conns.get()
+ if err != nil {
return err
}
+ if err = conn.SetWriteDeadline(time.Now().Add(cs.writeTimeout)); err != nil {
+ // Do not re-enqueue the connection since it failed to set a deadline.
+ return multierr.Append(err, conn.Close())
+ }
+
+ // If we did not write all bytes will get an error, so no need to check for that.
+ _, err = conn.Write([]byte(lines))
+ if err != nil {
+ // Do not re-enqueue the connection since it failed to write.
+ return multierr.Append(err, conn.Close())
+ }
+
+ // Even if we close the connection because of the max idle connections,
+ cs.conns.put(conn)
return nil
}
func (cs *carbonSender) Shutdown(context.Context) error {
- cs.connPool.Close()
- return nil
+ return cs.conns.close()
}
-// connPool is a very simple implementation of a pool of net.TCPConn instances.
-// The implementation hides the pool and exposes a Write and Close methods.
-// It leverages the prior art from SignalFx Gateway (see
-// https://github.com/signalfx/gateway/blob/master/protocol/carbon/conn_pool.go
-// but not its implementation).
-//
-// It keeps a unbounded "stack" of TCPConn instances always "popping" the most
-// recently returned to the pool. There is no accounting to terminating old
-// unused connections as that was the case on the prior art mentioned above.
-type connPool struct {
- mtx sync.Mutex
- conns []*net.TCPConn
- endpoint string
- timeout time.Duration
+// connPool is a very simple implementation of a pool of net.Conn instances.
+type connPool interface {
+ get() (net.Conn, error)
+ put(conn net.Conn)
+ close() error
}
-func newTCPConnPool(
- endpoint string,
+func newConnPool(
+ tcpConfig confignet.TCPAddrConfig,
timeout time.Duration,
-) *connPool {
- return &connPool{
- endpoint: endpoint,
- timeout: timeout,
+ maxIdleConns int,
+) connPool {
+ if maxIdleConns == 0 {
+ return &nopConnPool{
+ timeout: timeout,
+ tcpConfig: tcpConfig,
+ }
+ }
+ return &connPoolWithIdle{
+ timeout: timeout,
+ tcpConfig: tcpConfig,
+ maxIdleConns: maxIdleConns,
}
}
-func (cp *connPool) Write(bytes []byte) (int, error) {
- var conn *net.TCPConn
- var err error
+// nopConnPool is a very simple implementation that does not cache any net.Conn.
+type nopConnPool struct {
+ timeout time.Duration
+ tcpConfig confignet.TCPAddrConfig
+}
- // The deferred function below is what puts back connections on the pool.
- defer func() {
- if err == nil {
- cp.mtx.Lock()
- cp.conns = append(cp.conns, conn)
- cp.mtx.Unlock()
- } else if conn != nil {
- conn.Close()
- }
- }()
+func (cp *nopConnPool) get() (net.Conn, error) {
+ return createTCPConn(cp.tcpConfig, cp.timeout)
+}
- start := time.Now()
- cp.mtx.Lock()
- lastIdx := len(cp.conns) - 1
- if lastIdx >= 0 {
- conn = cp.conns[lastIdx]
- cp.conns = cp.conns[0:lastIdx]
- }
- cp.mtx.Unlock()
- if conn == nil {
- if conn, err = cp.createTCPConn(); err != nil {
- return 0, err
- }
+func (cp *nopConnPool) put(conn net.Conn) {
+ _ = conn.Close()
+}
+
+func (cp *nopConnPool) close() error {
+ return nil
+}
+
+// connPool is a very simple implementation of a pool of net.Conn instances.
+//
+// It keeps at most maxIdleConns net.Conn and always "popping" the most
+// recently returned to the pool. There is no accounting to terminating old
+// unused connections.
+type connPoolWithIdle struct {
+ timeout time.Duration
+ maxIdleConns int
+ mtx sync.Mutex
+ conns []net.Conn
+ tcpConfig confignet.TCPAddrConfig
+}
+
+func (cp *connPoolWithIdle) get() (net.Conn, error) {
+ if conn := cp.getFromCache(); conn != nil {
+ return conn, nil
}
- // There is no way to do a call equivalent to recvfrom with an empty buffer
- // to check if the connection was terminated (if the size of the buffer is
- // 0 the Read call doesn't call lower level). So due to buffer sizes it is
- // possible that a write will succeed on a connection that was already
- // closed by the server.
- //
- // At least on Darwin it is possible to work around this by configuring the
- // buffer on each call, ie.:
- //
- // if err = conn.SetWriteBuffer(len(bytes)-1); err != nil {
- // return 0, err
- // }
- //
- // However, this causes a performance penalty of ~10% cpu and it is not
- // present in various implementations of Carbon clients. Considering these
- // facts this "workaround" is not being added at this moment. If it is
- // needed in some scenarios the workaround should be validated on other
- // platforms and offered as a configuration setting.
+ return createTCPConn(cp.tcpConfig, cp.timeout)
+}
- if err = conn.SetWriteDeadline(start.Add(cp.timeout)); err != nil {
- return 0, err
+func (cp *connPoolWithIdle) put(conn net.Conn) {
+ cp.mtx.Lock()
+ defer cp.mtx.Unlock()
+ // Do not cache if above limit.
+ if len(cp.conns) > cp.maxIdleConns {
+ _ = conn.Close()
+ return
}
+ cp.conns = append(cp.conns, conn)
+}
- var n int
- n, err = conn.Write(bytes)
- return n, err
+func (cp *connPoolWithIdle) getFromCache() net.Conn {
+ cp.mtx.Lock()
+ defer cp.mtx.Unlock()
+ lastIdx := len(cp.conns) - 1
+ if lastIdx < 0 {
+ return nil
+ }
+ conn := cp.conns[lastIdx]
+ cp.conns = cp.conns[0:lastIdx]
+ return conn
}
-func (cp *connPool) Close() {
+func (cp *connPoolWithIdle) close() error {
cp.mtx.Lock()
defer cp.mtx.Unlock()
+ var errs error
for _, conn := range cp.conns {
- conn.Close()
+ errs = multierr.Append(errs, conn.Close())
}
cp.conns = nil
+ return errs
}
-func (cp *connPool) createTCPConn() (*net.TCPConn, error) {
- c, err := net.DialTimeout("tcp", cp.endpoint, cp.timeout)
+func createTCPConn(tcpConfig confignet.TCPAddrConfig, timeout time.Duration) (net.Conn, error) {
+ c, err := net.DialTimeout("tcp", tcpConfig.Endpoint, timeout)
if err != nil {
return nil, err
}
- return c.(*net.TCPConn), err
+ return c, err
}
diff --git a/exporter/carbonexporter/exporter_test.go b/exporter/carbonexporter/exporter_test.go
index a97f61cf5e32..5af6e35befae 100644
--- a/exporter/carbonexporter/exporter_test.go
+++ b/exporter/carbonexporter/exporter_test.go
@@ -7,7 +7,6 @@ import (
"bufio"
"context"
"errors"
- "fmt"
"io"
"net"
"runtime"
@@ -20,233 +19,347 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/confignet"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
conventions "go.opentelemetry.io/collector/semconv/v1.9.0"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
)
-func TestNew(t *testing.T) {
+func TestNewWithDefaultConfig(t *testing.T) {
cfg := createDefaultConfig().(*Config)
- got, err := newCarbonExporter(cfg, exportertest.NewNopCreateSettings())
+ got, err := newCarbonExporter(context.Background(), cfg, exportertest.NewNopCreateSettings())
assert.NotNil(t, got)
assert.NoError(t, err)
}
-func TestConsumeMetricsData(t *testing.T) {
- t.Skip("skipping flaky test, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/396")
- smallBatch := pmetric.NewMetrics()
- m := smallBatch.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
- m.SetName("test_gauge")
- dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
- dp.Attributes().PutStr("k0", "v0")
- dp.Attributes().PutStr("k1", "v1")
- dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- dp.SetDoubleValue(123)
- largeBatch := generateLargeBatch()
+func TestConsumeMetricsNoServer(t *testing.T) {
+ exp, err := newCarbonExporter(
+ context.Background(),
+ &Config{
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: testutil.GetAvailableLocalAddress(t)},
+ TimeoutSettings: exporterhelper.TimeoutSettings{Timeout: 5 * time.Second},
+ },
+ exportertest.NewNopCreateSettings())
+ require.NoError(t, err)
+ require.NoError(t, exp.Start(context.Background(), componenttest.NewNopHost()))
+ require.Error(t, exp.ConsumeMetrics(context.Background(), generateSmallBatch()))
+ require.NoError(t, exp.Shutdown(context.Background()))
+}
+
+func TestConsumeMetricsWithResourceToTelemetry(t *testing.T) {
+ addr := testutil.GetAvailableLocalAddress(t)
+ cs := newCarbonServer(t, addr, "test_0;key_0=value_0;key_1=value_1;key_2=value_2;service.name=carbon 0")
+ // Each metric point will generate one Carbon line, set up the wait
+ // for all of them.
+ cs.start(t, 1)
+
+ exp, err := newCarbonExporter(
+ context.Background(),
+ &Config{
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: addr},
+ TimeoutSettings: exporterhelper.TimeoutSettings{Timeout: 5 * time.Second},
+ ResourceToTelemetryConfig: resourcetotelemetry.Settings{Enabled: true},
+ },
+ exportertest.NewNopCreateSettings())
+ require.NoError(t, err)
+ require.NoError(t, exp.Start(context.Background(), componenttest.NewNopHost()))
+ require.NoError(t, exp.ConsumeMetrics(context.Background(), generateSmallBatch()))
+ assert.NoError(t, exp.Shutdown(context.Background()))
+ cs.shutdownAndVerify(t)
+}
+
+func TestConsumeMetrics(t *testing.T) {
+ if runtime.GOOS == "windows" {
+ t.Skip("skipping test on windows, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/10147")
+ }
tests := []struct {
- name string
- md pmetric.Metrics
- acceptClient bool
- createServer bool
+ name string
+ md pmetric.Metrics
+ numProducers int
+ writesPerProducer int
}{
{
- name: "small_batch",
- md: smallBatch,
- },
- {
- name: "small_batch",
- md: smallBatch,
- createServer: true,
+ name: "small_batch",
+ md: generateSmallBatch(),
+ numProducers: 1,
+ writesPerProducer: 5,
},
{
- name: "small_batch",
- md: smallBatch,
- createServer: true,
- acceptClient: true,
+ name: "large_batch",
+ md: generateLargeBatch(),
+ numProducers: 1,
+ writesPerProducer: 5,
},
{
- name: "large_batch",
- md: largeBatch,
+ name: "concurrent_small_batch",
+ md: generateSmallBatch(),
+ numProducers: 5,
+ writesPerProducer: 5,
},
{
- name: "large_batch",
- md: largeBatch,
- createServer: true,
+ name: "concurrent_large_batch",
+ md: generateLargeBatch(),
+ numProducers: 5,
+ writesPerProducer: 5,
},
{
- name: "large_batch",
- md: largeBatch,
- createServer: true,
- acceptClient: true,
+ name: "high_concurrency",
+ md: generateLargeBatch(),
+ numProducers: 10,
+ writesPerProducer: 200,
},
}
for _, tt := range tests {
- testName := fmt.Sprintf(
- "%s_createServer_%t_acceptClient_%t", tt.name, tt.createServer, tt.acceptClient)
- t.Run(testName, func(t *testing.T) {
+ t.Run(tt.name, func(t *testing.T) {
addr := testutil.GetAvailableLocalAddress(t)
- var ln *net.TCPListener
- if tt.createServer {
- laddr, err := net.ResolveTCPAddr("tcp", addr)
- require.NoError(t, err)
- ln, err = net.ListenTCP("tcp", laddr)
- require.NoError(t, err)
- defer ln.Close()
- }
+ cs := newCarbonServer(t, addr, "")
+ // Each metric point will generate one Carbon line, set up the wait
+ // for all of them.
+ cs.start(t, tt.numProducers*tt.writesPerProducer*tt.md.DataPointCount())
- config := &Config{Endpoint: addr, Timeout: 1000 * time.Millisecond}
- exp, err := newCarbonExporter(config, exportertest.NewNopCreateSettings())
+ exp, err := newCarbonExporter(
+ context.Background(),
+ &Config{
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: addr},
+ MaxIdleConns: tt.numProducers,
+ TimeoutSettings: exporterhelper.TimeoutSettings{Timeout: 5 * time.Second},
+ },
+ exportertest.NewNopCreateSettings())
require.NoError(t, err)
-
require.NoError(t, exp.Start(context.Background(), componenttest.NewNopHost()))
- if !tt.createServer {
- require.Error(t, exp.ConsumeMetrics(context.Background(), tt.md))
- assert.NoError(t, exp.Shutdown(context.Background()))
- return
+ startCh := make(chan struct{})
+ var writersWG sync.WaitGroup
+ writersWG.Add(tt.numProducers)
+ for i := 0; i < tt.numProducers; i++ {
+ go func() {
+ defer writersWG.Done()
+ <-startCh
+ for j := 0; j < tt.writesPerProducer; j++ {
+ require.NoError(t, exp.ConsumeMetrics(context.Background(), tt.md))
+ }
+ }()
}
- if !tt.acceptClient {
- // Due to differences between platforms is not certain if the call to ConsumeMetrics below will produce error or not.
- // See comment about recvfrom at connPool.Write for detailed information.
- _ = exp.ConsumeMetrics(context.Background(), tt.md)
- assert.NoError(t, exp.Shutdown(context.Background()))
- return
- }
+ // Release all senders.
+ close(startCh)
+ // Wait for all senders to finish.
+ writersWG.Wait()
- // Each metric point will generate one Carbon line, set up the wait
- // for all of them.
- var wg sync.WaitGroup
- wg.Add(tt.md.DataPointCount())
- go func() {
- assert.NoError(t, ln.SetDeadline(time.Now().Add(time.Second)))
- conn, err := ln.AcceptTCP()
- require.NoError(t, err)
- defer conn.Close()
+ assert.NoError(t, exp.Shutdown(context.Background()))
+ cs.shutdownAndVerify(t)
+ })
+ }
+}
- reader := bufio.NewReader(conn)
- for {
- // Actual metric validation is done by other tests, here it
- // is just flow.
- _, err := reader.ReadBytes(byte('\n'))
- if err != nil && !errors.Is(err, io.EOF) {
- assert.NoError(t, err) // Just to print any error
- }
+func TestNewConnectionPool(t *testing.T) {
+ assert.IsType(t, &nopConnPool{}, newConnPool(confignet.TCPAddrConfig{Endpoint: defaultEndpoint}, 10*time.Second, 0))
+ assert.IsType(t, &connPoolWithIdle{}, newConnPool(confignet.TCPAddrConfig{Endpoint: defaultEndpoint}, 10*time.Second, 10))
+}
- if errors.Is(err, io.EOF) {
- break
- }
- wg.Done()
- }
- }()
+func TestNopConnPool(t *testing.T) {
+ addr := testutil.GetAvailableLocalAddress(t)
+ cs := newCarbonServer(t, addr, "")
+ // Each metric point will generate one Carbon line, set up the wait
+ // for all of them.
+ cs.start(t, 2)
- <-time.After(100 * time.Millisecond)
+ cp := &nopConnPool{
+ timeout: 1 * time.Second,
+ tcpConfig: confignet.TCPAddrConfig{Endpoint: addr},
+ }
- require.NoError(t, exp.ConsumeMetrics(context.Background(), tt.md))
- assert.NoError(t, exp.Shutdown(context.Background()))
+ conn, err := cp.get()
+ require.NoError(t, err)
+ _, err = conn.Write([]byte(metricDataToPlaintext(generateSmallBatch())))
+ assert.NoError(t, err)
+ cp.put(conn)
- wg.Wait()
- })
- }
+ // Get a new connection and confirm is not the same.
+ conn2, err2 := cp.get()
+ require.NoError(t, err2)
+ assert.NotSame(t, conn, conn2)
+ _, err = conn2.Write([]byte(metricDataToPlaintext(generateSmallBatch())))
+ assert.NoError(t, err)
+ cp.put(conn2)
+
+ require.NoError(t, cp.close())
+ cs.shutdownAndVerify(t)
}
-// Other tests didn't for the concurrency aspect of connPool, this test
-// is designed to force that.
-func Test_connPool_Concurrency(t *testing.T) {
- if runtime.GOOS == "windows" {
- t.Skip("skipping test on windows, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/10147")
- }
+func TestConnPoolWithIdle(t *testing.T) {
addr := testutil.GetAvailableLocalAddress(t)
- laddr, err := net.ResolveTCPAddr("tcp", addr)
- require.NoError(t, err)
- ln, err := net.ListenTCP("tcp", laddr)
- require.NoError(t, err)
- defer ln.Close()
+ cs := newCarbonServer(t, addr, "")
+ // Each metric point will generate one Carbon line, set up the wait
+ // for all of them.
+ cs.start(t, 2)
- startCh := make(chan struct{})
+ cp := &connPoolWithIdle{
+ timeout: 1 * time.Second,
+ tcpConfig: confignet.TCPAddrConfig{Endpoint: addr},
+ maxIdleConns: 4,
+ }
- cp := newTCPConnPool(addr, 500*time.Millisecond)
- sender := carbonSender{connPool: cp}
- ctx := context.Background()
- md := generateLargeBatch()
- concurrentWriters := 3
- writesPerRoutine := 3
+ conn, err := cp.get()
+ require.NoError(t, err)
+ _, err = conn.Write([]byte(metricDataToPlaintext(generateSmallBatch())))
+ assert.NoError(t, err)
+ cp.put(conn)
- doneFlag := &atomic.Bool{}
- defer func() {
- doneFlag.Store(true)
- }()
+ // Get a new connection and confirm it is the same as the first one.
+ conn2, err2 := cp.get()
+ require.NoError(t, err2)
+ assert.Same(t, conn, conn2)
+ _, err = conn2.Write([]byte(metricDataToPlaintext(generateSmallBatch())))
+ assert.NoError(t, err)
+ cp.put(conn2)
- var recvWG sync.WaitGroup
- recvWG.Add(concurrentWriters * writesPerRoutine * md.MetricCount())
- go func() {
- for {
- conn, err := ln.AcceptTCP()
- if doneFlag.Load() {
- // Close is expected to cause error.
- return
- }
- require.NoError(t, err)
- go func(conn *net.TCPConn) {
- defer conn.Close()
+ require.NoError(t, cp.close())
+ cs.shutdownAndVerify(t)
+}
- reader := bufio.NewReader(conn)
- for {
- // Actual metric validation is done by other tests, here it
- // is just flow.
- _, err := reader.ReadBytes(byte('\n'))
- if err != nil && !errors.Is(err, io.EOF) {
- assert.NoError(t, err) // Just to print any error
- }
+func TestConnPoolWithIdleMaxConnections(t *testing.T) {
+ addr := testutil.GetAvailableLocalAddress(t)
+ cs := newCarbonServer(t, addr, "")
+ const maxIdleConns = 4
+ // Each metric point will generate one Carbon line, set up the wait
+ // for all of them.
+ cs.start(t, maxIdleConns+1)
- if errors.Is(err, io.EOF) {
- break
- }
- recvWG.Done()
- }
- }(conn)
+ cp := &connPoolWithIdle{
+ timeout: 1 * time.Second,
+ tcpConfig: confignet.TCPAddrConfig{Endpoint: addr},
+ maxIdleConns: maxIdleConns,
+ }
+
+ // Create connections and
+ var conns []net.Conn
+ for i := 0; i < maxIdleConns; i++ {
+ conn, err := cp.get()
+ require.NoError(t, err)
+ conns = append(conns, conn)
+ if i != 0 {
+ assert.NotSame(t, conn, conns[i-1])
}
- }()
- var writersWG sync.WaitGroup
- for i := 0; i < concurrentWriters; i++ {
- writersWG.Add(1)
- go func() {
- <-startCh
- for i := 0; i < writesPerRoutine; i++ {
- assert.NoError(t, sender.pushMetricsData(ctx, md))
- }
- writersWG.Done()
- }()
+ }
+ for _, conn := range conns {
+ cp.put(conn)
}
- close(startCh) // Release all workers
- writersWG.Wait()
- assert.NoError(t, sender.Shutdown(context.Background()))
+ for i := 0; i < maxIdleConns+1; i++ {
+ conn, err := cp.get()
+ require.NoError(t, err)
+ _, err = conn.Write([]byte(metricDataToPlaintext(generateSmallBatch())))
+ assert.NoError(t, err)
+ if i != maxIdleConns {
+ assert.Same(t, conn, conns[maxIdleConns-i-1])
+ } else {
+ // this should be a new connection
+ for _, cachedConn := range conns {
+ assert.NotSame(t, conn, cachedConn)
+ }
+ cp.put(conn)
+ }
+ }
+ for _, conn := range conns {
+ cp.put(conn)
+ }
+ require.NoError(t, cp.close())
+ cs.shutdownAndVerify(t)
+}
- recvWG.Wait()
+func generateSmallBatch() pmetric.Metrics {
+ return generateMetricsBatch(1)
}
func generateLargeBatch() pmetric.Metrics {
+ return generateMetricsBatch(1024)
+}
+
+func generateMetricsBatch(size int) pmetric.Metrics {
ts := time.Now()
metrics := pmetric.NewMetrics()
rm := metrics.ResourceMetrics().AppendEmpty()
- rm.Resource().Attributes().PutStr(conventions.AttributeServiceName, "test_carbon")
+ rm.Resource().Attributes().PutStr(conventions.AttributeServiceName, "carbon")
ms := rm.ScopeMetrics().AppendEmpty().Metrics()
- for i := 0; i < 65000; i++ {
+ for i := 0; i < size; i++ {
m := ms.AppendEmpty()
m.SetName("test_" + strconv.Itoa(i))
dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
- dp.Attributes().PutStr("k0", "v0")
- dp.Attributes().PutStr("k1", "v1")
+ dp.Attributes().PutStr("key_0", "value_0")
+ dp.Attributes().PutStr("key_1", "value_1")
+ dp.Attributes().PutStr("key_2", "value_2")
dp.SetTimestamp(pcommon.NewTimestampFromTime(ts))
dp.SetIntValue(int64(i))
}
return metrics
}
+
+type carbonServer struct {
+ ln *net.TCPListener
+ doneServer *atomic.Bool
+ wg sync.WaitGroup
+ expectedContainsValue string
+}
+
+func newCarbonServer(t *testing.T, addr string, expectedContainsValue string) *carbonServer {
+ laddr, err := net.ResolveTCPAddr("tcp", addr)
+ require.NoError(t, err)
+ ln, err := net.ListenTCP("tcp", laddr)
+ require.NoError(t, err)
+ return &carbonServer{
+ ln: ln,
+ doneServer: &atomic.Bool{},
+ expectedContainsValue: expectedContainsValue,
+ }
+}
+
+func (cs *carbonServer) start(t *testing.T, numExpectedReq int) {
+ cs.wg.Add(numExpectedReq)
+ go func() {
+ for {
+ conn, err := cs.ln.Accept()
+ if cs.doneServer.Load() {
+ // Close is expected to cause error.
+ return
+ }
+ require.NoError(t, err)
+ go func(conn net.Conn) {
+ defer func() {
+ require.NoError(t, conn.Close())
+ }()
+
+ reader := bufio.NewReader(conn)
+ for {
+ buf, err := reader.ReadBytes(byte('\n'))
+ if errors.Is(err, io.EOF) {
+ return
+ }
+ require.NoError(t, err)
+
+ if cs.expectedContainsValue != "" {
+ assert.Contains(t, string(buf), cs.expectedContainsValue)
+ }
+
+ cs.wg.Done()
+ }
+ }(conn)
+ }
+ }()
+ <-time.After(100 * time.Millisecond)
+}
+
+func (cs *carbonServer) shutdownAndVerify(t *testing.T) {
+ cs.wg.Wait()
+ cs.doneServer.Store(true)
+ require.NoError(t, cs.ln.Close())
+}
diff --git a/exporter/carbonexporter/factory.go b/exporter/carbonexporter/factory.go
index 87d5666332e4..687d5dd6d707 100644
--- a/exporter/carbonexporter/factory.go
+++ b/exporter/carbonexporter/factory.go
@@ -7,11 +7,19 @@ import (
"context"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/confignet"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter/internal/metadata"
)
+// Defaults for not specified configuration settings.
+const (
+ defaultEndpoint = "localhost:2003"
+)
+
// NewFactory creates a factory for Carbon exporter.
func NewFactory() exporter.Factory {
return exporter.NewFactory(
@@ -22,17 +30,22 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
- Endpoint: DefaultEndpoint,
- Timeout: DefaultSendTimeout,
+ TCPAddrConfig: confignet.TCPAddrConfig{
+ Endpoint: defaultEndpoint,
+ },
+ MaxIdleConns: 100,
+ TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
+ QueueConfig: exporterhelper.NewDefaultQueueSettings(),
+ RetryConfig: configretry.NewDefaultBackOffConfig(),
}
}
func createMetricsExporter(
- _ context.Context,
+ ctx context.Context,
params exporter.CreateSettings,
config component.Config,
) (exporter.Metrics, error) {
- exp, err := newCarbonExporter(config.(*Config), params)
+ exp, err := newCarbonExporter(ctx, config.(*Config), params)
if err != nil {
return nil, err
diff --git a/exporter/carbonexporter/generated_component_test.go b/exporter/carbonexporter/generated_component_test.go
new file mode 100644
index 000000000000..7a02d6c0c47e
--- /dev/null
+++ b/exporter/carbonexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package carbonexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/carbonexporter/go.mod b/exporter/carbonexporter/go.mod
index 4d10d586d507..cd83a9095b80 100644
--- a/exporter/carbonexporter/go.mod
+++ b/exporter/carbonexporter/go.mod
@@ -1,51 +1,66 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confignet v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/multierr v1.11.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
@@ -56,3 +71,13 @@ retract (
v0.76.1
v0.65.0
)
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry => ../../pkg/resourcetotelemetry
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal => ../../internal/coreinternal
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil => ../../pkg/pdatautil
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest => ../../pkg/pdatatest
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../pkg/golden
diff --git a/exporter/carbonexporter/go.sum b/exporter/carbonexporter/go.sum
index 792b863de05a..f49795c08ae1 100644
--- a/exporter/carbonexporter/go.sum
+++ b/exporter/carbonexporter/go.sum
@@ -1,52 +1,30 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -57,15 +35,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -75,103 +52,92 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -179,38 +145,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/carbonexporter/internal/metadata/generated_status.go b/exporter/carbonexporter/internal/metadata/generated_status.go
index 6dbde87f829a..179008e092b6 100644
--- a/exporter/carbonexporter/internal/metadata/generated_status.go
+++ b/exporter/carbonexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("carbon")
)
const (
- Type = "carbon"
MetricsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/carbon")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/carbon")
+}
diff --git a/exporter/carbonexporter/metadata.yaml b/exporter/carbonexporter/metadata.yaml
index 2985110e616b..095bd468b687 100644
--- a/exporter/carbonexporter/metadata.yaml
+++ b/exporter/carbonexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: carbon
+scope_name: otelcol/carbon
status:
class: exporter
stability:
beta: [metrics]
- distributions: [contrib, observiq, sumo]
+ distributions: [contrib]
codeowners:
active: [aboguszewski-sumo]
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/carbonexporter/metricdata_to_plaintext.go b/exporter/carbonexporter/metricdata_to_plaintext.go
index cf9694bd7f29..29d5f1d5b40e 100644
--- a/exporter/carbonexporter/metricdata_to_plaintext.go
+++ b/exporter/carbonexporter/metricdata_to_plaintext.go
@@ -4,8 +4,10 @@
package carbonexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/carbonexporter"
import (
+ "bytes"
"strconv"
"strings"
+ "sync"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
@@ -16,10 +18,11 @@ const (
sanitizedRune = '_'
// Tag related constants per Carbon plaintext protocol.
- tagPrefix = ";"
- tagKeyValueSeparator = "="
- tagValueEmptyPlaceholder = ""
- tagValueNotSetPlaceholder = ""
+ tagPrefix = ";"
+ tagKeyValueSeparator = "="
+ tagValueEmptyPlaceholder = ""
+ tagLineEmptySpace = " "
+ tagLineNewLine = "\n"
// Constants used when converting from distribution metrics to Carbon format.
distributionBucketSuffix = ".bucket"
@@ -40,6 +43,13 @@ const (
infinityCarbonValue = "inf"
)
+var writerPool = sync.Pool{
+ New: func() any {
+ // Start with a buffer of 1KB.
+ return bytes.NewBuffer(make([]byte, 0, 1024))
+ },
+}
+
// metricDataToPlaintext converts internal metrics data to the Carbon plaintext
// format as defined in https://graphite.readthedocs.io/en/latest/feeding-carbon.html#the-plaintext-protocol)
// and https://graphite.readthedocs.io/en/latest/tags.html#carbon. See details
@@ -74,7 +84,9 @@ func metricDataToPlaintext(md pmetric.Metrics) string {
return ""
}
- var sb strings.Builder
+ buf := writerPool.Get().(*bytes.Buffer)
+ buf.Reset()
+ defer writerPool.Put(buf)
for i := 0; i < md.ResourceMetrics().Len(); i++ {
rm := md.ResourceMetrics().At(i)
@@ -88,32 +100,38 @@ func metricDataToPlaintext(md pmetric.Metrics) string {
}
switch metric.Type() {
case pmetric.MetricTypeGauge:
- formatNumberDataPoints(&sb, metric.Name(), metric.Gauge().DataPoints())
+ writeNumberDataPoints(buf, metric.Name(), metric.Gauge().DataPoints())
case pmetric.MetricTypeSum:
- formatNumberDataPoints(&sb, metric.Name(), metric.Sum().DataPoints())
+ writeNumberDataPoints(buf, metric.Name(), metric.Sum().DataPoints())
case pmetric.MetricTypeHistogram:
- formatHistogramDataPoints(&sb, metric.Name(), metric.Histogram().DataPoints())
+ formatHistogramDataPoints(buf, metric.Name(), metric.Histogram().DataPoints())
case pmetric.MetricTypeSummary:
- formatSummaryDataPoints(&sb, metric.Name(), metric.Summary().DataPoints())
+ formatSummaryDataPoints(buf, metric.Name(), metric.Summary().DataPoints())
}
}
}
}
- return sb.String()
+ return buf.String()
}
-func formatNumberDataPoints(sb *strings.Builder, metricName string, dps pmetric.NumberDataPointSlice) {
+func writeNumberDataPoints(buf *bytes.Buffer, metricName string, dps pmetric.NumberDataPointSlice) {
for i := 0; i < dps.Len(); i++ {
dp := dps.At(i)
var valueStr string
switch dp.ValueType() {
+ case pmetric.NumberDataPointValueTypeEmpty:
+ continue // skip this data point - otherwise an empty string will be used as the value and the backend will use the timestamp as the metric value
case pmetric.NumberDataPointValueTypeInt:
valueStr = formatInt64(dp.IntValue())
case pmetric.NumberDataPointValueTypeDouble:
valueStr = formatFloatForValue(dp.DoubleValue())
}
- sb.WriteString(buildLine(buildPath(metricName, dp.Attributes()), valueStr, formatTimestamp(dp.Timestamp())))
+ writeLine(
+ buf,
+ buildPath(metricName, dp.Attributes()),
+ valueStr,
+ formatTimestamp(dp.Timestamp()))
}
}
@@ -132,7 +150,7 @@ func formatNumberDataPoints(sb *strings.Builder, metricName string, dps pmetric.
// that bucket. This metric specifies the number of events with a value that is
// less than or equal to the upper bound.
func formatHistogramDataPoints(
- sb *strings.Builder,
+ buf *bytes.Buffer,
metricName string,
dps pmetric.HistogramDataPointSlice,
) {
@@ -140,7 +158,7 @@ func formatHistogramDataPoints(
dp := dps.At(i)
timestampStr := formatTimestamp(dp.Timestamp())
- formatCountAndSum(sb, metricName, dp.Attributes(), dp.Count(), dp.Sum(), timestampStr)
+ formatCountAndSum(buf, metricName, dp.Attributes(), dp.Count(), dp.Sum(), timestampStr)
if dp.ExplicitBounds().Len() == 0 {
continue
}
@@ -154,7 +172,11 @@ func formatHistogramDataPoints(
bucketPath := buildPath(metricName+distributionBucketSuffix, dp.Attributes())
for j := 0; j < dp.BucketCounts().Len(); j++ {
- sb.WriteString(buildLine(bucketPath+distributionUpperBoundTagBeforeValue+carbonBounds[j], formatUint64(dp.BucketCounts().At(j)), timestampStr))
+ writeLine(
+ buf,
+ bucketPath+distributionUpperBoundTagBeforeValue+carbonBounds[j],
+ formatUint64(dp.BucketCounts().At(j)),
+ timestampStr)
}
}
}
@@ -172,7 +194,7 @@ func formatHistogramDataPoints(
// 3. Each quantile is represented by a metric named ".quantile"
// and will include a tag key "quantile" that specifies the quantile value.
func formatSummaryDataPoints(
- sb *strings.Builder,
+ buf *bytes.Buffer,
metricName string,
dps pmetric.SummaryDataPointSlice,
) {
@@ -180,7 +202,7 @@ func formatSummaryDataPoints(
dp := dps.At(i)
timestampStr := formatTimestamp(dp.Timestamp())
- formatCountAndSum(sb, metricName, dp.Attributes(), dp.Count(), dp.Sum(), timestampStr)
+ formatCountAndSum(buf, metricName, dp.Attributes(), dp.Count(), dp.Sum(), timestampStr)
if dp.QuantileValues().Len() == 0 {
continue
@@ -188,10 +210,11 @@ func formatSummaryDataPoints(
quantilePath := buildPath(metricName+summaryQuantileSuffix, dp.Attributes())
for j := 0; j < dp.QuantileValues().Len(); j++ {
- sb.WriteString(buildLine(
+ writeLine(
+ buf,
quantilePath+summaryQuantileTagBeforeValue+formatFloatForLabel(dp.QuantileValues().At(j).Quantile()*100),
formatFloatForValue(dp.QuantileValues().At(j).Value()),
- timestampStr))
+ timestampStr)
}
}
}
@@ -204,21 +227,25 @@ func formatSummaryDataPoints(
//
// 2. The total sum will be represented by a metruc with the original "".
func formatCountAndSum(
- sb *strings.Builder,
+ buf *bytes.Buffer,
metricName string,
attributes pcommon.Map,
count uint64,
sum float64,
timestampStr string,
) {
- // Build count and sum metrics.
- countPath := buildPath(metricName+countSuffix, attributes)
- valueStr := formatUint64(count)
- sb.WriteString(buildLine(countPath, valueStr, timestampStr))
-
- sumPath := buildPath(metricName, attributes)
- valueStr = formatFloatForValue(sum)
- sb.WriteString(buildLine(sumPath, valueStr, timestampStr))
+ // Write count and sum metrics.
+ writeLine(
+ buf,
+ buildPath(metricName+countSuffix, attributes),
+ formatUint64(count),
+ timestampStr)
+
+ writeLine(
+ buf,
+ buildPath(metricName, attributes),
+ formatFloatForValue(sum),
+ timestampStr)
}
// buildPath is used to build the per description above.
@@ -227,25 +254,35 @@ func buildPath(name string, attributes pcommon.Map) string {
return name
}
- var sb strings.Builder
- sb.WriteString(name)
+ buf := writerPool.Get().(*bytes.Buffer)
+ buf.Reset()
+ defer writerPool.Put(buf)
+ buf.WriteString(name)
attributes.Range(func(k string, v pcommon.Value) bool {
value := v.AsString()
if value == "" {
value = tagValueEmptyPlaceholder
}
- sb.WriteString(tagPrefix + sanitizeTagKey(k) + tagKeyValueSeparator + value)
+ buf.WriteString(tagPrefix)
+ buf.WriteString(sanitizeTagKey(k))
+ buf.WriteString(tagKeyValueSeparator)
+ buf.WriteString(value)
return true
})
- return sb.String()
+ return buf.String()
}
-// buildLine builds a single Carbon metric textual line, ie.: it already adds
+// writeLine builds a single Carbon metric textual line, ie.: it already adds
// a new-line character at the end of the string.
-func buildLine(path, value, timestamp string) string {
- return path + " " + value + " " + timestamp + "\n"
+func writeLine(buf *bytes.Buffer, path, value, timestamp string) {
+ buf.WriteString(path)
+ buf.WriteString(tagLineEmptySpace)
+ buf.WriteString(value)
+ buf.WriteString(tagLineEmptySpace)
+ buf.WriteString(timestamp)
+ buf.WriteString(tagLineNewLine)
}
// sanitizeTagKey removes any invalid character from the tag key, the invalid
diff --git a/exporter/carbonexporter/metricdata_to_plaintext_test.go b/exporter/carbonexporter/metricdata_to_plaintext_test.go
index 1fb08ccd9637..b1910334c3aa 100644
--- a/exporter/carbonexporter/metricdata_to_plaintext_test.go
+++ b/exporter/carbonexporter/metricdata_to_plaintext_test.go
@@ -113,8 +113,6 @@ func TestBuildPath(t *testing.T) {
}
func TestToPlaintext(t *testing.T) {
- expectedTagsCombinations := []string{";k0=v0;k1=v1", ";k1=v1;k0=v0"}
-
unixSecs := int64(1574092046)
expectedUnixSecsStr := strconv.FormatInt(unixSecs, 10)
unixNSecs := int64(11 * time.Millisecond)
@@ -135,13 +133,13 @@ func TestToPlaintext(t *testing.T) {
summaryQuantiles := []float64{90, 95, 99, 99.9}
summaryQuantileValues := []float64{100, 6, 4, 1}
tests := []struct {
- name string
- metricsDataFn func() pmetric.Metrics
- wantLines []string
- wantLinesCount int
+ name string
+ metricsDataFn func() pmetric.Metrics
+ wantLines []string
+ wantExtraLinesCount int
}{
{
- name: "no_dims",
+ name: "gauge",
metricsDataFn: func() pmetric.Metrics {
md := pmetric.NewMetrics()
ms := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics()
@@ -153,46 +151,45 @@ func TestToPlaintext(t *testing.T) {
dps2 := ms.At(1).SetEmptyGauge().DataPoints()
dps2.AppendEmpty().SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
dps2.At(0).SetIntValue(int64Val)
-
- ms.AppendEmpty().SetName("cumulative_double_no_dims")
- ms.At(2).SetEmptySum().SetIsMonotonic(true)
- dps3 := ms.At(2).Sum().DataPoints()
+ ms.AppendEmpty().SetName("gauge_double_with_dims")
+ dps3 := ms.At(2).SetEmptyGauge().DataPoints()
dps3.AppendEmpty().SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
+ dps3.At(0).Attributes().PutStr("k0", "v0")
+ dps3.At(0).Attributes().PutStr("k1", "v1")
dps3.At(0).SetDoubleValue(doubleVal)
- ms.AppendEmpty().SetName("cumulative_int_no_dims")
- ms.At(3).SetEmptySum().SetIsMonotonic(true)
- dps4 := ms.At(3).Sum().DataPoints()
+ ms.AppendEmpty().SetName("gauge_int_with_dims")
+ dps4 := ms.At(3).SetEmptyGauge().DataPoints()
dps4.AppendEmpty().SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
+ dps4.At(0).Attributes().PutStr("k0", "v0")
+ dps4.At(0).Attributes().PutStr("k1", "v1")
dps4.At(0).SetIntValue(int64Val)
+ ms.AppendEmpty().SetName("gauge_no_value")
+ dps5 := ms.At(4).SetEmptyGauge().DataPoints()
+ dps5.AppendEmpty().SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
return md
-
},
wantLines: []string{
"gauge_double_no_dims " + expectedDobuleValStr + " " + expectedUnixSecsStr,
"gauge_int_no_dims " + expectedInt64ValStr + " " + expectedUnixSecsStr,
- "cumulative_double_no_dims " + expectedDobuleValStr + " " + expectedUnixSecsStr,
- "cumulative_int_no_dims " + expectedInt64ValStr + " " + expectedUnixSecsStr,
+ "gauge_double_with_dims;k0=v0;k1=v1 " + expectedDobuleValStr + " " + expectedUnixSecsStr,
+ "gauge_int_with_dims;k0=v0;k1=v1 " + expectedInt64ValStr + " " + expectedUnixSecsStr,
},
- wantLinesCount: 4,
},
{
- name: "with_dims",
+ name: "cumulative_monotonic_sum",
metricsDataFn: func() pmetric.Metrics {
md := pmetric.NewMetrics()
ms := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics()
- ms.AppendEmpty().SetName("gauge_double_with_dims")
- dps1 := ms.At(0).SetEmptyGauge().DataPoints()
+ ms.AppendEmpty().SetName("cumulative_double_no_dims")
+ ms.At(0).SetEmptySum().SetIsMonotonic(true)
+ dps1 := ms.At(0).Sum().DataPoints()
dps1.AppendEmpty().SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
- dps1.At(0).Attributes().PutStr("k1", "v1")
- dps1.At(0).Attributes().PutStr("k0", "v0")
dps1.At(0).SetDoubleValue(doubleVal)
- ms.AppendEmpty().SetName("gauge_int_with_dims")
- dps2 := ms.At(1).SetEmptyGauge().DataPoints()
+ ms.AppendEmpty().SetName("cumulative_int_no_dims")
+ ms.At(1).SetEmptySum().SetIsMonotonic(true)
+ dps2 := ms.At(1).Sum().DataPoints()
dps2.AppendEmpty().SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
- dps2.At(0).Attributes().PutStr("k0", "v0")
- dps2.At(0).Attributes().PutStr("k1", "v1")
dps2.At(0).SetIntValue(int64Val)
-
ms.AppendEmpty().SetName("cumulative_double_with_dims")
ms.At(2).SetEmptySum().SetIsMonotonic(true)
dps3 := ms.At(2).Sum().DataPoints()
@@ -207,24 +204,21 @@ func TestToPlaintext(t *testing.T) {
dps4.At(0).Attributes().PutStr("k0", "v0")
dps4.At(0).Attributes().PutStr("k1", "v1")
dps4.At(0).SetIntValue(int64Val)
+ ms.AppendEmpty().SetName("cumulative_no_value")
+ ms.At(4).SetEmptySum().SetIsMonotonic(true)
+ dps5 := ms.At(4).Sum().DataPoints()
+ dps5.AppendEmpty().SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
return md
},
- wantLines: func() []string {
- combinations := make([]string, 0, 4*len(expectedTagsCombinations))
- for _, tags := range expectedTagsCombinations {
- combinations = append(combinations,
- "gauge_double_with_dims"+tags+" "+expectedDobuleValStr+" "+expectedUnixSecsStr,
- "gauge_int_with_dims"+tags+" "+expectedInt64ValStr+" "+expectedUnixSecsStr,
- "cumulative_double_with_dims"+tags+" "+expectedDobuleValStr+" "+expectedUnixSecsStr,
- "cumulative_int_with_dims"+tags+" "+expectedInt64ValStr+" "+expectedUnixSecsStr,
- )
- }
- return combinations
- }(),
- wantLinesCount: 4,
+ wantLines: []string{
+ "cumulative_double_no_dims " + expectedDobuleValStr + " " + expectedUnixSecsStr,
+ "cumulative_int_no_dims " + expectedInt64ValStr + " " + expectedUnixSecsStr,
+ "cumulative_double_with_dims;k0=v0;k1=v1 " + expectedDobuleValStr + " " + expectedUnixSecsStr,
+ "cumulative_int_with_dims;k0=v0;k1=v1 " + expectedInt64ValStr + " " + expectedUnixSecsStr,
+ },
},
{
- name: "distributions",
+ name: "histogram",
metricsDataFn: func() pmetric.Metrics {
md := pmetric.NewMetrics()
ms := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics()
@@ -232,7 +226,8 @@ func TestToPlaintext(t *testing.T) {
ms.At(0).SetEmptyHistogram().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative)
dp := ms.At(0).SetEmptyHistogram().DataPoints().AppendEmpty()
dp.SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
- assert.NoError(t, dp.Attributes().FromRaw(map[string]any{"k0": "v0", "k1": "v1"}))
+ dp.Attributes().PutStr("k0", "v0")
+ dp.Attributes().PutStr("k1", "v1")
dp.SetCount(distributionCount)
dp.SetSum(distributionSum)
dp.ExplicitBounds().FromRaw(distributionBounds)
@@ -240,12 +235,11 @@ func TestToPlaintext(t *testing.T) {
return md
},
wantLines: expectedDistributionLines(
- "distrib", expectedTagsCombinations, expectedUnixSecsStr,
+ "distrib", ";k0=v0;k1=v1", expectedUnixSecsStr,
distributionSum,
distributionCount,
distributionBounds,
distributionCounts),
- wantLinesCount: 6,
},
{
name: "summary",
@@ -255,7 +249,8 @@ func TestToPlaintext(t *testing.T) {
ms.AppendEmpty().SetName("summary")
dp := ms.At(0).SetEmptySummary().DataPoints().AppendEmpty()
dp.SetTimestamp(pcommon.NewTimestampFromTime(tsUnix))
- assert.NoError(t, dp.Attributes().FromRaw(map[string]any{"k0": "v0", "k1": "v1"}))
+ dp.Attributes().PutStr("k0", "v0")
+ dp.Attributes().PutStr("k1", "v1")
dp.SetCount(summaryCount)
dp.SetSum(summarySum)
for i := range summaryQuantiles {
@@ -266,12 +261,11 @@ func TestToPlaintext(t *testing.T) {
return md
},
wantLines: expectedSummaryLines(
- "summary", expectedTagsCombinations, expectedUnixSecsStr,
+ "summary", ";k0=v0;k1=v1", expectedUnixSecsStr,
summarySum,
summaryCount,
summaryQuantiles,
summaryQuantileValues),
- wantLinesCount: 6,
},
}
for _, tt := range tests {
@@ -279,7 +273,7 @@ func TestToPlaintext(t *testing.T) {
gotLines := metricDataToPlaintext(tt.metricsDataFn())
got := strings.Split(gotLines, "\n")
got = got[:len(got)-1]
- assert.Equal(t, tt.wantLinesCount, len(got))
+ assert.Len(t, got, len(tt.wantLines)+tt.wantExtraLinesCount)
assert.Subset(t, tt.wantLines, got)
})
}
@@ -287,7 +281,7 @@ func TestToPlaintext(t *testing.T) {
func expectedDistributionLines(
metricName string,
- tagsCombinations []string,
+ tags string,
timestampStr string,
sum float64,
count uint64,
@@ -295,23 +289,22 @@ func expectedDistributionLines(
counts []uint64,
) []string {
var lines []string
- for _, tags := range tagsCombinations {
+ lines = append(lines,
+ metricName+".count"+tags+" "+formatInt64(int64(count))+" "+timestampStr,
+ metricName+tags+" "+formatFloatForLabel(sum)+" "+timestampStr,
+ metricName+".bucket"+tags+";upper_bound=inf "+formatInt64(int64(counts[len(bounds)]))+" "+timestampStr,
+ )
+ for i, bound := range bounds {
lines = append(lines,
- metricName+".count"+tags+" "+formatInt64(int64(count))+" "+timestampStr,
- metricName+tags+" "+formatFloatForLabel(sum)+" "+timestampStr,
- metricName+".bucket"+tags+";upper_bound=inf "+formatInt64(int64(counts[len(bounds)]))+" "+timestampStr,
- )
- for i, bound := range bounds {
- lines = append(lines,
- metricName+".bucket"+tags+";upper_bound="+formatFloatForLabel(bound)+" "+formatInt64(int64(counts[i]))+" "+timestampStr)
- }
+ metricName+".bucket"+tags+";upper_bound="+formatFloatForLabel(bound)+" "+formatInt64(int64(counts[i]))+" "+timestampStr)
}
+
return lines
}
func expectedSummaryLines(
metricName string,
- tagsCombinations []string,
+ tags string,
timestampStr string,
sum float64,
count uint64,
@@ -319,15 +312,22 @@ func expectedSummaryLines(
summaryQuantileValues []float64,
) []string {
var lines []string
- for _, tags := range tagsCombinations {
+ lines = append(lines,
+ metricName+".count"+tags+" "+formatInt64(int64(count))+" "+timestampStr,
+ metricName+tags+" "+formatFloatForValue(sum)+" "+timestampStr,
+ )
+ for i := range summaryQuantiles {
lines = append(lines,
- metricName+".count"+tags+" "+formatInt64(int64(count))+" "+timestampStr,
- metricName+tags+" "+formatFloatForValue(sum)+" "+timestampStr,
- )
- for i := range summaryQuantiles {
- lines = append(lines,
- metricName+".quantile"+tags+";quantile="+formatFloatForLabel(summaryQuantiles[i])+" "+formatFloatForValue(summaryQuantileValues[i])+" "+timestampStr)
- }
+ metricName+".quantile"+tags+";quantile="+formatFloatForLabel(summaryQuantiles[i])+" "+formatFloatForValue(summaryQuantileValues[i])+" "+timestampStr)
}
return lines
}
+
+func BenchmarkConsumeMetricsDefault(b *testing.B) {
+ md := generateSmallBatch()
+ b.ResetTimer()
+ b.ReportAllocs()
+ for n := 0; n < b.N; n++ {
+ assert.Len(b, metricDataToPlaintext(md), 62)
+ }
+}
diff --git a/exporter/carbonexporter/package_test.go b/exporter/carbonexporter/package_test.go
new file mode 100644
index 000000000000..0dcd0a5f369d
--- /dev/null
+++ b/exporter/carbonexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package carbonexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/carbonexporter/testdata/config.yaml b/exporter/carbonexporter/testdata/config.yaml
index 991b655ea415..a0d330fbf595 100644
--- a/exporter/carbonexporter/testdata/config.yaml
+++ b/exporter/carbonexporter/testdata/config.yaml
@@ -4,7 +4,21 @@ carbon/allsettings:
# use endpoint to specify alternative destinations for the exporter,
# the default is localhost:2003
endpoint: localhost:8080
+ max_idle_conns: 15
# timeout is the maximum duration allowed to connecting and sending the
# data to the Carbon/Graphite backend.
# The default is 5 seconds.
timeout: 10s
+ sending_queue:
+ enabled: true
+ num_consumers: 2
+ queue_size: 10
+ retry_on_failure:
+ enabled: true
+ initial_interval: 10s
+ randomization_factor: 0.7
+ multiplier: 3.14
+ max_interval: 60s
+ max_elapsed_time: 10m
+ resource_to_telemetry_conversion:
+ enabled: true
diff --git a/exporter/cassandraexporter/README.md b/exporter/cassandraexporter/README.md
index 1efd9cd72805..3795554f2874 100644
--- a/exporter/cassandraexporter/README.md
+++ b/exporter/cassandraexporter/README.md
@@ -18,12 +18,14 @@ The following settings can be optionally configured:
- `dsn` The Cassandra server DSN (Data Source Name), for example `127.0.0.1`.
reference: [https://pkg.go.dev/github.com/gocql/gocql](https://pkg.go.dev/github.com/gocql/gocql)
-- `port` (default = 9042) The Cassandra server Port
+- `port` (default = 9042): The Cassandra server port
+- `timeout` (default = 10s): The Cassandra server connection timeout
- `keyspace` (default = otel): The keyspace name.
- `trace_table` (default = otel_spans): The table name for traces.
-- `replication` (default = class: SimpleStrategy, replication_factor: 1) The strategy of
+- `replication` (default = class: SimpleStrategy, replication_factor: 1): The strategy of
replication. https://cassandra.apache.org/doc/4.1/cassandra/architecture/dynamo.html#replication-strategy
-- `compression` (default = LZ4Compressor) https://cassandra.apache.org/doc/latest/cassandra/operating/compression.html
+- `compression` (default = LZ4Compressor): https://cassandra.apache.org/doc/latest/cassandra/operating/compression.html
+- `auth` (default = username: "", password: "") Authorization for the Cassandra.
## Example
@@ -32,6 +34,7 @@ exporters:
cassandra:
dsn: 127.0.0.1
port: 9042
+ timeout: 10s
keyspace: "otel"
trace_table: "otel_spans"
replication:
@@ -39,4 +42,7 @@ exporters:
replication_factor: 1
compression:
algorithm: "ZstdCompressor"
+ auth:
+ username: "your-username"
+ password: "your-password"
```
diff --git a/exporter/cassandraexporter/config.go b/exporter/cassandraexporter/config.go
index b9b6bd769437..97885c9c19a4 100644
--- a/exporter/cassandraexporter/config.go
+++ b/exporter/cassandraexporter/config.go
@@ -2,15 +2,22 @@
// SPDX-License-Identifier: Apache-2.0
package cassandraexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter"
+import (
+ "time"
+
+ "go.opentelemetry.io/collector/config/configopaque"
+)
type Config struct {
- DSN string `mapstructure:"dsn"`
- Port int `mapstructure:"port"`
- Keyspace string `mapstructure:"keyspace"`
- TraceTable string `mapstructure:"trace_table"`
- LogsTable string `mapstructure:"logs_table"`
- Replication Replication `mapstructure:"replication"`
- Compression Compression `mapstructure:"compression"`
+ DSN string `mapstructure:"dsn"`
+ Port int `mapstructure:"port"`
+ Timeout time.Duration `mapstructure:"timeout"`
+ Keyspace string `mapstructure:"keyspace"`
+ TraceTable string `mapstructure:"trace_table"`
+ LogsTable string `mapstructure:"logs_table"`
+ Replication Replication `mapstructure:"replication"`
+ Compression Compression `mapstructure:"compression"`
+ Auth Auth `mapstructure:"auth"`
}
type Replication struct {
@@ -21,3 +28,8 @@ type Replication struct {
type Compression struct {
Algorithm string `mapstructure:"algorithm"`
}
+
+type Auth struct {
+ UserName string `mapstructure:"username"`
+ Password configopaque.String `mapstructure:"password"`
+}
diff --git a/exporter/cassandraexporter/constants.go b/exporter/cassandraexporter/constants.go
index 75c78908c7e8..66dca7310b5a 100644
--- a/exporter/cassandraexporter/constants.go
+++ b/exporter/cassandraexporter/constants.go
@@ -5,7 +5,7 @@ package cassandraexporter // import "github.com/open-telemetry/opentelemetry-col
const (
// language=SQL
- createDatabaseSQL = `CREATE KEYSPACE %s WITH REPLICATION = { 'class' : '%s', 'replication_factor' : %d };`
+ createDatabaseSQL = `CREATE KEYSPACE IF NOT EXISTS %s WITH REPLICATION = { 'class' : '%s', 'replication_factor' : %d };`
// language=SQL
createEventTypeSQL = `CREATE TYPE IF NOT EXISTS %s.Events (Timestamp Date, Name text, Attributes map);`
// language=SQL
diff --git a/exporter/cassandraexporter/example/otel-collector-config.yml b/exporter/cassandraexporter/example/otel-collector-config.yml
index 2f674a11d282..df8253017467 100644
--- a/exporter/cassandraexporter/example/otel-collector-config.yml
+++ b/exporter/cassandraexporter/example/otel-collector-config.yml
@@ -6,6 +6,8 @@ receivers:
exporters:
cassandra:
dsn: 127.0.0.1
+ port: 9042
+ timeout: 10s
keyspace: "otel"
trace_table: "otel_spans"
logs_table: "otel_logs"
@@ -14,7 +16,6 @@ exporters:
replication_factor: 1
compression:
algorithm: "ZstdCompressor"
-
service:
pipelines:
traces:
diff --git a/exporter/cassandraexporter/exporter_logs.go b/exporter/cassandraexporter/exporter_logs.go
index 8b824829358a..dd4b97ae98b6 100644
--- a/exporter/cassandraexporter/exporter_logs.go
+++ b/exporter/cassandraexporter/exporter_logs.go
@@ -6,6 +6,7 @@ package cassandraexporter // import "github.com/open-telemetry/opentelemetry-col
import (
"context"
"encoding/json"
+ "errors"
"fmt"
"time"
@@ -23,25 +24,20 @@ type logsExporter struct {
cfg *Config
}
-func newLogsExporter(logger *zap.Logger, cfg *Config) (*logsExporter, error) {
- cluster := gocql.NewCluster(cfg.DSN)
- session, err := cluster.CreateSession()
- cluster.Keyspace = cfg.Keyspace
- cluster.Consistency = gocql.Quorum
- cluster.Port = cfg.Port
+func newLogsExporter(logger *zap.Logger, cfg *Config) *logsExporter {
- if err != nil {
- return nil, err
- }
-
- return &logsExporter{logger: logger, client: session, cfg: cfg}, nil
+ return &logsExporter{logger: logger, cfg: cfg}
}
func initializeLogKernel(cfg *Config) error {
ctx := context.Background()
- cluster := gocql.NewCluster(cfg.DSN)
+ cluster, err := newCluster(cfg)
+ if err != nil {
+ return err
+ }
cluster.Consistency = gocql.Quorum
cluster.Port = cfg.Port
+ cluster.Timeout = cfg.Timeout
session, err := cluster.CreateSession()
if err != nil {
@@ -62,7 +58,40 @@ func initializeLogKernel(cfg *Config) error {
return nil
}
+func newCluster(cfg *Config) (*gocql.ClusterConfig, error) {
+ cluster := gocql.NewCluster(cfg.DSN)
+ if cfg.Auth.UserName != "" && cfg.Auth.Password == "" {
+ return nil, errors.New("empty auth.password")
+ }
+ if cfg.Auth.Password != "" && cfg.Auth.UserName == "" {
+ return nil, errors.New("empty auth.username")
+ }
+ if cfg.Auth.UserName != "" && cfg.Auth.Password != "" {
+ cluster.Authenticator = gocql.PasswordAuthenticator{
+ Username: cfg.Auth.UserName,
+ Password: string(cfg.Auth.Password),
+ }
+ }
+ cluster.Consistency = gocql.Quorum
+ cluster.Port = cfg.Port
+ return cluster, nil
+}
+
func (e *logsExporter) Start(_ context.Context, _ component.Host) error {
+ cluster, err := newCluster(e.cfg)
+ if err != nil {
+ return err
+ }
+ cluster.Keyspace = e.cfg.Keyspace
+ cluster.Consistency = gocql.Quorum
+ cluster.Port = e.cfg.Port
+ cluster.Timeout = e.cfg.Timeout
+
+ session, err := cluster.CreateSession()
+ if err != nil {
+ return err
+ }
+ e.client = session
initializeErr := initializeLogKernel(e.cfg)
return initializeErr
}
diff --git a/exporter/cassandraexporter/exporter_logs_test.go b/exporter/cassandraexporter/exporter_logs_test.go
new file mode 100644
index 000000000000..017b14fc2346
--- /dev/null
+++ b/exporter/cassandraexporter/exporter_logs_test.go
@@ -0,0 +1,66 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package cassandraexporter
+
+import (
+ "errors"
+ "testing"
+
+ "github.com/gocql/gocql"
+ "github.com/stretchr/testify/require"
+)
+
+func TestNewCluster(t *testing.T) {
+ testCases := map[string]struct {
+ cfg *Config
+ expectedAuthenticator gocql.Authenticator
+ expectedErr error
+ }{
+ "empty_auth": {
+ cfg: withDefaultConfig(),
+ expectedAuthenticator: nil,
+ },
+ "empty_username": {
+ cfg: withDefaultConfig(func(config *Config) {
+ config.Auth.Password = "pass"
+ }),
+ expectedAuthenticator: nil,
+ expectedErr: errors.New("empty auth.username"),
+ },
+ "empty_password": {
+ cfg: withDefaultConfig(func(config *Config) {
+ config.Auth.UserName = "user"
+ }),
+ expectedAuthenticator: nil,
+ expectedErr: errors.New("empty auth.password"),
+ },
+ "success_auth": {
+ cfg: withDefaultConfig(func(config *Config) {
+ config.Auth.UserName = "user"
+ config.Auth.Password = "pass"
+ }),
+ expectedAuthenticator: gocql.PasswordAuthenticator{
+ Username: "user",
+ Password: "pass",
+ },
+ },
+ }
+ for name, test := range testCases {
+ t.Run(name, func(t *testing.T) {
+ c, err := newCluster(test.cfg)
+ if err == nil {
+ require.Equal(t, test.expectedAuthenticator, c.Authenticator)
+ }
+ require.Equal(t, test.expectedErr, err)
+ })
+ }
+}
+
+func withDefaultConfig(fns ...func(*Config)) *Config {
+ cfg := createDefaultConfig().(*Config)
+ for _, fn := range fns {
+ fn(cfg)
+ }
+ return cfg
+}
diff --git a/exporter/cassandraexporter/exporter_traces.go b/exporter/cassandraexporter/exporter_traces.go
index f8f72e342d92..9e39ba347df4 100644
--- a/exporter/cassandraexporter/exporter_traces.go
+++ b/exporter/cassandraexporter/exporter_traces.go
@@ -22,25 +22,19 @@ type tracesExporter struct {
cfg *Config
}
-func newTracesExporter(logger *zap.Logger, cfg *Config) (*tracesExporter, error) {
- cluster := gocql.NewCluster(cfg.DSN)
- session, err := cluster.CreateSession()
- cluster.Keyspace = cfg.Keyspace
- cluster.Consistency = gocql.Quorum
- cluster.Port = cfg.Port
-
- if err != nil {
- return nil, err
- }
-
- return &tracesExporter{logger: logger, client: session, cfg: cfg}, nil
+func newTracesExporter(logger *zap.Logger, cfg *Config) *tracesExporter {
+ return &tracesExporter{logger: logger, cfg: cfg}
}
func initializeTraceKernel(cfg *Config) error {
ctx := context.Background()
- cluster := gocql.NewCluster(cfg.DSN)
+ cluster, err := newCluster(cfg)
+ if err != nil {
+ return err
+ }
cluster.Consistency = gocql.Quorum
cluster.Port = cfg.Port
+ cluster.Timeout = cfg.Timeout
session, err := cluster.CreateSession()
if err != nil {
@@ -86,6 +80,20 @@ func parseCreateDatabaseSQL(cfg *Config) string {
}
func (e *tracesExporter) Start(_ context.Context, _ component.Host) error {
+ cluster, err := newCluster(e.cfg)
+ if err != nil {
+ return err
+ }
+ cluster.Keyspace = e.cfg.Keyspace
+ cluster.Consistency = gocql.Quorum
+ cluster.Port = e.cfg.Port
+ cluster.Timeout = e.cfg.Timeout
+
+ session, err := cluster.CreateSession()
+ if err != nil {
+ return err
+ }
+ e.client = session
initializeErr := initializeTraceKernel(e.cfg)
return initializeErr
}
diff --git a/exporter/cassandraexporter/factory.go b/exporter/cassandraexporter/factory.go
index 6b81592338be..1ecee18dd7f7 100644
--- a/exporter/cassandraexporter/factory.go
+++ b/exporter/cassandraexporter/factory.go
@@ -5,7 +5,7 @@ package cassandraexporter // import "github.com/open-telemetry/opentelemetry-col
import (
"context"
- "fmt"
+ "time"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/exporter"
@@ -26,6 +26,7 @@ func createDefaultConfig() component.Config {
return &Config{
DSN: "127.0.0.1",
Port: 9042,
+ Timeout: 10 * time.Second,
Keyspace: "otel",
TraceTable: "otel_spans",
LogsTable: "otel_logs",
@@ -41,22 +42,14 @@ func createDefaultConfig() component.Config {
func createTracesExporter(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (exporter.Traces, error) {
c := cfg.(*Config)
- exp, err := newTracesExporter(set.Logger, c)
-
- if err != nil {
- return nil, fmt.Errorf("cannot configure cassandra traces exporter: %w", err)
- }
+ exp := newTracesExporter(set.Logger, c)
return exporterhelper.NewTracesExporter(ctx, set, cfg, exp.pushTraceData, exporterhelper.WithShutdown(exp.Shutdown), exporterhelper.WithStart(exp.Start))
}
func createLogsExporter(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (exporter.Logs, error) {
c := cfg.(*Config)
- exp, err := newLogsExporter(set.Logger, c)
-
- if err != nil {
- return nil, fmt.Errorf("cannot configure cassandra traces exporter: %w", err)
- }
+ exp := newLogsExporter(set.Logger, c)
return exporterhelper.NewLogsExporter(ctx, set, cfg, exp.pushLogsData, exporterhelper.WithShutdown(exp.Shutdown), exporterhelper.WithStart(exp.Start))
}
diff --git a/exporter/cassandraexporter/generated_component_test.go b/exporter/cassandraexporter/generated_component_test.go
new file mode 100644
index 000000000000..3dcb72b4763c
--- /dev/null
+++ b/exporter/cassandraexporter/generated_component_test.go
@@ -0,0 +1,94 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package cassandraexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/cassandraexporter/go.mod b/exporter/cassandraexporter/go.mod
index b1c5244d1c2f..adb53f4e17fa 100644
--- a/exporter/cassandraexporter/go.mod
+++ b/exporter/cassandraexporter/go.mod
@@ -1,52 +1,65 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/cassandraexporter
-go 1.18
+go 1.21
require (
- github.com/gocql/gocql v1.3.1
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/gocql/gocql v1.6.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/cassandraexporter/go.sum b/exporter/cassandraexporter/go.sum
index f27f3a440dfb..10b66c9a628b 100644
--- a/exporter/cassandraexporter/go.sum
+++ b/exporter/cassandraexporter/go.sum
@@ -1,65 +1,41 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
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/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=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/gocql/gocql v1.3.1 h1:BTwM4rux+ah5G3oH6/MQa+tur/TDd/XAAOXDxBBs7rg=
-github.com/gocql/gocql v1.3.1/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/gocql/gocql v1.6.0 h1:IdFdOTbnpbd0pDhl4REKQDM+Q0SzKXQ1Yh+YZZ8T/qU=
+github.com/gocql/gocql v1.6.0/go.mod h1:3gM2c4D3AnkISwBxGnMMsS8Oy4y2lhbPRsH4xnJrHG8=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -68,18 +44,17 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -89,100 +64,88 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -190,40 +153,18 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/cassandraexporter/internal/metadata/generated_status.go b/exporter/cassandraexporter/internal/metadata/generated_status.go
index 1cf5068630e7..d3e3e5d3b505 100644
--- a/exporter/cassandraexporter/internal/metadata/generated_status.go
+++ b/exporter/cassandraexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("cassandra")
)
const (
- Type = "cassandra"
TracesStability = component.StabilityLevelAlpha
LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/cassandra")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/cassandra")
+}
diff --git a/exporter/cassandraexporter/metadata.yaml b/exporter/cassandraexporter/metadata.yaml
index 739ceaa6a0af..945c04a21e3d 100644
--- a/exporter/cassandraexporter/metadata.yaml
+++ b/exporter/cassandraexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: cassandra
+scope_name: otelcol/cassandra
status:
class: exporter
@@ -8,3 +9,6 @@ status:
codeowners:
active: [atoulme, emreyalvac]
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
\ No newline at end of file
diff --git a/exporter/cassandraexporter/package_test.go b/exporter/cassandraexporter/package_test.go
new file mode 100644
index 000000000000..3ff28cf1d7cc
--- /dev/null
+++ b/exporter/cassandraexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package cassandraexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/cassandraexporter/testdata/config.yaml b/exporter/cassandraexporter/testdata/config.yaml
index 73d964723cbf..0c85ea02fb9b 100644
--- a/exporter/cassandraexporter/testdata/config.yaml
+++ b/exporter/cassandraexporter/testdata/config.yaml
@@ -2,6 +2,7 @@ cassandra:
dsn: 127.0.0.1
keyspace: "otel"
trace_table: "otel_spans"
+ timeout: 10s
logs_table: "otel_logs"
replication:
class: "SimpleStrategy"
diff --git a/exporter/clickhouseexporter/Makefile b/exporter/clickhouseexporter/Makefile
index b25a796464ef..f462514a2d6c 100644
--- a/exporter/clickhouseexporter/Makefile
+++ b/exporter/clickhouseexporter/Makefile
@@ -1,8 +1,8 @@
include ../../Makefile.Common
local-run-example:
- cd ../../ && GOOS=linux go build -o ./local/otelcontribcol ./cmd/otelcontribcol
+ cd ../../cmd/otelcontribcol && GOOS=linux go build -o ../../local/otelcontribcol
cd example && docker-compose up -d
recreate-otel-collector:
- cd ../../ && GOOS=linux go build -o ./local/otelcontribcol ./cmd/otelcontribcol
+ cd ../../ && make otelcontribcol
cd example && docker-compose up --build otelcollector
diff --git a/exporter/clickhouseexporter/README.md b/exporter/clickhouseexporter/README.md
index a351eebd12f2..881a83571039 100644
--- a/exporter/clickhouseexporter/README.md
+++ b/exporter/clickhouseexporter/README.md
@@ -6,14 +6,14 @@
| Stability | [alpha]: traces, metrics, logs |
| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fclickhouse%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fclickhouse) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fclickhouse%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fclickhouse) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@hanjm](https://www.github.com/hanjm), [@dmitryax](https://www.github.com/dmitryax), [@Frapschen](https://www.github.com/Frapschen) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@hanjm](https://www.github.com/hanjm), [@dmitryax](https://www.github.com/dmitryax), [@Frapschen](https://www.github.com/Frapschen), [@SpencerTorres](https://www.github.com/SpencerTorres) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-This exporter supports sending OpenTelemetry data to [ClickHouse](https://clickhouse.com/).
+This exporter supports sending OpenTelemetry data to [ClickHouse](https://clickhouse.com/).
> ClickHouse is an open-source, high performance columnar OLAP database management system for real-time analytics using
> SQL.
> Throughput can be measured in rows per second or megabytes per second.
@@ -140,7 +140,7 @@ SELECT Timestamp as log_time,
toString(Links.TraceId)
FROM otel_traces
WHERE ServiceName = 'clickhouse-exporter'
- AND SpanAttributes['peer.service'] = 'tracegen-server'
+ AND SpanAttributes['peer.service'] = 'telemetrygen-server'
AND Timestamp >= NOW() - INTERVAL 1 HOUR
Limit 100;
```
@@ -279,7 +279,8 @@ Connection options:
- `username` (default = ): The authentication username.
- `password` (default = ): The authentication password.
-- `ttl_days` (default = 0): The data time-to-live in days, 0 means no ttl.
+- `ttl_days` (default = 0): **Deprecated: Use 'ttl' instead.** The data time-to-live in days, 0 means no ttl.
+- `ttl` (default = 0): The data time-to-live example 30m, 48h. Also, 0 means no ttl.
- `database` (default = otel): The database name.
- `connection_params` (default = {}). Params is the extra connection parameters with map format.
@@ -289,6 +290,19 @@ ClickHouse tables:
- `traces_table_name` (default = otel_traces): The table name for traces.
- `metrics_table_name` (default = otel_metrics): The table name for metrics.
+Cluster definition:
+
+- `cluster_name` (default = ): Optional. If present, will include `ON CLUSTER cluster_name` when creating tables.
+
+Table engine:
+
+- `table_engine`
+ - `name` (default = MergeTree)
+ - `params` (default = )
+
+Modifies `ENGINE` definition when table is created. If not set then `ENGINE` defaults to `MergeTree()`.
+Can be combined with `cluster_name` to enable [replication for fault tolerance](https://clickhouse.com/docs/en/architecture/replication).
+
Processing:
- `timeout` (default = 5s): The timeout for every attempt to send data to the backend.
@@ -311,7 +325,7 @@ use the `https` scheme.
This example shows how to configure the exporter to send data to a ClickHouse server.
It uses the native protocol without TLS. The exporter will create the database and tables if they don't exist.
-The data is stored for 3 days.
+The data is stored for 72 hours (3 days).
```yaml
receivers:
@@ -324,7 +338,7 @@ exporters:
clickhouse:
endpoint: tcp://127.0.0.1:9000?dial_timeout=10s&compress=lz4
database: otel
- ttl_days: 3
+ ttl: 72h
logs_table_name: otel_logs
traces_table_name: otel_traces
metrics_table_name: otel_metrics
@@ -334,6 +348,10 @@ exporters:
initial_interval: 5s
max_interval: 30s
max_elapsed_time: 300s
+ # cluster_name: my_cluster
+ # table_engine:
+ # name: ReplicatedMergeTree
+ # params:
service:
pipelines:
logs:
@@ -341,3 +359,15 @@ service:
processors: [ batch ]
exporters: [ clickhouse ]
```
+
+## Contributing
+
+Before contributing, review the contribution guidelines in [CONTRIBUTING.md](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md).
+
+#### Integration tests
+
+Integration tests can be run with the following command:
+```sh
+go test -tags integration -run=TestIntegration
+```
+*Note: Make sure integration tests pass after making changes to SQL.*
diff --git a/exporter/clickhouseexporter/config.go b/exporter/clickhouseexporter/config.go
index 3986b244f0bd..41b639a78823 100644
--- a/exporter/clickhouseexporter/config.go
+++ b/exporter/clickhouseexporter/config.go
@@ -8,23 +8,25 @@ import (
"errors"
"fmt"
"net/url"
+ "time"
"github.com/ClickHouse/clickhouse-go/v2"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
// Config defines configuration for Elastic exporter.
type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
// Endpoint is the clickhouse endpoint.
Endpoint string `mapstructure:"endpoint"`
// Username is the authentication username.
Username string `mapstructure:"username"`
- // Username is the authentication password.
+ // Password is the authentication password.
Password configopaque.String `mapstructure:"password"`
// Database is the database name to export.
Database string `mapstructure:"database"`
@@ -32,22 +34,37 @@ type Config struct {
ConnectionParams map[string]string `mapstructure:"connection_params"`
// LogsTableName is the table name for logs. default is `otel_logs`.
LogsTableName string `mapstructure:"logs_table_name"`
- // TracesTableName is the table name for logs. default is `otel_traces`.
+ // TracesTableName is the table name for traces. default is `otel_traces`.
TracesTableName string `mapstructure:"traces_table_name"`
// MetricsTableName is the table name for metrics. default is `otel_metrics`.
MetricsTableName string `mapstructure:"metrics_table_name"`
// TTLDays is The data time-to-live in days, 0 means no ttl.
+ // Deprecated: Use 'ttl' instead
TTLDays uint `mapstructure:"ttl_days"`
+ // TTL is The data time-to-live example 30m, 48h. 0 means no ttl.
+ TTL time.Duration `mapstructure:"ttl"`
+ // TableEngine is the table engine to use. default is `MergeTree()`.
+ TableEngine TableEngine `mapstructure:"table_engine"`
+ // ClusterName if set will append `ON CLUSTER` with the provided name when creating tables.
+ ClusterName string `mapstructure:"cluster_name"`
+}
+
+// TableEngine defines the ENGINE string value when creating the table.
+type TableEngine struct {
+ Name string `mapstructure:"name"`
+ Params string `mapstructure:"params"`
}
const defaultDatabase = "default"
+const defaultTableEngineName = "MergeTree"
var (
errConfigNoEndpoint = errors.New("endpoint must be specified")
errConfigInvalidEndpoint = errors.New("endpoint must be url format")
+ errConfigTTL = errors.New("both 'ttl_days' and 'ttl' can not be provided. 'ttl_days' is deprecated, use 'ttl' instead")
)
-// Validate the clickhouse server configuration.
+// Validate the ClickHouse server configuration.
func (cfg *Config) Validate() (err error) {
if cfg.Endpoint == "" {
err = errors.Join(err, errConfigNoEndpoint)
@@ -57,6 +74,10 @@ func (cfg *Config) Validate() (err error) {
err = errors.Join(err, e)
}
+ if cfg.TTL > 0 && cfg.TTLDays > 0 {
+ err = errors.Join(err, errConfigTTL)
+ }
+
// Validate DSN with clickhouse driver.
// Last chance to catch invalid config.
if _, e := clickhouse.ParseDSN(dsn); e != nil {
@@ -124,5 +145,26 @@ func (cfg *Config) buildDB(database string) (*sql.DB, error) {
}
return conn, nil
+}
+
+// TableEngineString generates the ENGINE string.
+func (cfg *Config) TableEngineString() string {
+ engine := cfg.TableEngine.Name
+ params := cfg.TableEngine.Params
+
+ if cfg.TableEngine.Name == "" {
+ engine = defaultTableEngineName
+ params = ""
+ }
+
+ return fmt.Sprintf("%s(%s)", engine, params)
+}
+
+// ClusterString generates the ON CLUSTER string. Returns empty string if not set.
+func (cfg *Config) ClusterString() string {
+ if cfg.ClusterName == "" {
+ return ""
+ }
+ return fmt.Sprintf("ON CLUSTER %s", cfg.ClusterName)
}
diff --git a/exporter/clickhouseexporter/config_test.go b/exporter/clickhouseexporter/config_test.go
index e0c171848f4c..3feceb439a3d 100644
--- a/exporter/clickhouseexporter/config_test.go
+++ b/exporter/clickhouseexporter/config_test.go
@@ -4,6 +4,7 @@
package clickhouseexporter
import (
+ "fmt"
"path/filepath"
"testing"
"time"
@@ -14,6 +15,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -31,7 +33,7 @@ func TestLoadConfig(t *testing.T) {
defaultCfg := createDefaultConfig()
defaultCfg.(*Config).Endpoint = defaultEndpoint
- storageID := component.NewIDWithName(component.Type("file_storage"), "clickhouse")
+ storageID := component.MustNewIDWithName("file_storage", "clickhouse")
tests := []struct {
id component.ID
@@ -49,14 +51,14 @@ func TestLoadConfig(t *testing.T) {
Database: "otel",
Username: "foo",
Password: "bar",
- TTLDays: 3,
+ TTL: 72 * time.Hour,
LogsTableName: "otel_logs",
TracesTableName: "otel_traces",
MetricsTableName: "otel_metrics",
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 5 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 5 * time.Second,
MaxInterval: 30 * time.Second,
@@ -260,7 +262,7 @@ func TestConfig_buildDSN(t *testing.T) {
} else {
// Validate DSN
opts, err := clickhouse.ParseDSN(got)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equalf(t, tt.wantChOptions.Secure, opts.TLS != nil, "TLSConfig is not nil")
assert.Equalf(t, tt.wantChOptions.DialTimeout, opts.DialTimeout, "DialTimeout is not nil")
if tt.wantChOptions.Compress != 0 {
@@ -272,3 +274,78 @@ func TestConfig_buildDSN(t *testing.T) {
})
}
}
+
+func TestTableEngineConfigParsing(t *testing.T) {
+ t.Parallel()
+ cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
+ require.NoError(t, err)
+
+ tests := []struct {
+ id component.ID
+ expected string
+ }{
+ {
+ id: component.NewIDWithName(metadata.Type, "table-engine-empty"),
+ expected: "MergeTree()",
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "table-engine-name-only"),
+ expected: "ReplicatedReplacingMergeTree()",
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "table-engine-full"),
+ expected: "ReplicatedReplacingMergeTree('/clickhouse/tables/{shard}/table_name', '{replica}', ver)",
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "table-engine-params-only"),
+ expected: "MergeTree()",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.id.String(), func(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ sub, err := cm.Sub(tt.id.String())
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ assert.NoError(t, component.ValidateConfig(cfg))
+ assert.Equal(t, tt.expected, cfg.(*Config).TableEngineString())
+ })
+ }
+}
+
+func TestClusterString(t *testing.T) {
+ t.Parallel()
+
+ tests := []struct {
+ input string
+ expected string
+ }{
+ {
+ input: "",
+ expected: "",
+ },
+ {
+ input: "cluster_a_b",
+ expected: "ON CLUSTER cluster_a_b",
+ },
+ {
+ input: "cluster a b",
+ expected: "ON CLUSTER cluster a b",
+ },
+ }
+
+ for i, tt := range tests {
+ t.Run(fmt.Sprintf("ClusterString case %d", i), func(t *testing.T) {
+ cfg := createDefaultConfig()
+ cfg.(*Config).Endpoint = defaultEndpoint
+ cfg.(*Config).ClusterName = tt.input
+
+ assert.NoError(t, component.ValidateConfig(cfg))
+ assert.Equal(t, tt.expected, cfg.(*Config).ClusterString())
+ })
+ }
+}
diff --git a/exporter/clickhouseexporter/example/docker-compose.yml b/exporter/clickhouseexporter/example/docker-compose.yml
index 3160a3b7404a..709d554f8679 100644
--- a/exporter/clickhouseexporter/example/docker-compose.yml
+++ b/exporter/clickhouseexporter/example/docker-compose.yml
@@ -69,10 +69,11 @@ services:
stop_signal: SIGKILL
# Traces generator
- tracegen:
+ telemetrygen:
build:
- context: ../../../cmd/tracegen/
+ context: ../../../cmd/telemetrygen/
command:
+ - traces
- --otlp-endpoint=otelcollector:4317
- --otlp-insecure
- --rate=100
diff --git a/exporter/clickhouseexporter/example/otel-collector-config.yml b/exporter/clickhouseexporter/example/otel-collector-config.yml
index 5bf5e2856084..e6c13dd5d7b3 100644
--- a/exporter/clickhouseexporter/example/otel-collector-config.yml
+++ b/exporter/clickhouseexporter/example/otel-collector-config.yml
@@ -28,7 +28,7 @@ exporters:
database: otel
logs_table_name: otel_logs
traces_table_name: otel_traces
- ttl_days: 3
+ ttl: 12h
timeout: 10s
sending_queue:
queue_size: 100
diff --git a/exporter/clickhouseexporter/exporter_logs.go b/exporter/clickhouseexporter/exporter_logs.go
index a970bdb26c96..b75ff39a0068 100644
--- a/exporter/clickhouseexporter/exporter_logs.go
+++ b/exporter/clickhouseexporter/exporter_logs.go
@@ -128,7 +128,7 @@ func attributesToMap(attributes pcommon.Map) map[string]string {
const (
// language=ClickHouse SQL
createLogsTableSQL = `
-CREATE TABLE IF NOT EXISTS %s (
+CREATE TABLE IF NOT EXISTS %s %s (
Timestamp DateTime64(9) CODEC(Delta, ZSTD(1)),
TraceId String CODEC(ZSTD(1)),
SpanId String CODEC(ZSTD(1)),
@@ -152,7 +152,7 @@ CREATE TABLE IF NOT EXISTS %s (
INDEX idx_log_attr_key mapKeys(LogAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_log_attr_value mapValues(LogAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_body Body TYPE tokenbf_v1(32768, 3, 0) GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
PARTITION BY toDate(Timestamp)
ORDER BY (ServiceName, SeverityText, toUnixTimestamp(Timestamp), TraceId)
@@ -218,7 +218,7 @@ func createDatabase(ctx context.Context, cfg *Config) error {
defer func() {
_ = db.Close()
}()
- query := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s", cfg.Database)
+ query := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s %s", cfg.Database, cfg.ClusterString())
_, err = db.ExecContext(ctx, query)
if err != nil {
return fmt.Errorf("create database:%w", err)
@@ -234,11 +234,8 @@ func createLogsTable(ctx context.Context, cfg *Config, db *sql.DB) error {
}
func renderCreateLogsTableSQL(cfg *Config) string {
- var ttlExpr string
- if cfg.TTLDays > 0 {
- ttlExpr = fmt.Sprintf(`TTL toDateTime(Timestamp) + toIntervalDay(%d)`, cfg.TTLDays)
- }
- return fmt.Sprintf(createLogsTableSQL, cfg.LogsTableName, ttlExpr)
+ ttlExpr := generateTTLExpr(cfg.TTLDays, cfg.TTL, "Timestamp")
+ return fmt.Sprintf(createLogsTableSQL, cfg.LogsTableName, cfg.ClusterString(), cfg.TableEngineString(), ttlExpr)
}
func renderInsertLogsSQL(cfg *Config) string {
diff --git a/exporter/clickhouseexporter/exporter_logs_test.go b/exporter/clickhouseexporter/exporter_logs_test.go
index c2d2bc44f2d7..aa3ff11acded 100644
--- a/exporter/clickhouseexporter/exporter_logs_test.go
+++ b/exporter/clickhouseexporter/exporter_logs_test.go
@@ -24,14 +24,14 @@ func TestLogsExporter_New(t *testing.T) {
type validate func(*testing.T, *logsExporter, error)
_ = func(t *testing.T, exporter *logsExporter, err error) {
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, exporter)
}
_ = func(want error) validate {
return func(t *testing.T, exporter *logsExporter, err error) {
require.Nil(t, exporter)
- require.NotNil(t, err)
+ require.Error(t, err)
if !errors.Is(err, want) {
t.Fatalf("Expected error '%v', but got '%v'", want, err)
}
@@ -39,8 +39,8 @@ func TestLogsExporter_New(t *testing.T) {
}
failWithMsg := func(msg string) validate {
- return func(t *testing.T, exporter *logsExporter, err error) {
- require.NotNil(t, err)
+ return func(t *testing.T, _ *logsExporter, err error) {
+ require.Error(t, err)
require.Contains(t, err.Error(), msg)
}
}
@@ -121,6 +121,20 @@ func TestExporter_pushLogsData(t *testing.T) {
})
}
+func TestLogsClusterConfig(t *testing.T) {
+ testClusterConfig(t, func(t *testing.T, dsn string, clusterTest clusterTestConfig, fns ...func(*Config)) {
+ exporter := newTestLogsExporter(t, dsn, fns...)
+ clusterTest.verifyConfig(t, exporter.cfg)
+ })
+}
+
+func TestLogsTableEngineConfig(t *testing.T) {
+ testTableEngineConfig(t, func(t *testing.T, dsn string, engineTest tableEngineTestConfig, fns ...func(*Config)) {
+ exporter := newTestLogsExporter(t, dsn, fns...)
+ engineTest.verifyConfig(t, exporter.cfg.TableEngine)
+ })
+}
+
func newTestLogsExporter(t *testing.T, dsn string, fns ...func(*Config)) *logsExporter {
exporter, err := newLogsExporter(zaptest.NewLogger(t), withTestExporterConfig(fns...)(dsn))
require.NoError(t, err)
@@ -151,10 +165,18 @@ func simpleLogs(count int) plog.Logs {
sl.Scope().SetName("io.opentelemetry.contrib.clickhouse")
sl.Scope().SetVersion("1.0.0")
sl.Scope().Attributes().PutStr("lib", "clickhouse")
+ timestamp := time.Unix(1703498029, 0)
for i := 0; i < count; i++ {
r := sl.LogRecords().AppendEmpty()
- r.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- r.Attributes().PutStr(conventions.AttributeServiceName, "v")
+ r.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ r.SetObservedTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ r.SetSeverityNumber(plog.SeverityNumberError2)
+ r.SetSeverityText("error")
+ r.Body().SetStr("error message")
+ r.Attributes().PutStr(conventions.AttributeServiceNamespace, "default")
+ r.SetFlags(plog.DefaultLogRecordFlags)
+ r.SetTraceID([16]byte{1, 2, 3, byte(i)})
+ r.SetSpanID([8]byte{1, 2, 3, byte(i)})
}
return logs
}
diff --git a/exporter/clickhouseexporter/exporter_metrics.go b/exporter/clickhouseexporter/exporter_metrics.go
index 916b9381e201..f08040f01a63 100644
--- a/exporter/clickhouseexporter/exporter_metrics.go
+++ b/exporter/clickhouseexporter/exporter_metrics.go
@@ -42,7 +42,9 @@ func (e *metricsExporter) start(ctx context.Context, _ component.Host) error {
}
internal.SetLogger(e.logger)
- return internal.NewMetricsTable(ctx, e.cfg.MetricsTableName, e.cfg.TTLDays, e.client)
+
+ ttlExpr := generateTTLExpr(e.cfg.TTLDays, e.cfg.TTL, "TimeUnix")
+ return internal.NewMetricsTable(ctx, e.cfg.MetricsTableName, e.cfg.ClusterString(), e.cfg.TableEngineString(), ttlExpr, e.client)
}
// shutdown will shut down the exporter.
diff --git a/exporter/clickhouseexporter/exporter_metrics_test.go b/exporter/clickhouseexporter/exporter_metrics_test.go
index 4058a80bc8ac..5a705c3b6862 100644
--- a/exporter/clickhouseexporter/exporter_metrics_test.go
+++ b/exporter/clickhouseexporter/exporter_metrics_test.go
@@ -12,35 +12,50 @@ import (
"testing"
"time"
+ "github.com/ClickHouse/clickhouse-go/v2"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.uber.org/zap/zaptest"
)
+func TestMetricsClusterConfig(t *testing.T) {
+ testClusterConfig(t, func(t *testing.T, dsn string, clusterTest clusterTestConfig, fns ...func(*Config)) {
+ exporter := newTestMetricsExporter(t, dsn, fns...)
+ clusterTest.verifyConfig(t, exporter.cfg)
+ })
+}
+
+func TestMetricsTableEngineConfig(t *testing.T) {
+ testTableEngineConfig(t, func(t *testing.T, dsn string, engineTest tableEngineTestConfig, fns ...func(*Config)) {
+ exporter := newTestMetricsExporter(t, dsn, fns...)
+ engineTest.verifyConfig(t, exporter.cfg.TableEngine)
+ })
+}
+
func TestExporter_pushMetricsData(t *testing.T) {
t.Parallel()
t.Run("push success", func(t *testing.T) {
items := &atomic.Int32{}
- initClickhouseTestServer(t, func(query string, values []driver.Value) error {
+ initClickhouseTestServer(t, func(query string, _ []driver.Value) error {
if strings.HasPrefix(query, "INSERT") {
items.Add(1)
}
return nil
})
- exporter := newTestMetricsExporter(t)
+ exporter := newTestMetricsExporter(t, defaultEndpoint)
mustPushMetricsData(t, exporter, simpleMetrics(1))
require.Equal(t, int32(15), items.Load())
})
t.Run("push failure", func(t *testing.T) {
- initClickhouseTestServer(t, func(query string, values []driver.Value) error {
+ initClickhouseTestServer(t, func(query string, _ []driver.Value) error {
if strings.HasPrefix(query, "INSERT") {
return fmt.Errorf("mock insert error")
}
return nil
})
- exporter := newTestMetricsExporter(t)
+ exporter := newTestMetricsExporter(t, defaultEndpoint)
err := exporter.pushMetricsData(context.TODO(), simpleMetrics(2))
require.Error(t, err)
})
@@ -92,16 +107,39 @@ func TestExporter_pushMetricsData(t *testing.T) {
}
return nil
})
- exporter := newTestMetricsExporter(t)
+ exporter := newTestMetricsExporter(t, defaultEndpoint)
mustPushMetricsData(t, exporter, simpleMetrics(1))
require.Equal(t, int32(15), items.Load())
})
+ t.Run("check traceID and spanID", func(t *testing.T) {
+ initClickhouseTestServer(t, func(query string, values []driver.Value) error {
+ if strings.HasPrefix(query, "INSERT INTO otel_metrics_gauge") {
+ require.Equal(t, clickhouse.ArraySet{"0102030000000000"}, values[19])
+ require.Equal(t, clickhouse.ArraySet{"01020300000000000000000000000000"}, values[20])
+ }
+ if strings.HasPrefix(query, "INSERT INTO otel_metrics_histogram") {
+ require.Equal(t, clickhouse.ArraySet{"0102030000000000"}, values[21])
+ require.Equal(t, clickhouse.ArraySet{"01020300000000000000000000000000"}, values[22])
+ }
+ if strings.HasPrefix(query, "INSERT INTO otel_metrics_sum ") {
+ require.Equal(t, clickhouse.ArraySet{"0102030000000000"}, values[19])
+ require.Equal(t, clickhouse.ArraySet{"01020300000000000000000000000000"}, values[20])
+ }
+ if strings.HasPrefix(query, "INSERT INTO otel_metrics_exponential_histogram") {
+ require.Equal(t, clickhouse.ArraySet{"0102030000000000"}, values[25])
+ require.Equal(t, clickhouse.ArraySet{"01020300000000000000000000000000"}, values[26])
+ }
+ return nil
+ })
+ exporter := newTestMetricsExporter(t, defaultEndpoint)
+ mustPushMetricsData(t, exporter, simpleMetrics(1))
+ })
}
func Benchmark_pushMetricsData(b *testing.B) {
pm := simpleMetrics(1)
- exporter := newTestMetricsExporter(&testing.T{})
+ exporter := newTestMetricsExporter(&testing.T{}, defaultEndpoint)
b.ReportAllocs()
b.ResetTimer()
for n := 0; n < b.N; n++ {
@@ -124,6 +162,7 @@ func simpleMetrics(count int) pmetric.Metrics {
sm.Scope().SetDroppedAttributesCount(10)
sm.Scope().SetName("Scope name 1")
sm.Scope().SetVersion("Scope version 1")
+ timestamp := time.Unix(1703498029, 0)
for i := 0; i < count; i++ {
// gauge
m := sm.Metrics().AppendEmpty()
@@ -132,10 +171,12 @@ func simpleMetrics(count int) pmetric.Metrics {
m.SetDescription("This is a gauge metrics")
dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
dp.SetIntValue(int64(i))
+ dp.SetFlags(pmetric.DefaultDataPointFlags)
dp.Attributes().PutStr("gauge_label_1", "1")
- dp.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ dp.SetStartTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
exemplars := dp.Exemplars().AppendEmpty()
+ exemplars.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
exemplars.SetIntValue(54)
exemplars.FilteredAttributes().PutStr("key", "value")
exemplars.FilteredAttributes().PutStr("key2", "value2")
@@ -149,10 +190,12 @@ func simpleMetrics(count int) pmetric.Metrics {
m.SetDescription("This is a sum metrics")
dp = m.SetEmptySum().DataPoints().AppendEmpty()
dp.SetDoubleValue(11.234)
+ dp.SetFlags(pmetric.DefaultDataPointFlags)
dp.Attributes().PutStr("sum_label_1", "1")
- dp.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ dp.SetStartTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
exemplars = dp.Exemplars().AppendEmpty()
+ exemplars.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
exemplars.SetIntValue(54)
exemplars.FilteredAttributes().PutStr("key", "value")
exemplars.FilteredAttributes().PutStr("key2", "value2")
@@ -165,17 +208,18 @@ func simpleMetrics(count int) pmetric.Metrics {
m.SetUnit("ms")
m.SetDescription("This is a histogram metrics")
dpHisto := m.SetEmptyHistogram().DataPoints().AppendEmpty()
- dpHisto.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- dpHisto.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ dpHisto.SetStartTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ dpHisto.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
dpHisto.SetCount(1)
dpHisto.SetSum(1)
dpHisto.Attributes().PutStr("key", "value")
- dpHisto.Attributes().PutStr("key", "value")
+ dpHisto.Attributes().PutStr("key2", "value")
dpHisto.ExplicitBounds().FromRaw([]float64{0, 0, 0, 0, 0})
dpHisto.BucketCounts().FromRaw([]uint64{0, 0, 0, 1, 0})
dpHisto.SetMin(0)
dpHisto.SetMax(1)
exemplars = dpHisto.Exemplars().AppendEmpty()
+ exemplars.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
exemplars.SetDoubleValue(55.22)
exemplars.FilteredAttributes().PutStr("key", "value")
exemplars.FilteredAttributes().PutStr("key2", "value2")
@@ -188,21 +232,22 @@ func simpleMetrics(count int) pmetric.Metrics {
m.SetUnit("ms")
m.SetDescription("This is a exp histogram metrics")
dpExpHisto := m.SetEmptyExponentialHistogram().DataPoints().AppendEmpty()
- dpExpHisto.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- dpExpHisto.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ dpExpHisto.SetStartTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ dpExpHisto.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
dpExpHisto.SetSum(1)
dpExpHisto.SetMin(0)
dpExpHisto.SetMax(1)
dpExpHisto.SetZeroCount(0)
dpExpHisto.SetCount(1)
dpExpHisto.Attributes().PutStr("key", "value")
- dpExpHisto.Attributes().PutStr("key", "value")
+ dpExpHisto.Attributes().PutStr("key2", "value")
dpExpHisto.Negative().SetOffset(1)
dpExpHisto.Negative().BucketCounts().FromRaw([]uint64{0, 0, 0, 1, 0})
dpExpHisto.Positive().SetOffset(1)
dpExpHisto.Positive().BucketCounts().FromRaw([]uint64{0, 0, 0, 1, 0})
exemplars = dpExpHisto.Exemplars().AppendEmpty()
+ exemplars.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
exemplars.SetIntValue(54)
exemplars.FilteredAttributes().PutStr("key", "value")
exemplars.FilteredAttributes().PutStr("key2", "value2")
@@ -215,10 +260,10 @@ func simpleMetrics(count int) pmetric.Metrics {
m.SetUnit("ms")
m.SetDescription("This is a summary metrics")
summary := m.SetEmptySummary().DataPoints().AppendEmpty()
- summary.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- summary.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ summary.SetStartTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ summary.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
summary.Attributes().PutStr("key", "value")
- summary.Attributes().PutStr("key2", "value2")
+ summary.Attributes().PutStr("key2", "value")
summary.SetCount(1)
summary.SetSum(1)
quantileValues := summary.QuantileValues().AppendEmpty()
@@ -451,8 +496,9 @@ func mustPushMetricsData(t *testing.T, exporter *metricsExporter, md pmetric.Met
require.NoError(t, err)
}
-func newTestMetricsExporter(t *testing.T) *metricsExporter {
- exporter, err := newMetricsExporter(zaptest.NewLogger(t), withTestExporterConfig()(defaultEndpoint))
+// nolint:unparam // not need to check this func
+func newTestMetricsExporter(t *testing.T, dsn string, fns ...func(*Config)) *metricsExporter {
+ exporter, err := newMetricsExporter(zaptest.NewLogger(t), withTestExporterConfig(fns...)(dsn))
require.NoError(t, err)
require.NoError(t, exporter.start(context.TODO(), nil))
diff --git a/exporter/clickhouseexporter/exporter_sql_test.go b/exporter/clickhouseexporter/exporter_sql_test.go
new file mode 100644
index 000000000000..17f52d4ba8be
--- /dev/null
+++ b/exporter/clickhouseexporter/exporter_sql_test.go
@@ -0,0 +1,186 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package clickhouseexporter
+
+import (
+ "database/sql/driver"
+ "fmt"
+ "strings"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+)
+
+type clusterTestCompletion func(t *testing.T, dsn string, clusterTest clusterTestConfig, fns ...func(*Config))
+type clusterTestConfig struct {
+ name string
+ cluster string
+ shouldPass bool
+}
+
+func (test clusterTestConfig) verifyConfig(t *testing.T, cfg *Config) {
+ if test.cluster == "" {
+ require.Empty(t, cfg.ClusterString())
+ } else {
+ require.NotEmpty(t, cfg.ClusterString())
+ }
+}
+
+func getQueryFirstLine(query string) string {
+ trimmed := strings.Trim(query, "\n")
+ line := strings.Split(trimmed, "\n")[0]
+ return strings.Trim(line, " (")
+}
+
+func checkClusterQueryDefinition(query string, clusterName string) error {
+ line := getQueryFirstLine(query)
+ lowercasedLine := strings.ToLower(line)
+ suffix := fmt.Sprintf("ON CLUSTER %s", clusterName)
+ prefixes := []string{"create database", "create table", "create materialized view"}
+ for _, prefix := range prefixes {
+ if strings.HasPrefix(lowercasedLine, prefix) {
+ if strings.HasSuffix(line, suffix) {
+ return nil
+ }
+ }
+ }
+
+ return fmt.Errorf("query does not contain cluster clause: %s", line)
+}
+
+func testClusterConfig(t *testing.T, completion clusterTestCompletion) {
+ tests := []clusterTestConfig{
+ {
+ name: "on",
+ cluster: "cluster_a_b",
+ shouldPass: true,
+ },
+ {
+ name: "off",
+ cluster: "",
+ shouldPass: false,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run("test cluster config "+tt.name, func(t *testing.T) {
+ initClickhouseTestServer(t, func(query string, _ []driver.Value) error {
+ if tt.shouldPass {
+ require.NoError(t, checkClusterQueryDefinition(query, tt.cluster))
+ } else {
+ require.Error(t, checkClusterQueryDefinition(query, tt.cluster))
+ }
+ return nil
+ })
+
+ var configMods []func(*Config)
+ configMods = append(configMods, func(cfg *Config) {
+ cfg.ClusterName = tt.cluster
+ cfg.Database = "test_db_" + time.Now().Format("20060102150405")
+ })
+
+ completion(t, defaultEndpoint, tt, configMods...)
+ })
+ }
+}
+
+type tableEngineTestCompletion func(t *testing.T, dsn string, engineTest tableEngineTestConfig, fns ...func(*Config))
+type tableEngineTestConfig struct {
+ name string
+ engineName string
+ engineParams string
+ expectedTableName string
+ shouldPass bool
+}
+
+func (engineTest tableEngineTestConfig) verifyConfig(t *testing.T, te TableEngine) {
+ if engineTest.engineName == "" {
+ require.Empty(t, te.Name)
+ } else {
+ require.NotEmpty(t, te.Name)
+ }
+}
+
+func checkTableEngineQueryDefinition(query string, expectedEngineName string) error {
+ lines := strings.Split(query, "\n")
+ for _, line := range lines {
+ if strings.Contains(strings.ToLower(line), "engine = ") {
+ engine := strings.Split(line, " = ")[1]
+ engine = strings.Trim(engine, " ")
+ if engine == expectedEngineName {
+ return nil
+ }
+
+ return fmt.Errorf("wrong engine name in query: %s, expected: %s", engine, expectedEngineName)
+ }
+ }
+
+ return fmt.Errorf("query does not contain engine definition: %s", query)
+}
+
+func testTableEngineConfig(t *testing.T, completion tableEngineTestCompletion) {
+ tests := []tableEngineTestConfig{
+ {
+ name: "no params",
+ engineName: "CustomEngine",
+ engineParams: "",
+ expectedTableName: "CustomEngine",
+ shouldPass: true,
+ },
+ {
+ name: "with params",
+ engineName: "CustomEngine",
+ engineParams: "'/x/y/z', 'some_param', another_param, last_param",
+ expectedTableName: "CustomEngine",
+ shouldPass: true,
+ },
+ {
+ name: "with empty name",
+ engineName: "",
+ engineParams: "",
+ expectedTableName: defaultTableEngineName,
+ shouldPass: true,
+ },
+ {
+ name: "fail",
+ engineName: "CustomEngine",
+ engineParams: "",
+ expectedTableName: defaultTableEngineName,
+ shouldPass: false,
+ },
+ }
+
+ for _, tt := range tests {
+ te := TableEngine{Name: tt.engineName, Params: tt.engineParams}
+ expectedEngineValue := fmt.Sprintf("%s(%s)", tt.expectedTableName, tt.engineParams)
+
+ t.Run("test table engine config "+tt.name, func(t *testing.T) {
+ initClickhouseTestServer(t, func(query string, _ []driver.Value) error {
+ firstLine := getQueryFirstLine(query)
+ if !strings.HasPrefix(strings.ToLower(firstLine), "create table") {
+ return nil
+ }
+
+ check := checkTableEngineQueryDefinition(query, expectedEngineValue)
+ if tt.shouldPass {
+ require.NoError(t, check)
+ } else {
+ require.Error(t, check)
+ }
+
+ return nil
+ })
+
+ var configMods []func(*Config)
+ if te.Name != "" {
+ configMods = append(configMods, func(cfg *Config) {
+ cfg.TableEngine = te
+ })
+ }
+
+ completion(t, defaultEndpoint, tt, configMods...)
+ })
+ }
+}
diff --git a/exporter/clickhouseexporter/exporter_traces.go b/exporter/clickhouseexporter/exporter_traces.go
index 6f03ee295833..fed01b91e7a2 100644
--- a/exporter/clickhouseexporter/exporter_traces.go
+++ b/exporter/clickhouseexporter/exporter_traces.go
@@ -158,7 +158,7 @@ func convertLinks(links ptrace.SpanLinkSlice) ([]string, []string, []string, []m
const (
// language=ClickHouse SQL
createTracesTableSQL = `
-CREATE TABLE IF NOT EXISTS %s (
+CREATE TABLE IF NOT EXISTS %s %s (
Timestamp DateTime64(9) CODEC(Delta, ZSTD(1)),
TraceId String CODEC(ZSTD(1)),
SpanId String CODEC(ZSTD(1)),
@@ -191,7 +191,7 @@ CREATE TABLE IF NOT EXISTS %s (
INDEX idx_span_attr_key mapKeys(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_span_attr_value mapValues(SpanAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_duration Duration TYPE minmax GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
PARTITION BY toDate(Timestamp)
ORDER BY (ServiceName, SpanName, toUnixTimestamp(Timestamp), TraceId)
@@ -249,18 +249,18 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
const (
createTraceIDTsTableSQL = `
-create table IF NOT EXISTS %s_trace_id_ts (
+create table IF NOT EXISTS %s_trace_id_ts %s (
TraceId String CODEC(ZSTD(1)),
Start DateTime64(9) CODEC(Delta, ZSTD(1)),
End DateTime64(9) CODEC(Delta, ZSTD(1)),
INDEX idx_trace_id TraceId TYPE bloom_filter(0.01) GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
ORDER BY (TraceId, toUnixTimestamp(Start))
SETTINGS index_granularity=8192;
`
createTraceIDTsMaterializedViewSQL = `
-CREATE MATERIALIZED VIEW IF NOT EXISTS %s_trace_id_ts_mv
+CREATE MATERIALIZED VIEW IF NOT EXISTS %s_trace_id_ts_mv %s
TO %s.%s_trace_id_ts
AS SELECT
TraceId,
@@ -291,22 +291,16 @@ func renderInsertTracesSQL(cfg *Config) string {
}
func renderCreateTracesTableSQL(cfg *Config) string {
- var ttlExpr string
- if cfg.TTLDays > 0 {
- ttlExpr = fmt.Sprintf(`TTL toDateTime(Timestamp) + toIntervalDay(%d)`, cfg.TTLDays)
- }
- return fmt.Sprintf(createTracesTableSQL, cfg.TracesTableName, ttlExpr)
+ ttlExpr := generateTTLExpr(cfg.TTLDays, cfg.TTL, "Timestamp")
+ return fmt.Sprintf(createTracesTableSQL, cfg.TracesTableName, cfg.ClusterString(), cfg.TableEngineString(), ttlExpr)
}
func renderCreateTraceIDTsTableSQL(cfg *Config) string {
- var ttlExpr string
- if cfg.TTLDays > 0 {
- ttlExpr = fmt.Sprintf(`TTL toDateTime(Start) + toIntervalDay(%d)`, cfg.TTLDays)
- }
- return fmt.Sprintf(createTraceIDTsTableSQL, cfg.TracesTableName, ttlExpr)
+ ttlExpr := generateTTLExpr(cfg.TTLDays, cfg.TTL, "Start")
+ return fmt.Sprintf(createTraceIDTsTableSQL, cfg.TracesTableName, cfg.ClusterString(), cfg.TableEngineString(), ttlExpr)
}
func renderTraceIDTsMaterializedViewSQL(cfg *Config) string {
return fmt.Sprintf(createTraceIDTsMaterializedViewSQL, cfg.TracesTableName,
- cfg.Database, cfg.TracesTableName, cfg.Database, cfg.TracesTableName)
+ cfg.ClusterString(), cfg.Database, cfg.TracesTableName, cfg.Database, cfg.TracesTableName)
}
diff --git a/exporter/clickhouseexporter/exporter_traces_test.go b/exporter/clickhouseexporter/exporter_traces_test.go
index 2bff1fcdc2b2..11391d86e430 100644
--- a/exporter/clickhouseexporter/exporter_traces_test.go
+++ b/exporter/clickhouseexporter/exporter_traces_test.go
@@ -69,15 +69,28 @@ func simpleTraces(count int) ptrace.Traces {
ss.SetSchemaUrl("https://opentelemetry.io/schemas/1.7.0")
ss.Scope().SetDroppedAttributesCount(20)
ss.Scope().Attributes().PutStr("lib", "clickhouse")
+ timestamp := time.Unix(1703498029, 0)
for i := 0; i < count; i++ {
s := ss.Spans().AppendEmpty()
- s.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now()))
- s.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ s.SetTraceID([16]byte{1, 2, 3, byte(i)})
+ s.SetSpanID([8]byte{1, 2, 3, byte(i)})
+ s.TraceState().FromRaw("trace state")
+ s.SetParentSpanID([8]byte{1, 2, 4, byte(i)})
+ s.SetName("call db")
+ s.SetKind(ptrace.SpanKindInternal)
+ s.SetStartTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ s.SetEndTimestamp(pcommon.NewTimestampFromTime(timestamp.Add(time.Minute)))
s.Attributes().PutStr(conventions.AttributeServiceName, "v")
+ s.Status().SetMessage("error")
+ s.Status().SetCode(ptrace.StatusCodeError)
event := s.Events().AppendEmpty()
event.SetName("event1")
- event.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ event.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
+ event.Attributes().PutStr("level", "info")
link := s.Links().AppendEmpty()
+ link.SetTraceID([16]byte{1, 2, 5, byte(i)})
+ link.SetSpanID([8]byte{1, 2, 5, byte(i)})
+ link.TraceState().FromRaw("error")
link.Attributes().PutStr("k", "v")
}
return traces
@@ -87,3 +100,17 @@ func mustPushTracesData(t *testing.T, exporter *tracesExporter, td ptrace.Traces
err := exporter.pushTraceData(context.TODO(), td)
require.NoError(t, err)
}
+
+func TestTracesClusterConfig(t *testing.T) {
+ testClusterConfig(t, func(t *testing.T, dsn string, clusterTest clusterTestConfig, fns ...func(*Config)) {
+ exporter := newTestTracesExporter(t, dsn, fns...)
+ clusterTest.verifyConfig(t, exporter.cfg)
+ })
+}
+
+func TestTracesTableEngineConfig(t *testing.T) {
+ testTableEngineConfig(t, func(t *testing.T, dsn string, engineTest tableEngineTestConfig, fns ...func(*Config)) {
+ exporter := newTestTracesExporter(t, dsn, fns...)
+ engineTest.verifyConfig(t, exporter.cfg.TableEngine)
+ })
+}
diff --git a/exporter/clickhouseexporter/factory.go b/exporter/clickhouseexporter/factory.go
index 43009573cb6e..4855b7f3914d 100644
--- a/exporter/clickhouseexporter/factory.go
+++ b/exporter/clickhouseexporter/factory.go
@@ -8,15 +8,17 @@ package clickhouseexporter // import "github.com/open-telemetry/opentelemetry-co
import (
"context"
"fmt"
+ "time"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter/internal/metadata"
)
-// NewFactory creates a factory for Elastic exporter.
+// NewFactory creates a factory for ClickHouse exporter.
func NewFactory() exporter.Factory {
return exporter.NewFactory(
metadata.Type,
@@ -34,18 +36,18 @@ func createDefaultConfig() component.Config {
return &Config{
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
QueueSettings: queueSettings,
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
ConnectionParams: map[string]string{},
Database: defaultDatabase,
LogsTableName: "otel_logs",
TracesTableName: "otel_traces",
MetricsTableName: "otel_metrics",
- TTLDays: 0,
+ TTL: 0,
}
}
// createLogsExporter creates a new exporter for logs.
-// Logs are directly insert into clickhouse.
+// Logs are directly inserted into ClickHouse.
func createLogsExporter(
ctx context.Context,
set exporter.CreateSettings,
@@ -66,12 +68,12 @@ func createLogsExporter(
exporterhelper.WithShutdown(exporter.shutdown),
exporterhelper.WithTimeout(c.TimeoutSettings),
exporterhelper.WithQueue(c.QueueSettings),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
)
}
// createTracesExporter creates a new exporter for traces.
-// Traces are directly insert into clickhouse.
+// Traces are directly inserted into ClickHouse.
func createTracesExporter(
ctx context.Context,
set exporter.CreateSettings,
@@ -92,7 +94,7 @@ func createTracesExporter(
exporterhelper.WithShutdown(exporter.shutdown),
exporterhelper.WithTimeout(c.TimeoutSettings),
exporterhelper.WithQueue(c.QueueSettings),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
)
}
@@ -116,6 +118,26 @@ func createMetricExporter(
exporterhelper.WithShutdown(exporter.shutdown),
exporterhelper.WithTimeout(c.TimeoutSettings),
exporterhelper.WithQueue(c.QueueSettings),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
)
}
+
+func generateTTLExpr(ttlDays uint, ttl time.Duration, timeField string) string {
+ if ttlDays > 0 {
+ return fmt.Sprintf(`TTL toDateTime(%s) + toIntervalDay(%d)`, timeField, ttlDays)
+ }
+
+ if ttl > 0 {
+ switch {
+ case ttl%(24*time.Hour) == 0:
+ return fmt.Sprintf(`TTL toDateTime(%s) + toIntervalDay(%d)`, timeField, ttl/(24*time.Hour))
+ case ttl%(time.Hour) == 0:
+ return fmt.Sprintf(`TTL toDateTime(%s) + toIntervalHour(%d)`, timeField, ttl/time.Hour)
+ case ttl%(time.Minute) == 0:
+ return fmt.Sprintf(`TTL toDateTime(%s) + toIntervalMinute(%d)`, timeField, ttl/time.Minute)
+ default:
+ return fmt.Sprintf(`TTL toDateTime(%s) + toIntervalSecond(%d)`, timeField, ttl/time.Second)
+ }
+ }
+ return ""
+}
diff --git a/exporter/clickhouseexporter/generated_component_test.go b/exporter/clickhouseexporter/generated_component_test.go
new file mode 100644
index 000000000000..f251d2cf9264
--- /dev/null
+++ b/exporter/clickhouseexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package clickhouseexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/clickhouseexporter/go.mod b/exporter/clickhouseexporter/go.mod
index 248721133105..ea10a148da71 100644
--- a/exporter/clickhouseexporter/go.mod
+++ b/exporter/clickhouseexporter/go.mod
@@ -1,64 +1,109 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/clickhouseexporter
-go 1.20
+go 1.21
require (
- github.com/ClickHouse/clickhouse-go/v2 v2.15.0
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/ClickHouse/clickhouse-go/v2 v2.23.0
+ github.com/cenkalti/backoff/v4 v4.3.0
+ github.com/jmoiron/sqlx v1.3.5
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ github.com/testcontainers/testcontainers-go v0.29.1
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/ClickHouse/ch-go v0.58.2 // indirect
- github.com/andybalholm/brotli v1.0.6 // indirect
+ dario.cat/mergo v1.0.0 // indirect
+ github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
+ github.com/ClickHouse/ch-go v0.61.5 // indirect
+ github.com/Microsoft/go-winio v0.6.1 // indirect
+ github.com/Microsoft/hcsshim v0.11.4 // indirect
+ github.com/andybalholm/brotli v1.1.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/containerd/containerd v1.7.12 // indirect
+ github.com/containerd/log v0.1.0 // indirect
+ github.com/cpuguy83/dockercfg v0.3.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/distribution/reference v0.5.0 // indirect
+ github.com/docker/docker v25.0.5+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
+ github.com/docker/go-units v0.5.0 // indirect
+ github.com/felixge/httpsnoop v1.0.3 // indirect
github.com/go-faster/city v1.0.1 // indirect
- github.com/go-faster/errors v0.6.1 // indirect
+ github.com/go-faster/errors v0.7.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/uuid v1.4.0 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.7 // 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/knadh/koanf/v2 v2.1.1 // indirect
+ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
+ github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
+ github.com/moby/patternmatcher v0.6.0 // indirect
+ github.com/moby/sys/sequential v0.5.0 // indirect
+ github.com/moby/sys/user v0.1.0 // indirect
+ github.com/moby/term v0.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/paulmach/orb v0.10.0 // indirect
- github.com/pierrec/lz4/v4 v4.1.18 // indirect
+ github.com/morikuni/aec v1.0.0 // indirect
+ github.com/opencontainers/go-digest v1.0.0 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
+ github.com/paulmach/orb v0.11.1 // indirect
+ github.com/pierrec/lz4/v4 v4.1.21 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/segmentio/asm v1.2.0 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
+ github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/sirupsen/logrus v1.9.3 // indirect
+ github.com/tklauser/go-sysconf v0.3.12 // indirect
+ github.com/tklauser/numcpus v0.6.1 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/tools v0.15.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/clickhouseexporter/go.sum b/exporter/clickhouseexporter/go.sum
index c758782b1f91..8be6de4a7ece 100644
--- a/exporter/clickhouseexporter/go.sum
+++ b/exporter/clickhouseexporter/go.sum
@@ -1,215 +1,283 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/ClickHouse/ch-go v0.58.2 h1:jSm2szHbT9MCAB1rJ3WuCJqmGLi5UTjlNu+f530UTS0=
-github.com/ClickHouse/ch-go v0.58.2/go.mod h1:Ap/0bEmiLa14gYjCiRkYGbXvbe8vwdrfTYWhsuQ99aw=
-github.com/ClickHouse/clickhouse-go/v2 v2.15.0 h1:G0hTKyO8fXXR1bGnZ0DY3vTG01xYfOGW76zgjg5tmC4=
-github.com/ClickHouse/clickhouse-go/v2 v2.15.0/go.mod h1:kXt1SRq0PIRa6aKZD7TnFnY9PQKmc2b13sHtOYcK6cQ=
-github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI=
-github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
+github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
+github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/ClickHouse/ch-go v0.61.5 h1:zwR8QbYI0tsMiEcze/uIMK+Tz1D3XZXLdNrlaOpeEI4=
+github.com/ClickHouse/ch-go v0.61.5/go.mod h1:s1LJW/F/LcFs5HJnuogFMta50kKDO0lf9zzfrbl0RQg=
+github.com/ClickHouse/clickhouse-go/v2 v2.23.0 h1:srmRrkS0BR8gEut87u8jpcZ7geOob6nGj9ifrb+aKmg=
+github.com/ClickHouse/clickhouse-go/v2 v2.23.0/go.mod h1:tBhdF3f3RdP7sS59+oBAtTyhWpy0024ZxDMhgxra0QE=
+github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
+github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
+github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
+github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
+github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
+github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
+github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
+github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
+github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=
+github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
+github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
+github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
+github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
+github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
+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/go-faster/city v1.0.1 h1:4WAxSZ3V2Ws4QRDrscLEDcibJY8uf41H6AhXDrNDcGw=
github.com/go-faster/city v1.0.1/go.mod h1:jKcUJId49qdW3L1qKHH/3wPeUstCVpVSXTM6vO3VcTw=
-github.com/go-faster/errors v0.6.1 h1:nNIPOBkprlKzkThvS/0YaX8Zs9KewLCOSFQS5BU06FI=
-github.com/go-faster/errors v0.6.1/go.mod h1:5MGV2/2T9yvlrbhe9pD9LO5Z/2zCSq2T8j+Jpi2LAyY=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg=
+github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
+github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
+github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
+github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
+github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/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.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
-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/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
+github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0=
+github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
+github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
+github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg=
+github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
+github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
+github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
+github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
+github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 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/paulmach/orb v0.10.0 h1:guVYVqzxHE/CQ1KpfGO077TR0ATHSNjp4s6XGLn3W9s=
-github.com/paulmach/orb v0.10.0/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
+github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
+github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
+github.com/paulmach/orb v0.11.1 h1:3koVegMC4X/WeiXYz9iswopaTwMem53NzTJuTF20JzU=
+github.com/paulmach/orb v0.11.1/go.mod h1:5mULz1xQfs3bmQm63QEJA6lNGujuRafwA5S/EnuLaLU=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
-github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ=
-github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
+github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys=
github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
+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/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
+github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/testcontainers/testcontainers-go v0.29.1 h1:z8kxdFlovA2y97RWx98v/TQ+tR+SXZm6p35M+xB92zk=
+github.com/testcontainers/testcontainers-go v0.29.1/go.mod h1:SnKnKQav8UcgtKqjp/AD8bE1MqZm+3TDb/B8crE3XnI=
github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk=
+github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
+github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
+github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
+github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI=
github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g=
github.com/xdg-go/stringprep v1.0.3/go.mod h1:W3f5j4i+9rC0kuIEJL0ky1VpHXQU3ocBgklLGvcBnW8=
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.mongodb.org/mongo-driver v1.11.4/go.mod h1:PTSz5yu21bkT/wXpkS7WR5f0ddqw5quethTUn9WM+2g=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+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/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
+golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/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/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -217,52 +285,36 @@ 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.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
+golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
+golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
+gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
diff --git a/exporter/clickhouseexporter/integration_test.go b/exporter/clickhouseexporter/integration_test.go
new file mode 100644
index 000000000000..1c1796251ccc
--- /dev/null
+++ b/exporter/clickhouseexporter/integration_test.go
@@ -0,0 +1,607 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+//go:build integration
+// +build integration
+
+package clickhouseexporter
+
+import (
+ "context"
+ "fmt"
+ "math/rand"
+ "strconv"
+ "testing"
+ "time"
+
+ "github.com/jmoiron/sqlx"
+ "github.com/stretchr/testify/require"
+ "github.com/testcontainers/testcontainers-go"
+ "github.com/testcontainers/testcontainers-go/wait"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+)
+
+func TestIntegration(t *testing.T) {
+ testCase := []struct {
+ name string
+ image string
+ }{
+ {
+ name: "test clickhouse 24-alpine",
+ image: "clickhouse/clickhouse-server:24-alpine",
+ },
+ {
+ name: "test clickhouse 23-alpine",
+ image: "clickhouse/clickhouse-server:23-alpine",
+ },
+ {
+ name: "test clickhouse 22-alpine",
+ image: "clickhouse/clickhouse-server:22-alpine",
+ },
+ }
+
+ for _, c := range testCase {
+ t.Run(c.name, func(t *testing.T) {
+ port := randPort()
+ req := testcontainers.ContainerRequest{
+ Image: c.image,
+ ExposedPorts: []string{fmt.Sprintf("%s:9000", port)},
+ WaitingFor: wait.ForListeningPort("9000").
+ WithStartupTimeout(2 * time.Minute),
+ }
+ c := getContainer(t, req)
+ defer func() {
+ err := c.Terminate(context.Background())
+ require.NoError(t, err)
+ }()
+
+ host, err := c.Host(context.Background())
+ require.NoError(t, err)
+ endpoint := fmt.Sprintf("tcp://%s:%s", host, port)
+
+ logExporter := newTestLogsExporter(t, endpoint)
+ verifyExportLog(t, logExporter)
+
+ traceExporter := newTestTracesExporter(t, endpoint)
+ require.NoError(t, err)
+ verifyExporterTrace(t, traceExporter)
+
+ metricExporter := newTestMetricsExporter(t, endpoint)
+ require.NoError(t, err)
+ verifyExporterMetric(t, metricExporter)
+ })
+ }
+}
+
+func getContainer(t *testing.T, req testcontainers.ContainerRequest) testcontainers.Container {
+ require.NoError(t, req.Validate())
+ container, err := testcontainers.GenericContainer(
+ context.Background(),
+ testcontainers.GenericContainerRequest{
+ ContainerRequest: req,
+ Started: true,
+ })
+ require.NoError(t, err)
+
+ err = container.Start(context.Background())
+ require.NoError(t, err)
+ return container
+}
+
+func verifyExportLog(t *testing.T, logExporter *logsExporter) {
+ mustPushLogsData(t, logExporter, simpleLogs(1))
+ db := sqlx.NewDb(logExporter.client, driverName)
+
+ type log struct {
+ Timestamp string `db:"Timestamp"`
+ TraceID string `db:"TraceId"`
+ SpanID string `db:"SpanId"`
+ TraceFlags uint32 `db:"TraceFlags"`
+ SeverityText string `db:"SeverityText"`
+ SeverityNumber int32 `db:"SeverityNumber"`
+ ServiceName string `db:"ServiceName"`
+ Body string `db:"Body"`
+ ResourceSchemaURL string `db:"ResourceSchemaUrl"`
+ ResourceAttributes map[string]string `db:"ResourceAttributes"`
+ ScopeSchemaURL string `db:"ScopeSchemaUrl"`
+ ScopeName string `db:"ScopeName"`
+ ScopeVersion string `db:"ScopeVersion"`
+ ScopeAttributes map[string]string `db:"ScopeAttributes"`
+ LogAttributes map[string]string `db:"LogAttributes"`
+ }
+
+ var actualLog log
+
+ expectLog := log{
+ Timestamp: "2023-12-25T09:53:49Z",
+ TraceID: "01020300000000000000000000000000",
+ SpanID: "0102030000000000",
+ SeverityText: "error",
+ SeverityNumber: 18,
+ ServiceName: "test-service",
+ Body: "error message",
+ ResourceSchemaURL: "https://opentelemetry.io/schemas/1.4.0",
+ ResourceAttributes: map[string]string{
+ "service.name": "test-service",
+ },
+ ScopeSchemaURL: "https://opentelemetry.io/schemas/1.7.0",
+ ScopeName: "io.opentelemetry.contrib.clickhouse",
+ ScopeVersion: "1.0.0",
+ ScopeAttributes: map[string]string{
+ "lib": "clickhouse",
+ },
+ LogAttributes: map[string]string{
+ "service.namespace": "default",
+ },
+ }
+
+ err := db.Get(&actualLog, "select * from default.otel_logs")
+ require.NoError(t, err)
+ require.Equal(t, expectLog, actualLog)
+}
+
+func verifyExporterTrace(t *testing.T, traceExporter *tracesExporter) {
+ mustPushTracesData(t, traceExporter, simpleTraces(1))
+ db := sqlx.NewDb(traceExporter.client, driverName)
+
+ type trace struct {
+ Timestamp string `db:"Timestamp"`
+ TraceID string `db:"TraceId"`
+ SpanID string `db:"SpanId"`
+ ParentSpanID string `db:"ParentSpanId"`
+ TraceState string `db:"TraceState"`
+ SpanName string `db:"SpanName"`
+ SpanKind string `db:"SpanKind"`
+ ServiceName string `db:"ServiceName"`
+ ResourceAttributes map[string]string `db:"ResourceAttributes"`
+ ScopeName string `db:"ScopeName"`
+ ScopeVersion string `db:"ScopeVersion"`
+ SpanAttributes map[string]string `db:"SpanAttributes"`
+ Duration int64 `db:"Duration"`
+ StatusCode string `db:"StatusCode"`
+ StatusMessage string `db:"StatusMessage"`
+ EventsTimestamp []time.Time `db:"Events.Timestamp"`
+ EventsName []string `db:"Events.Name"`
+ EventsAttributes []map[string]string `db:"Events.Attributes"`
+ LinksTraceID []string `db:"Links.TraceId"`
+ LinksSpanID []string `db:"Links.SpanId"`
+ LinksTraceState []string `db:"Links.TraceState"`
+ LinksAttributes []map[string]string `db:"Links.Attributes"`
+ }
+
+ var actualTrace trace
+
+ expectTrace := trace{
+ Timestamp: "2023-12-25T09:53:49Z",
+ TraceID: "01020300000000000000000000000000",
+ SpanID: "0102030000000000",
+ ParentSpanID: "0102040000000000",
+ TraceState: "trace state",
+ SpanName: "call db",
+ SpanKind: "SPAN_KIND_INTERNAL",
+ ServiceName: "test-service",
+ ResourceAttributes: map[string]string{
+ "service.name": "test-service",
+ },
+ ScopeName: "io.opentelemetry.contrib.clickhouse",
+ ScopeVersion: "1.0.0",
+ SpanAttributes: map[string]string{
+ "service.name": "v",
+ },
+ Duration: 60000000000,
+ StatusCode: "STATUS_CODE_ERROR",
+ StatusMessage: "error",
+ EventsTimestamp: []time.Time{
+ time.Unix(1703498029, 0).UTC(),
+ },
+ EventsName: []string{"event1"},
+ EventsAttributes: []map[string]string{
+ {
+ "level": "info",
+ },
+ },
+ LinksTraceID: []string{
+ "01020500000000000000000000000000",
+ },
+ LinksSpanID: []string{
+ "0102050000000000",
+ },
+ LinksTraceState: []string{
+ "error",
+ },
+ LinksAttributes: []map[string]string{
+ {
+ "k": "v",
+ },
+ },
+ }
+
+ err := db.Get(&actualTrace, "select * from default.otel_traces")
+ require.NoError(t, err)
+ require.Equal(t, expectTrace, actualTrace)
+}
+
+func verifyExporterMetric(t *testing.T, metricExporter *metricsExporter) {
+ metric := pmetric.NewMetrics()
+ rm := metric.ResourceMetrics().AppendEmpty()
+ simpleMetrics(1).ResourceMetrics().At(0).CopyTo(rm)
+
+ mustPushMetricsData(t, metricExporter, metric)
+ db := sqlx.NewDb(metricExporter.client, driverName)
+
+ verifyGaugeMetric(t, db)
+ verifySumMetric(t, db)
+ verifyHistogramMetric(t, db)
+ verifyExphistogramMetric(t, db)
+ verifySummaryMetric(t, db)
+}
+
+func verifyGaugeMetric(t *testing.T, db *sqlx.DB) {
+ type gauge struct {
+ ResourceAttributes map[string]string `db:"ResourceAttributes"`
+ ResourceSchemaURL string `db:"ResourceSchemaUrl"`
+ ScopeName string `db:"ScopeName"`
+ ScopeVersion string `db:"ScopeVersion"`
+ ScopeAttributes map[string]string `db:"ScopeAttributes"`
+ ScopeDroppedAttrCount uint32 `db:"ScopeDroppedAttrCount"`
+ ScopeSchemaURL string `db:"ScopeSchemaUrl"`
+ ServiceName string `db:"ServiceName"`
+ MetricName string `db:"MetricName"`
+ MetricDescription string `db:"MetricDescription"`
+ MetricUnit string `db:"MetricUnit"`
+ Attributes map[string]string `db:"Attributes"`
+ StartTimeUnix string `db:"StartTimeUnix"`
+ TimeUnix string `db:"TimeUnix"`
+ Value float64 `db:"Value"`
+ Flags uint32 `db:"Flags"`
+ ExemplarsFilteredAttributes []map[string]string `db:"Exemplars.FilteredAttributes"`
+ ExemplarsTimeUnix []time.Time `db:"Exemplars.TimeUnix"`
+ ExemplarsValue []float64 `db:"Exemplars.Value"`
+ ExemplarsSpanID []string `db:"Exemplars.SpanId"`
+ ExemplarsTraceID []string `db:"Exemplars.TraceId"`
+ }
+
+ var actualGauge gauge
+
+ expectGauge := gauge{
+ ResourceAttributes: map[string]string{
+ "service.name": "demo 1",
+ "Resource Attributes 1": "value1",
+ },
+ ResourceSchemaURL: "Resource SchemaUrl 1",
+ ScopeName: "Scope name 1",
+ ScopeVersion: "Scope version 1",
+ ScopeDroppedAttrCount: 10,
+ ScopeSchemaURL: "Scope SchemaUrl 1",
+ ScopeAttributes: map[string]string{
+ "Scope Attributes 1": "value1",
+ },
+ ServiceName: "demo 1",
+ MetricName: "gauge metrics",
+ MetricDescription: "This is a gauge metrics",
+ MetricUnit: "count",
+ Attributes: map[string]string{
+ "gauge_label_1": "1",
+ },
+ StartTimeUnix: "2023-12-25T09:53:49Z",
+ TimeUnix: "2023-12-25T09:53:49Z",
+ Value: 0,
+ Flags: 0,
+ ExemplarsFilteredAttributes: []map[string]string{
+ {
+ "key": "value",
+ "key2": "value2",
+ },
+ },
+ ExemplarsTimeUnix: []time.Time{time.Unix(1703498029, 0).UTC()},
+ ExemplarsTraceID: []string{"01020300000000000000000000000000"},
+ ExemplarsSpanID: []string{"0102030000000000"},
+ ExemplarsValue: []float64{54},
+ }
+
+ err := db.Get(&actualGauge, "select * from default.otel_metrics_gauge")
+ require.NoError(t, err)
+ require.Equal(t, expectGauge, actualGauge)
+}
+
+func verifySumMetric(t *testing.T, db *sqlx.DB) {
+ type sum struct {
+ ResourceAttributes map[string]string `db:"ResourceAttributes"`
+ ResourceSchemaURL string `db:"ResourceSchemaUrl"`
+ ScopeName string `db:"ScopeName"`
+ ScopeVersion string `db:"ScopeVersion"`
+ ScopeAttributes map[string]string `db:"ScopeAttributes"`
+ ScopeDroppedAttrCount uint32 `db:"ScopeDroppedAttrCount"`
+ ScopeSchemaURL string `db:"ScopeSchemaUrl"`
+ ServiceName string `db:"ServiceName"`
+ MetricName string `db:"MetricName"`
+ MetricDescription string `db:"MetricDescription"`
+ MetricUnit string `db:"MetricUnit"`
+ Attributes map[string]string `db:"Attributes"`
+ StartTimeUnix string `db:"StartTimeUnix"`
+ TimeUnix string `db:"TimeUnix"`
+ Value float64 `db:"Value"`
+ Flags uint32 `db:"Flags"`
+ ExemplarsFilteredAttributes []map[string]string `db:"Exemplars.FilteredAttributes"`
+ ExemplarsTimeUnix []time.Time `db:"Exemplars.TimeUnix"`
+ ExemplarsValue []float64 `db:"Exemplars.Value"`
+ ExemplarsSpanID []string `db:"Exemplars.SpanId"`
+ ExemplarsTraceID []string `db:"Exemplars.TraceId"`
+ AggTemp int32 `db:"AggTemp"`
+ IsMonotonic bool `db:"IsMonotonic"`
+ }
+
+ var actualSum sum
+
+ expectSum := sum{
+ ResourceAttributes: map[string]string{
+ "service.name": "demo 1",
+ "Resource Attributes 1": "value1",
+ },
+ ResourceSchemaURL: "Resource SchemaUrl 1",
+ ScopeName: "Scope name 1",
+ ScopeVersion: "Scope version 1",
+ ScopeDroppedAttrCount: 10,
+ ScopeSchemaURL: "Scope SchemaUrl 1",
+ ScopeAttributes: map[string]string{
+ "Scope Attributes 1": "value1",
+ },
+ ServiceName: "demo 1",
+ MetricName: "sum metrics",
+ MetricDescription: "This is a sum metrics",
+ MetricUnit: "count",
+ Attributes: map[string]string{
+ "sum_label_1": "1",
+ },
+ StartTimeUnix: "2023-12-25T09:53:49Z",
+ TimeUnix: "2023-12-25T09:53:49Z",
+ Value: 11.234,
+ Flags: 0,
+ ExemplarsFilteredAttributes: []map[string]string{
+ {
+ "key": "value",
+ "key2": "value2",
+ },
+ },
+ ExemplarsTimeUnix: []time.Time{time.Unix(1703498029, 0).UTC()},
+ ExemplarsTraceID: []string{"01020300000000000000000000000000"},
+ ExemplarsSpanID: []string{"0102030000000000"},
+ ExemplarsValue: []float64{54},
+ }
+
+ err := db.Get(&actualSum, "select * from default.otel_metrics_sum")
+ require.NoError(t, err)
+ require.Equal(t, expectSum, actualSum)
+}
+
+func verifyHistogramMetric(t *testing.T, db *sqlx.DB) {
+ type sum struct {
+ ResourceAttributes map[string]string `db:"ResourceAttributes"`
+ ResourceSchemaURL string `db:"ResourceSchemaUrl"`
+ ScopeName string `db:"ScopeName"`
+ ScopeVersion string `db:"ScopeVersion"`
+ ScopeAttributes map[string]string `db:"ScopeAttributes"`
+ ScopeDroppedAttrCount uint32 `db:"ScopeDroppedAttrCount"`
+ ScopeSchemaURL string `db:"ScopeSchemaUrl"`
+ ServiceName string `db:"ServiceName"`
+ MetricName string `db:"MetricName"`
+ MetricDescription string `db:"MetricDescription"`
+ MetricUnit string `db:"MetricUnit"`
+ Attributes map[string]string `db:"Attributes"`
+ StartTimeUnix string `db:"StartTimeUnix"`
+ TimeUnix string `db:"TimeUnix"`
+ Count float64 `db:"Count"`
+ Sum float64 `db:"Sum"`
+ BucketCounts []uint64 `db:"BucketCounts"`
+ ExplicitBounds []float64 `db:"ExplicitBounds"`
+ ExemplarsFilteredAttributes []map[string]string `db:"Exemplars.FilteredAttributes"`
+ ExemplarsTimeUnix []time.Time `db:"Exemplars.TimeUnix"`
+ ExemplarsValue []float64 `db:"Exemplars.Value"`
+ ExemplarsSpanID []string `db:"Exemplars.SpanId"`
+ ExemplarsTraceID []string `db:"Exemplars.TraceId"`
+ Flags uint32 `db:"Flags"`
+ Min float64 `db:"Min"`
+ Max float64 `db:"Max"`
+ }
+
+ var actualSum sum
+
+ expectSum := sum{
+ ResourceAttributes: map[string]string{
+ "service.name": "demo 1",
+ "Resource Attributes 1": "value1",
+ },
+ ResourceSchemaURL: "Resource SchemaUrl 1",
+ ScopeName: "Scope name 1",
+ ScopeVersion: "Scope version 1",
+ ScopeDroppedAttrCount: 10,
+ ScopeSchemaURL: "Scope SchemaUrl 1",
+ ScopeAttributes: map[string]string{
+ "Scope Attributes 1": "value1",
+ },
+ ServiceName: "demo 1",
+ MetricName: "histogram metrics",
+ MetricDescription: "This is a histogram metrics",
+ MetricUnit: "ms",
+ Attributes: map[string]string{
+ "key": "value",
+ "key2": "value",
+ },
+ StartTimeUnix: "2023-12-25T09:53:49Z",
+ TimeUnix: "2023-12-25T09:53:49Z",
+ Count: 1,
+ Sum: 1,
+ BucketCounts: []uint64{0, 0, 0, 1, 0},
+ ExplicitBounds: []float64{0, 0, 0, 0, 0},
+ Flags: 0,
+ Min: 0,
+ Max: 1,
+ ExemplarsFilteredAttributes: []map[string]string{
+ {
+ "key": "value",
+ "key2": "value2",
+ },
+ },
+ ExemplarsTimeUnix: []time.Time{time.Unix(1703498029, 0).UTC()},
+ ExemplarsTraceID: []string{"01020300000000000000000000000000"},
+ ExemplarsSpanID: []string{"0102030000000000"},
+ ExemplarsValue: []float64{55.22},
+ }
+
+ err := db.Get(&actualSum, "select * from default.otel_metrics_histogram")
+ require.NoError(t, err)
+ require.Equal(t, expectSum, actualSum)
+}
+
+func verifyExphistogramMetric(t *testing.T, db *sqlx.DB) {
+ type sum struct {
+ ResourceAttributes map[string]string `db:"ResourceAttributes"`
+ ResourceSchemaURL string `db:"ResourceSchemaUrl"`
+ ScopeName string `db:"ScopeName"`
+ ScopeVersion string `db:"ScopeVersion"`
+ ScopeAttributes map[string]string `db:"ScopeAttributes"`
+ ScopeDroppedAttrCount uint32 `db:"ScopeDroppedAttrCount"`
+ ScopeSchemaURL string `db:"ScopeSchemaUrl"`
+ ServiceName string `db:"ServiceName"`
+ MetricName string `db:"MetricName"`
+ MetricDescription string `db:"MetricDescription"`
+ MetricUnit string `db:"MetricUnit"`
+ Attributes map[string]string `db:"Attributes"`
+ StartTimeUnix string `db:"StartTimeUnix"`
+ TimeUnix string `db:"TimeUnix"`
+ Count float64 `db:"Count"`
+ Sum float64 `db:"Sum"`
+ Scale int32 `db:"Scale"`
+ ZeroCount uint64 `db:"ZeroCount"`
+ PositiveOffset int32 `db:"PositiveOffset"`
+ PositiveBucketCounts []uint64 `db:"PositiveBucketCounts"`
+ NegativeOffset int32 `db:"NegativeOffset"`
+ NegativeBucketCounts []uint64 `db:"NegativeBucketCounts"`
+ ExemplarsFilteredAttributes []map[string]string `db:"Exemplars.FilteredAttributes"`
+ ExemplarsTimeUnix []time.Time `db:"Exemplars.TimeUnix"`
+ ExemplarsValue []float64 `db:"Exemplars.Value"`
+ ExemplarsSpanID []string `db:"Exemplars.SpanId"`
+ ExemplarsTraceID []string `db:"Exemplars.TraceId"`
+ Flags uint32 `db:"Flags"`
+ Min float64 `db:"Min"`
+ Max float64 `db:"Max"`
+ }
+
+ var actualSum sum
+
+ expectSum := sum{
+ ResourceAttributes: map[string]string{
+ "service.name": "demo 1",
+ "Resource Attributes 1": "value1",
+ },
+ ResourceSchemaURL: "Resource SchemaUrl 1",
+ ScopeName: "Scope name 1",
+ ScopeVersion: "Scope version 1",
+ ScopeDroppedAttrCount: 10,
+ ScopeSchemaURL: "Scope SchemaUrl 1",
+ ScopeAttributes: map[string]string{
+ "Scope Attributes 1": "value1",
+ },
+ ServiceName: "demo 1",
+ MetricName: "exp histogram metrics",
+ MetricDescription: "This is a exp histogram metrics",
+ MetricUnit: "ms",
+ Attributes: map[string]string{
+ "key": "value",
+ "key2": "value",
+ },
+ StartTimeUnix: "2023-12-25T09:53:49Z",
+ TimeUnix: "2023-12-25T09:53:49Z",
+ Count: 1,
+ Sum: 1,
+ Scale: 0,
+ ZeroCount: 0,
+ PositiveOffset: 1,
+ PositiveBucketCounts: []uint64{0, 0, 0, 1, 0},
+ NegativeOffset: 1,
+ NegativeBucketCounts: []uint64{0, 0, 0, 1, 0},
+ Flags: 0,
+ Min: 0,
+ Max: 1,
+ ExemplarsFilteredAttributes: []map[string]string{
+ {
+ "key": "value",
+ "key2": "value2",
+ },
+ },
+ ExemplarsTimeUnix: []time.Time{time.Unix(1703498029, 0).UTC()},
+ ExemplarsTraceID: []string{"01020300000000000000000000000000"},
+ ExemplarsSpanID: []string{"0102030000000000"},
+ ExemplarsValue: []float64{54},
+ }
+
+ err := db.Get(&actualSum, "select * from default.otel_metrics_exponential_histogram")
+ require.NoError(t, err)
+ require.Equal(t, expectSum, actualSum)
+}
+
+func verifySummaryMetric(t *testing.T, db *sqlx.DB) {
+ type sum struct {
+ ResourceAttributes map[string]string `db:"ResourceAttributes"`
+ ResourceSchemaURL string `db:"ResourceSchemaUrl"`
+ ScopeName string `db:"ScopeName"`
+ ScopeVersion string `db:"ScopeVersion"`
+ ScopeAttributes map[string]string `db:"ScopeAttributes"`
+ ScopeDroppedAttrCount uint32 `db:"ScopeDroppedAttrCount"`
+ ScopeSchemaURL string `db:"ScopeSchemaUrl"`
+ ServiceName string `db:"ServiceName"`
+ MetricName string `db:"MetricName"`
+ MetricDescription string `db:"MetricDescription"`
+ MetricUnit string `db:"MetricUnit"`
+ Attributes map[string]string `db:"Attributes"`
+ StartTimeUnix string `db:"StartTimeUnix"`
+ TimeUnix string `db:"TimeUnix"`
+ Count float64 `db:"Count"`
+ Sum float64 `db:"Sum"`
+ Quantile []float64 `db:"ValueAtQuantiles.Quantile"`
+ QuantilesValue []float64 `db:"ValueAtQuantiles.Value"`
+ Flags uint32 `db:"Flags"`
+ }
+
+ var actualSum sum
+
+ expectSum := sum{
+ ResourceAttributes: map[string]string{
+ "service.name": "demo 1",
+ "Resource Attributes 1": "value1",
+ },
+ ResourceSchemaURL: "Resource SchemaUrl 1",
+ ScopeName: "Scope name 1",
+ ScopeVersion: "Scope version 1",
+ ScopeDroppedAttrCount: 10,
+ ScopeSchemaURL: "Scope SchemaUrl 1",
+ ScopeAttributes: map[string]string{
+ "Scope Attributes 1": "value1",
+ },
+ ServiceName: "demo 1",
+ MetricName: "summary metrics",
+ MetricDescription: "This is a summary metrics",
+ MetricUnit: "ms",
+ Attributes: map[string]string{
+ "key": "value",
+ "key2": "value",
+ },
+ StartTimeUnix: "2023-12-25T09:53:49Z",
+ TimeUnix: "2023-12-25T09:53:49Z",
+ Count: 1,
+ Sum: 1,
+ Quantile: []float64{1},
+ QuantilesValue: []float64{1},
+ Flags: 0,
+ }
+
+ err := db.Get(&actualSum, "select * from default.otel_metrics_summary")
+ require.NoError(t, err)
+ require.Equal(t, expectSum, actualSum)
+}
+
+func randPort() string {
+ rs := rand.NewSource(time.Now().Unix())
+ r := rand.New(rs)
+ return strconv.Itoa(r.Intn(999) + 9000)
+}
diff --git a/exporter/clickhouseexporter/internal/exponential_histogram_metrics.go b/exporter/clickhouseexporter/internal/exponential_histogram_metrics.go
index 421d967cd61c..f6212e4e0886 100644
--- a/exporter/clickhouseexporter/internal/exponential_histogram_metrics.go
+++ b/exporter/clickhouseexporter/internal/exponential_histogram_metrics.go
@@ -11,13 +11,14 @@ import (
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
+ conventions "go.opentelemetry.io/collector/semconv/v1.18.0"
"go.uber.org/zap"
)
const (
// language=ClickHouse SQL
createExpHistogramTableSQL = `
-CREATE TABLE IF NOT EXISTS %s_exponential_histogram (
+CREATE TABLE IF NOT EXISTS %s_exponential_histogram %s (
ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ResourceSchemaUrl String CODEC(ZSTD(1)),
ScopeName String CODEC(ZSTD(1)),
@@ -25,6 +26,7 @@ CREATE TABLE IF NOT EXISTS %s_exponential_histogram (
ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)),
ScopeSchemaUrl String CODEC(ZSTD(1)),
+ ServiceName LowCardinality(String) CODEC(ZSTD(1)),
MetricName String CODEC(ZSTD(1)),
MetricDescription String CODEC(ZSTD(1)),
MetricUnit String CODEC(ZSTD(1)),
@@ -55,10 +57,10 @@ CREATE TABLE IF NOT EXISTS %s_exponential_histogram (
INDEX idx_scope_attr_value mapValues(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
PARTITION BY toDate(TimeUnix)
-ORDER BY (MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
+ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
`
// language=ClickHouse SQL
@@ -70,6 +72,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
ScopeAttributes,
ScopeDroppedAttrCount,
ScopeSchemaUrl,
+ ServiceName,
MetricName,
MetricDescription,
MetricUnit,
@@ -77,7 +80,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
StartTimeUnix,
TimeUnix,
Count,
- Sum,
+ Sum,
Scale,
ZeroCount,
PositiveOffset,
@@ -91,7 +94,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
Exemplars.TraceId,
Flags,
Min,
- Max) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
+ Max) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
)
type expHistogramModel struct {
@@ -125,6 +128,11 @@ func (e *expHistogramMetrics) insert(ctx context.Context, db *sql.DB) error {
}()
for _, model := range e.expHistogramModels {
+ var serviceName string
+ if v, ok := model.metadata.ResAttr[conventions.AttributeServiceName]; ok {
+ serviceName = v
+ }
+
for i := 0; i < model.expHistogram.DataPoints().Len(); i++ {
dp := model.expHistogram.DataPoints().At(i)
@@ -137,6 +145,7 @@ func (e *expHistogramMetrics) insert(ctx context.Context, db *sql.DB) error {
attributesToMap(model.metadata.ScopeInstr.Attributes()),
model.metadata.ScopeInstr.DroppedAttributesCount(),
model.metadata.ScopeURL,
+ serviceName,
model.metricName,
model.metricDescription,
model.metricUnit,
@@ -154,8 +163,8 @@ func (e *expHistogramMetrics) insert(ctx context.Context, db *sql.DB) error {
attrs,
times,
values,
- traceIDs,
spanIDs,
+ traceIDs,
uint32(dp.Flags()),
dp.Min(),
dp.Max(),
diff --git a/exporter/clickhouseexporter/internal/gauge_metrics.go b/exporter/clickhouseexporter/internal/gauge_metrics.go
index d16caa78f56a..a45121ccaa95 100644
--- a/exporter/clickhouseexporter/internal/gauge_metrics.go
+++ b/exporter/clickhouseexporter/internal/gauge_metrics.go
@@ -11,13 +11,14 @@ import (
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
+ conventions "go.opentelemetry.io/collector/semconv/v1.18.0"
"go.uber.org/zap"
)
const (
// language=ClickHouse SQL
createGaugeTableSQL = `
-CREATE TABLE IF NOT EXISTS %s_gauge (
+CREATE TABLE IF NOT EXISTS %s_gauge %s (
ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ResourceSchemaUrl String CODEC(ZSTD(1)),
ScopeName String CODEC(ZSTD(1)),
@@ -25,6 +26,7 @@ CREATE TABLE IF NOT EXISTS %s_gauge (
ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)),
ScopeSchemaUrl String CODEC(ZSTD(1)),
+ ServiceName LowCardinality(String) CODEC(ZSTD(1)),
MetricName String CODEC(ZSTD(1)),
MetricDescription String CODEC(ZSTD(1)),
MetricUnit String CODEC(ZSTD(1)),
@@ -46,10 +48,10 @@ CREATE TABLE IF NOT EXISTS %s_gauge (
INDEX idx_scope_attr_value mapValues(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
PARTITION BY toDate(TimeUnix)
-ORDER BY (MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
+ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
`
// language=ClickHouse SQL
@@ -61,6 +63,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
ScopeAttributes,
ScopeDroppedAttrCount,
ScopeSchemaUrl,
+ ServiceName,
MetricName,
MetricDescription,
MetricUnit,
@@ -73,7 +76,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
Exemplars.TimeUnix,
Exemplars.Value,
Exemplars.SpanId,
- Exemplars.TraceId) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
+ Exemplars.TraceId) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
)
type gaugeModel struct {
@@ -106,6 +109,11 @@ func (g *gaugeMetrics) insert(ctx context.Context, db *sql.DB) error {
}()
for _, model := range g.gaugeModels {
+ var serviceName string
+ if v, ok := model.metadata.ResAttr[conventions.AttributeServiceName]; ok {
+ serviceName = v
+ }
+
for i := 0; i < model.gauge.DataPoints().Len(); i++ {
dp := model.gauge.DataPoints().At(i)
attrs, times, values, traceIDs, spanIDs := convertExemplars(dp.Exemplars())
@@ -117,6 +125,7 @@ func (g *gaugeMetrics) insert(ctx context.Context, db *sql.DB) error {
attributesToMap(model.metadata.ScopeInstr.Attributes()),
model.metadata.ScopeInstr.DroppedAttributesCount(),
model.metadata.ScopeURL,
+ serviceName,
model.metricName,
model.metricDescription,
model.metricUnit,
@@ -128,8 +137,8 @@ func (g *gaugeMetrics) insert(ctx context.Context, db *sql.DB) error {
attrs,
times,
values,
- traceIDs,
spanIDs,
+ traceIDs,
)
if err != nil {
return fmt.Errorf("ExecContext:%w", err)
diff --git a/exporter/clickhouseexporter/internal/histogram_metrics.go b/exporter/clickhouseexporter/internal/histogram_metrics.go
index 0ce19fe4d08b..905b571e5c9a 100644
--- a/exporter/clickhouseexporter/internal/histogram_metrics.go
+++ b/exporter/clickhouseexporter/internal/histogram_metrics.go
@@ -11,13 +11,14 @@ import (
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
+ conventions "go.opentelemetry.io/collector/semconv/v1.18.0"
"go.uber.org/zap"
)
const (
// language=ClickHouse SQL
createHistogramTableSQL = `
-CREATE TABLE IF NOT EXISTS %s_histogram (
+CREATE TABLE IF NOT EXISTS %s_histogram %s (
ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ResourceSchemaUrl String CODEC(ZSTD(1)),
ScopeName String CODEC(ZSTD(1)),
@@ -25,6 +26,7 @@ CREATE TABLE IF NOT EXISTS %s_histogram (
ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)),
ScopeSchemaUrl String CODEC(ZSTD(1)),
+ ServiceName LowCardinality(String) CODEC(ZSTD(1)),
MetricName String CODEC(ZSTD(1)),
MetricDescription String CODEC(ZSTD(1)),
MetricUnit String CODEC(ZSTD(1)),
@@ -51,10 +53,10 @@ CREATE TABLE IF NOT EXISTS %s_histogram (
INDEX idx_scope_attr_value mapValues(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
PARTITION BY toDate(TimeUnix)
-ORDER BY (MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
+ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
`
// language=ClickHouse SQL
@@ -66,6 +68,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
ScopeAttributes,
ScopeDroppedAttrCount,
ScopeSchemaUrl,
+ ServiceName,
MetricName,
MetricDescription,
MetricUnit,
@@ -83,7 +86,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
Exemplars.TraceId,
Flags,
Min,
- Max) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
+ Max) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
)
type histogramModel struct {
@@ -116,6 +119,11 @@ func (h *histogramMetrics) insert(ctx context.Context, db *sql.DB) error {
}()
for _, model := range h.histogramModel {
+ var serviceName string
+ if v, ok := model.metadata.ResAttr[conventions.AttributeServiceName]; ok {
+ serviceName = v
+ }
+
for i := 0; i < model.histogram.DataPoints().Len(); i++ {
dp := model.histogram.DataPoints().At(i)
attrs, times, values, traceIDs, spanIDs := convertExemplars(dp.Exemplars())
@@ -127,6 +135,7 @@ func (h *histogramMetrics) insert(ctx context.Context, db *sql.DB) error {
attributesToMap(model.metadata.ScopeInstr.Attributes()),
model.metadata.ScopeInstr.DroppedAttributesCount(),
model.metadata.ScopeURL,
+ serviceName,
model.metricName,
model.metricDescription,
model.metricUnit,
@@ -140,8 +149,8 @@ func (h *histogramMetrics) insert(ctx context.Context, db *sql.DB) error {
attrs,
times,
values,
- traceIDs,
spanIDs,
+ traceIDs,
uint32(dp.Flags()),
dp.Min(),
dp.Max(),
diff --git a/exporter/clickhouseexporter/internal/metadata/generated_status.go b/exporter/clickhouseexporter/internal/metadata/generated_status.go
index 4e0bd1ba6553..75291bdd50e0 100644
--- a/exporter/clickhouseexporter/internal/metadata/generated_status.go
+++ b/exporter/clickhouseexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("clickhouse")
)
const (
- Type = "clickhouse"
TracesStability = component.StabilityLevelAlpha
MetricsStability = component.StabilityLevelAlpha
LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/clickhouse")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/clickhouse")
+}
diff --git a/exporter/clickhouseexporter/internal/metrics_model.go b/exporter/clickhouseexporter/internal/metrics_model.go
index 52641aae7dd0..b4a1e6a3ab71 100644
--- a/exporter/clickhouseexporter/internal/metrics_model.go
+++ b/exporter/clickhouseexporter/internal/metrics_model.go
@@ -51,13 +51,9 @@ func SetLogger(l *zap.Logger) {
}
// NewMetricsTable create metric tables with an expiry time to storage metric telemetry data
-func NewMetricsTable(ctx context.Context, tableName string, ttlDays uint, db *sql.DB) error {
- var ttlExpr string
- if ttlDays > 0 {
- ttlExpr = fmt.Sprintf(`TTL toDateTime(TimeUnix) + toIntervalDay(%d)`, ttlDays)
- }
+func NewMetricsTable(ctx context.Context, tableName, cluster, engine, ttlExpr string, db *sql.DB) error {
for table := range supportedMetricTypes {
- query := fmt.Sprintf(table, tableName, ttlExpr)
+ query := fmt.Sprintf(table, tableName, cluster, engine, ttlExpr)
if _, err := db.ExecContext(ctx, query); err != nil {
return fmt.Errorf("exec create metrics table sql: %w", err)
}
diff --git a/exporter/clickhouseexporter/internal/package_test.go b/exporter/clickhouseexporter/internal/package_test.go
new file mode 100644
index 000000000000..4486cdb28aa6
--- /dev/null
+++ b/exporter/clickhouseexporter/internal/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package internal
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/clickhouseexporter/internal/sum_metrics.go b/exporter/clickhouseexporter/internal/sum_metrics.go
index 69f9a9d1d5d5..3276dae3a23a 100644
--- a/exporter/clickhouseexporter/internal/sum_metrics.go
+++ b/exporter/clickhouseexporter/internal/sum_metrics.go
@@ -11,13 +11,14 @@ import (
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
+ conventions "go.opentelemetry.io/collector/semconv/v1.18.0"
"go.uber.org/zap"
)
const (
// language=ClickHouse SQL
createSumTableSQL = `
-CREATE TABLE IF NOT EXISTS %s_sum (
+CREATE TABLE IF NOT EXISTS %s_sum %s (
ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ResourceSchemaUrl String CODEC(ZSTD(1)),
ScopeName String CODEC(ZSTD(1)),
@@ -25,6 +26,7 @@ CREATE TABLE IF NOT EXISTS %s_sum (
ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)),
ScopeSchemaUrl String CODEC(ZSTD(1)),
+ ServiceName LowCardinality(String) CODEC(ZSTD(1)),
MetricName String CODEC(ZSTD(1)),
MetricDescription String CODEC(ZSTD(1)),
MetricUnit String CODEC(ZSTD(1)),
@@ -48,10 +50,10 @@ CREATE TABLE IF NOT EXISTS %s_sum (
INDEX idx_scope_attr_value mapValues(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
PARTITION BY toDate(TimeUnix)
-ORDER BY (MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
+ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
`
// language=ClickHouse SQL
@@ -63,6 +65,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
ScopeAttributes,
ScopeDroppedAttrCount,
ScopeSchemaUrl,
+ ServiceName,
MetricName,
MetricDescription,
MetricUnit,
@@ -77,7 +80,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
Exemplars.SpanId,
Exemplars.TraceId,
AggTemp,
- IsMonotonic) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
+ IsMonotonic) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
)
type sumModel struct {
@@ -110,6 +113,11 @@ func (s *sumMetrics) insert(ctx context.Context, db *sql.DB) error {
}()
for _, model := range s.sumModel {
+ var serviceName string
+ if v, ok := model.metadata.ResAttr[conventions.AttributeServiceName]; ok {
+ serviceName = v
+ }
+
for i := 0; i < model.sum.DataPoints().Len(); i++ {
dp := model.sum.DataPoints().At(i)
attrs, times, values, traceIDs, spanIDs := convertExemplars(dp.Exemplars())
@@ -121,6 +129,7 @@ func (s *sumMetrics) insert(ctx context.Context, db *sql.DB) error {
attributesToMap(model.metadata.ScopeInstr.Attributes()),
model.metadata.ScopeInstr.DroppedAttributesCount(),
model.metadata.ScopeURL,
+ serviceName,
model.metricName,
model.metricDescription,
model.metricUnit,
@@ -132,8 +141,8 @@ func (s *sumMetrics) insert(ctx context.Context, db *sql.DB) error {
attrs,
times,
values,
- traceIDs,
spanIDs,
+ traceIDs,
int32(model.sum.AggregationTemporality()),
model.sum.IsMonotonic(),
)
diff --git a/exporter/clickhouseexporter/internal/summary_metrics.go b/exporter/clickhouseexporter/internal/summary_metrics.go
index a62c9cdb697f..5f3ca7beab8e 100644
--- a/exporter/clickhouseexporter/internal/summary_metrics.go
+++ b/exporter/clickhouseexporter/internal/summary_metrics.go
@@ -11,13 +11,14 @@ import (
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
+ conventions "go.opentelemetry.io/collector/semconv/v1.18.0"
"go.uber.org/zap"
)
const (
// language=ClickHouse SQL
createSummaryTableSQL = `
-CREATE TABLE IF NOT EXISTS %s_summary (
+CREATE TABLE IF NOT EXISTS %s_summary %s (
ResourceAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ResourceSchemaUrl String CODEC(ZSTD(1)),
ScopeName String CODEC(ZSTD(1)),
@@ -25,6 +26,7 @@ CREATE TABLE IF NOT EXISTS %s_summary (
ScopeAttributes Map(LowCardinality(String), String) CODEC(ZSTD(1)),
ScopeDroppedAttrCount UInt32 CODEC(ZSTD(1)),
ScopeSchemaUrl String CODEC(ZSTD(1)),
+ ServiceName LowCardinality(String) CODEC(ZSTD(1)),
MetricName String CODEC(ZSTD(1)),
MetricDescription String CODEC(ZSTD(1)),
MetricUnit String CODEC(ZSTD(1)),
@@ -44,10 +46,10 @@ CREATE TABLE IF NOT EXISTS %s_summary (
INDEX idx_scope_attr_value mapValues(ScopeAttributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_key mapKeys(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1,
INDEX idx_attr_value mapValues(Attributes) TYPE bloom_filter(0.01) GRANULARITY 1
-) ENGINE MergeTree()
+) ENGINE = %s
%s
PARTITION BY toDate(TimeUnix)
-ORDER BY (MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
+ORDER BY (ServiceName, MetricName, Attributes, toUnixTimestamp64Nano(TimeUnix))
SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
`
// language=ClickHouse SQL
@@ -59,6 +61,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
ScopeAttributes,
ScopeDroppedAttrCount,
ScopeSchemaUrl,
+ ServiceName,
MetricName,
MetricDescription,
MetricUnit,
@@ -69,7 +72,7 @@ SETTINGS index_granularity=8192, ttl_only_drop_parts = 1;
Sum,
ValueAtQuantiles.Quantile,
ValueAtQuantiles.Value,
- Flags) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
+ Flags) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)`
)
type summaryModel struct {
@@ -100,6 +103,11 @@ func (s *summaryMetrics) insert(ctx context.Context, db *sql.DB) error {
_ = statement.Close()
}()
for _, model := range s.summaryModel {
+ var serviceName string
+ if v, ok := model.metadata.ResAttr[conventions.AttributeServiceName]; ok {
+ serviceName = v
+ }
+
for i := 0; i < model.summary.DataPoints().Len(); i++ {
dp := model.summary.DataPoints().At(i)
quantiles, values := convertValueAtQuantile(dp.QuantileValues())
@@ -112,6 +120,7 @@ func (s *summaryMetrics) insert(ctx context.Context, db *sql.DB) error {
attributesToMap(model.metadata.ScopeInstr.Attributes()),
model.metadata.ScopeInstr.DroppedAttributesCount(),
model.metadata.ScopeURL,
+ serviceName,
model.metricName,
model.metricDescription,
model.metricUnit,
diff --git a/exporter/clickhouseexporter/metadata.yaml b/exporter/clickhouseexporter/metadata.yaml
index 06a13bf01b99..51646315c0e9 100644
--- a/exporter/clickhouseexporter/metadata.yaml
+++ b/exporter/clickhouseexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: clickhouse
+scope_name: otelcol/clickhouse
status:
class: exporter
@@ -6,4 +7,8 @@ status:
alpha: [traces, metrics, logs]
distributions: [contrib]
codeowners:
- active: [hanjm, dmitryax, Frapschen]
+ active: [hanjm, dmitryax, Frapschen, SpencerTorres]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
diff --git a/exporter/clickhouseexporter/package_test.go b/exporter/clickhouseexporter/package_test.go
new file mode 100644
index 000000000000..29f6b7cbb77e
--- /dev/null
+++ b/exporter/clickhouseexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package clickhouseexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/clickhouseexporter/testdata/config.yaml b/exporter/clickhouseexporter/testdata/config.yaml
index 573fbe923738..1531e4578782 100644
--- a/exporter/clickhouseexporter/testdata/config.yaml
+++ b/exporter/clickhouseexporter/testdata/config.yaml
@@ -5,7 +5,7 @@ clickhouse/full:
username: foo
password: bar
database: otel
- ttl_days: 3
+ ttl: 72h
logs_table_name: otel_logs
traces_table_name: otel_traces
timeout: 5s
@@ -19,3 +19,19 @@ clickhouse/full:
storage: file_storage/clickhouse
clickhouse/invalid-endpoint:
endpoint: 127.0.0.1:9000
+
+clickhouse/table-engine-empty:
+ endpoint: clickhouse://127.0.0.1:9000
+clickhouse/table-engine-name-only:
+ endpoint: clickhouse://127.0.0.1:9000
+ table_engine:
+ name: ReplicatedReplacingMergeTree
+clickhouse/table-engine-full:
+ endpoint: clickhouse://127.0.0.1:9000
+ table_engine:
+ name: ReplicatedReplacingMergeTree
+ params: "'/clickhouse/tables/{shard}/table_name', '{replica}', ver"
+clickhouse/table-engine-params-only:
+ endpoint: clickhouse://127.0.0.1:9000
+ table_engine:
+ params: "whatever"
diff --git a/exporter/coralogixexporter/README.md b/exporter/coralogixexporter/README.md
index aa421d3fe5bd..3c0e1e31d666 100644
--- a/exporter/coralogixexporter/README.md
+++ b/exporter/coralogixexporter/README.md
@@ -3,16 +3,13 @@
| Status | |
| ------------- |-----------|
-| Stability | [alpha]: logs |
-| | [beta]: traces, metrics |
-| Distributions | [contrib], [observiq] |
+| Stability | [beta]: traces, metrics, logs |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fcoralogix%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fcoralogix) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fcoralogix%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fcoralogix) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@povilasv](https://www.github.com/povilasv), [@matej-g](https://www.github.com/matej-g) |
-[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
The Coralogix exporter sends traces, metrics and logs to [Coralogix](https://coralogix.com/).
diff --git a/exporter/coralogixexporter/config.go b/exporter/coralogixexporter/config.go
index d1777366ceee..d37da458fea6 100644
--- a/exporter/coralogixexporter/config.go
+++ b/exporter/coralogixexporter/config.go
@@ -8,6 +8,7 @@ import (
"go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/pdata/pcommon"
)
@@ -20,27 +21,27 @@ const (
// Config defines by Coralogix.
type Config struct {
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
exporterhelper.TimeoutSettings `mapstructure:",squash"`
// Coralogix domain
Domain string `mapstructure:"domain"`
// GRPC Settings used with Domain
- DomainSettings configgrpc.GRPCClientSettings `mapstructure:"domain_settings"`
+ DomainSettings configgrpc.ClientConfig `mapstructure:"domain_settings"`
// Deprecated: [v0.60.0] Coralogix jaeger based trace endpoint
// will be removed in the next version
// Please use OTLP endpoint using traces.endpoint
- configgrpc.GRPCClientSettings `mapstructure:",squash"`
+ configgrpc.ClientConfig `mapstructure:",squash"`
// Coralogix traces ingress endpoint
- Traces configgrpc.GRPCClientSettings `mapstructure:"traces"`
+ Traces configgrpc.ClientConfig `mapstructure:"traces"`
// The Coralogix metrics ingress endpoint
- Metrics configgrpc.GRPCClientSettings `mapstructure:"metrics"`
+ Metrics configgrpc.ClientConfig `mapstructure:"metrics"`
// The Coralogix logs ingress endpoint
- Logs configgrpc.GRPCClientSettings `mapstructure:"logs"`
+ Logs configgrpc.ClientConfig `mapstructure:"logs"`
// Your Coralogix private key (sensitive) for authentication
PrivateKey configopaque.String `mapstructure:"private_key"`
@@ -71,18 +72,18 @@ func (c *Config) Validate() error {
return fmt.Errorf("`domain` or `traces.endpoint` or `metrics.endpoint` or `logs.endpoint` not specified, please fix the configuration")
}
if c.PrivateKey == "" {
- return fmt.Errorf("`privateKey` not specified, please fix the configuration")
+ return fmt.Errorf("`private_key` not specified, please fix the configuration")
}
if c.AppName == "" {
- return fmt.Errorf("`appName` not specified, please fix the configuration")
+ return fmt.Errorf("`application_name` not specified, please fix the configuration")
}
// check if headers exists
- if len(c.GRPCClientSettings.Headers) == 0 {
- c.GRPCClientSettings.Headers = make(map[string]configopaque.String)
+ if len(c.ClientConfig.Headers) == 0 {
+ c.ClientConfig.Headers = make(map[string]configopaque.String)
}
- c.GRPCClientSettings.Headers["ACCESS_TOKEN"] = c.PrivateKey
- c.GRPCClientSettings.Headers["appName"] = configopaque.String(c.AppName)
+ c.ClientConfig.Headers["ACCESS_TOKEN"] = c.PrivateKey
+ c.ClientConfig.Headers["appName"] = configopaque.String(c.AppName)
return nil
}
@@ -115,7 +116,7 @@ func (c *Config) getMetadataFromResource(res pcommon.Resource) (appName, subsyst
return appName, subsystem
}
-func (c *Config) getDomainGrpcSettings() *configgrpc.GRPCClientSettings {
+func (c *Config) getDomainGrpcSettings() *configgrpc.ClientConfig {
settings := c.DomainSettings
settings.Endpoint = fmt.Sprintf("ingress.%s:443", c.Domain)
return &settings
diff --git a/exporter/coralogixexporter/config_test.go b/exporter/coralogixexporter/config_test.go
index 766a9a7790dd..139f88aa1022 100644
--- a/exporter/coralogixexporter/config_test.go
+++ b/exporter/coralogixexporter/config_test.go
@@ -15,6 +15,7 @@ import (
"go.opentelemetry.io/collector/config/configcompression"
"go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -38,29 +39,29 @@ func TestLoadConfig(t *testing.T) {
id: component.NewIDWithName(metadata.Type, ""),
expected: &Config{
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
PrivateKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
AppName: "APP_NAME",
// Deprecated: [v0.47.0] SubSystem will remove in the next version
SubSystem: "SUBSYSTEM_NAME",
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- DomainSettings: configgrpc.GRPCClientSettings{
- Compression: configcompression.Gzip,
+ DomainSettings: configgrpc.ClientConfig{
+ Compression: configcompression.TypeGzip,
},
- Metrics: configgrpc.GRPCClientSettings{
+ Metrics: configgrpc.ClientConfig{
Endpoint: "https://",
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
WriteBufferSize: 512 * 1024,
},
- Logs: configgrpc.GRPCClientSettings{
+ Logs: configgrpc.ClientConfig{
Endpoint: "https://",
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
- Compression: configcompression.Gzip,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{},
+ Compression: configcompression.TypeGzip,
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{},
Insecure: false,
InsecureSkipVerify: false,
ServerName: "",
@@ -70,10 +71,10 @@ func TestLoadConfig(t *testing.T) {
WaitForReady: false,
BalancerName: "",
},
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: "https://",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{},
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{},
Insecure: false,
InsecureSkipVerify: false,
ServerName: "",
@@ -93,29 +94,29 @@ func TestLoadConfig(t *testing.T) {
id: component.NewIDWithName(metadata.Type, "all"),
expected: &Config{
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
PrivateKey: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
AppName: "APP_NAME",
// Deprecated: [v0.47.0] SubSystem will remove in the next version
SubSystem: "SUBSYSTEM_NAME",
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- DomainSettings: configgrpc.GRPCClientSettings{
- Compression: configcompression.Gzip,
+ DomainSettings: configgrpc.ClientConfig{
+ Compression: configcompression.TypeGzip,
},
- Metrics: configgrpc.GRPCClientSettings{
+ Metrics: configgrpc.ClientConfig{
Endpoint: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
WriteBufferSize: 512 * 1024,
},
- Logs: configgrpc.GRPCClientSettings{
+ Logs: configgrpc.ClientConfig{
Endpoint: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
- Compression: configcompression.Gzip,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{},
+ Compression: configcompression.TypeGzip,
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{},
Insecure: false,
InsecureSkipVerify: false,
ServerName: "",
@@ -127,10 +128,10 @@ func TestLoadConfig(t *testing.T) {
},
AppNameAttributes: []string{"service.namespace", "k8s.namespace.name"},
SubSystemAttributes: []string{"service.name", "k8s.deployment.name", "k8s.statefulset.name", "k8s.daemonset.name", "k8s.cronjob.name", "k8s.job.name", "k8s.container.name"},
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: "https://",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{},
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{},
Insecure: false,
InsecureSkipVerify: false,
ServerName: "",
@@ -178,6 +179,7 @@ func TestTraceExporter(t *testing.T) {
assert.NoError(t, err)
assert.NotNil(t, te, "failed to create trace exporter")
assert.NoError(t, te.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, te.shutdown(context.Background()))
}
func TestMetricsExporter(t *testing.T) {
@@ -197,6 +199,7 @@ func TestMetricsExporter(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, me, "failed to create metrics exporter")
require.NoError(t, me.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, me.shutdown(context.Background()))
}
func TestLogsExporter(t *testing.T) {
@@ -212,10 +215,11 @@ func TestLogsExporter(t *testing.T) {
params := exportertest.NewNopCreateSettings()
- me, err := newLogsExporter(cfg, params)
+ le, err := newLogsExporter(cfg, params)
require.NoError(t, err)
- require.NotNil(t, me, "failed to create logs exporter")
- require.NoError(t, me.start(context.Background(), componenttest.NewNopHost()))
+ require.NotNil(t, le, "failed to create logs exporter")
+ require.NoError(t, le.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, le.shutdown(context.Background()))
}
func TestDomainWithAllExporters(t *testing.T) {
@@ -233,16 +237,19 @@ func TestDomainWithAllExporters(t *testing.T) {
assert.NoError(t, err)
assert.NotNil(t, te, "failed to create trace exporter")
assert.NoError(t, te.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, te.shutdown(context.Background()))
me, err := newMetricsExporter(cfg, params)
require.NoError(t, err)
require.NotNil(t, me, "failed to create metrics exporter")
require.NoError(t, me.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, me.shutdown(context.Background()))
le, err := newLogsExporter(cfg, params)
require.NoError(t, err)
require.NotNil(t, le, "failed to create logs exporter")
require.NoError(t, le.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, le.shutdown(context.Background()))
}
func TestEndpoindsAndDomainWithAllExporters(t *testing.T) {
@@ -260,16 +267,19 @@ func TestEndpoindsAndDomainWithAllExporters(t *testing.T) {
assert.NoError(t, err)
assert.NotNil(t, te, "failed to create trace exporter")
assert.NoError(t, te.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, te.shutdown(context.Background()))
me, err := newMetricsExporter(cfg, params)
require.NoError(t, err)
require.NotNil(t, me, "failed to create metrics exporter")
require.NoError(t, me.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, me.shutdown(context.Background()))
le, err := newLogsExporter(cfg, params)
require.NoError(t, err)
require.NotNil(t, le, "failed to create logs exporter")
require.NoError(t, le.start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, le.shutdown(context.Background()))
}
func TestGetMetadataFromResource(t *testing.T) {
diff --git a/exporter/coralogixexporter/factory.go b/exporter/coralogixexporter/factory.go
index 7d9de6b677ea..961d93b91ba8 100644
--- a/exporter/coralogixexporter/factory.go
+++ b/exporter/coralogixexporter/factory.go
@@ -11,6 +11,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configcompression"
"go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -32,28 +33,28 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- DomainSettings: configgrpc.GRPCClientSettings{
- Compression: configcompression.Gzip,
+ DomainSettings: configgrpc.ClientConfig{
+ Compression: configcompression.TypeGzip,
},
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: "https://",
},
// Traces GRPC client
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: "https://",
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
- Metrics: configgrpc.GRPCClientSettings{
+ Metrics: configgrpc.ClientConfig{
Endpoint: "https://",
// Default to gzip compression
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
WriteBufferSize: 512 * 1024,
},
- Logs: configgrpc.GRPCClientSettings{
+ Logs: configgrpc.ClientConfig{
Endpoint: "https://",
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
PrivateKey: "",
AppName: "",
@@ -75,7 +76,7 @@ func createTraceExporter(ctx context.Context, set exporter.CreateSettings, confi
exporter.pushTraces,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: true}),
exporterhelper.WithTimeout(cfg.TimeoutSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithStart(exporter.start),
exporterhelper.WithShutdown(exporter.shutdown),
@@ -99,7 +100,7 @@ func createMetricsExporter(
oce.pushMetrics,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: true}),
exporterhelper.WithTimeout(oCfg.TimeoutSettings),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
exporterhelper.WithStart(oce.start),
exporterhelper.WithShutdown(oce.shutdown),
@@ -123,7 +124,7 @@ func createLogsExporter(
oce.pushLogs,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: true}),
exporterhelper.WithTimeout(oCfg.TimeoutSettings),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
exporterhelper.WithStart(oce.start),
exporterhelper.WithShutdown(oce.shutdown),
diff --git a/exporter/coralogixexporter/factory_test.go b/exporter/coralogixexporter/factory_test.go
index 8cf8ad372b33..3b1858315f2c 100644
--- a/exporter/coralogixexporter/factory_test.go
+++ b/exporter/coralogixexporter/factory_test.go
@@ -14,6 +14,7 @@ import (
"go.opentelemetry.io/collector/config/configcompression"
"go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
@@ -28,7 +29,7 @@ func TestCreateDefaultConfig(t *testing.T) {
assert.NoError(t, componenttest.CheckConfigStruct(cfg))
ocfg, ok := factory.CreateDefaultConfig().(*Config)
assert.True(t, ok)
- assert.Equal(t, ocfg.RetrySettings, exporterhelper.NewDefaultRetrySettings())
+ assert.Equal(t, ocfg.BackOffConfig, configretry.NewDefaultBackOffConfig())
assert.Equal(t, ocfg.QueueSettings, exporterhelper.NewDefaultQueueSettings())
assert.Equal(t, ocfg.TimeoutSettings, exporterhelper.NewDefaultTimeoutSettings())
}
@@ -40,8 +41,9 @@ func TestCreateMetricsExporter(t *testing.T) {
set := exportertest.NewNopCreateSettings()
oexp, err := factory.CreateMetricsExporter(context.Background(), set, cfg)
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, oexp)
+ require.NoError(t, oexp.Shutdown(context.Background()))
}
func TestCreateMetricsExporterWithDomain(t *testing.T) {
@@ -51,7 +53,7 @@ func TestCreateMetricsExporterWithDomain(t *testing.T) {
set := exportertest.NewNopCreateSettings()
oexp, err := factory.CreateMetricsExporter(context.Background(), set, cfg)
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, oexp)
}
@@ -62,8 +64,9 @@ func TestCreateLogsExporter(t *testing.T) {
set := exportertest.NewNopCreateSettings()
oexp, err := factory.CreateLogsExporter(context.Background(), set, cfg)
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, oexp)
+ require.NoError(t, oexp.Shutdown(context.Background()))
}
func TestCreateLogsExporterWithDomain(t *testing.T) {
@@ -72,7 +75,7 @@ func TestCreateLogsExporterWithDomain(t *testing.T) {
cfg.Domain = "localhost"
set := exportertest.NewNopCreateSettings()
oexp, err := factory.CreateLogsExporter(context.Background(), set, cfg)
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, oexp)
}
@@ -87,9 +90,9 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "UseSecure",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: false,
},
},
@@ -98,7 +101,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "Keepalive",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
Keepalive: &configgrpc.KeepaliveClientConfig{
Time: 30 * time.Second,
@@ -111,7 +114,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "NoneCompression",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
Compression: "none",
},
@@ -120,34 +123,34 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "GzipCompression",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
},
},
{
name: "SnappyCompression",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
- Compression: configcompression.Snappy,
+ Compression: configcompression.TypeSnappy,
},
},
},
{
name: "ZstdCompression",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
- Compression: configcompression.Zstd,
+ Compression: configcompression.TypeZstd,
},
},
},
{
name: "Headers",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
Headers: map[string]configopaque.String{
"hdr1": "val1",
@@ -159,7 +162,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "NumConsumers",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
},
},
@@ -167,10 +170,10 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "CertPemFileError",
config: &Config{
- Traces: configgrpc.GRPCClientSettings{
+ Traces: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "nosuchfile",
},
},
@@ -182,8 +185,8 @@ func TestCreateTracesExporter(t *testing.T) {
name: "UseDomain",
config: &Config{
Domain: "localhost",
- DomainSettings: configgrpc.GRPCClientSettings{
- TLSSetting: configtls.TLSClientSetting{
+ DomainSettings: configgrpc.ClientConfig{
+ TLSSetting: configtls.ClientConfig{
Insecure: false,
},
},
@@ -197,7 +200,7 @@ func TestCreateTracesExporter(t *testing.T) {
set := exportertest.NewNopCreateSettings()
consumer, err := factory.CreateTracesExporter(context.Background(), set, tt.config)
if tt.mustFailOnCreate {
- assert.NotNil(t, err)
+ assert.Error(t, err)
return
}
assert.NoError(t, err)
@@ -227,7 +230,7 @@ func TestCreateLogsExporterWithDomainAndEndpoint(t *testing.T) {
set := exportertest.NewNopCreateSettings()
consumer, err := factory.CreateLogsExporter(context.Background(), set, cfg)
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, consumer)
err = consumer.Start(context.Background(), componenttest.NewNopHost())
diff --git a/exporter/coralogixexporter/generated_component_test.go b/exporter/coralogixexporter/generated_component_test.go
new file mode 100644
index 000000000000..18f1b2036164
--- /dev/null
+++ b/exporter/coralogixexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package coralogixexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/coralogixexporter/go.mod b/exporter/coralogixexporter/go.mod
index dc0525ed5e15..ea0fafecedf4 100644
--- a/exporter/coralogixexporter/go.mod
+++ b/exporter/coralogixexporter/go.mod
@@ -1,70 +1,81 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/coralogixexporter
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configcompression v0.89.0
- go.opentelemetry.io/collector/config/configgrpc v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a
- google.golang.org/grpc v1.59.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configcompression v1.5.0
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de
+ google.golang.org/grpc v1.63.2
)
require (
- cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.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/confignet v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
+// ambiguous import: found package cloud.google.com/go/compute/metadata in multiple modules
+replace cloud.google.com/go v0.65.0 => cloud.google.com/go v0.110.10
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
retract (
diff --git a/exporter/coralogixexporter/go.sum b/exporter/coralogixexporter/go.sum
index 7de9e67b68df..f3629a3fdeea 100644
--- a/exporter/coralogixexporter/go.sum
+++ b/exporter/coralogixexporter/go.sum
@@ -1,65 +1,30 @@
-cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-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/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -72,15 +37,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -92,121 +56,106 @@ github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0b
github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -214,39 +163,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-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.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/coralogixexporter/internal/metadata/generated_status.go b/exporter/coralogixexporter/internal/metadata/generated_status.go
index c2a79b2fa509..0bd2c6c880ae 100644
--- a/exporter/coralogixexporter/internal/metadata/generated_status.go
+++ b/exporter/coralogixexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("coralogix")
)
const (
- Type = "coralogix"
- LogsStability = component.StabilityLevelAlpha
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
+ LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/coralogix")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/coralogix")
+}
diff --git a/exporter/coralogixexporter/metadata.yaml b/exporter/coralogixexporter/metadata.yaml
index 4ef001565b1f..0ab4c2ccd759 100644
--- a/exporter/coralogixexporter/metadata.yaml
+++ b/exporter/coralogixexporter/metadata.yaml
@@ -1,10 +1,16 @@
type: coralogix
+scope_name: otelcol/coralogix
status:
class: exporter
stability:
- beta: [traces, metrics]
- alpha: [logs]
- distributions: [contrib, observiq]
+ beta: [traces, metrics, logs]
+ distributions: [contrib]
codeowners:
active: [povilasv, matej-g]
+
+tests:
+ config:
+ domain: "coralogix.com"
+ private_key: "xxx"
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/coralogixexporter/package_test.go b/exporter/coralogixexporter/package_test.go
new file mode 100644
index 000000000000..5c3305c1c0e1
--- /dev/null
+++ b/exporter/coralogixexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package coralogixexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/README.md b/exporter/datadogexporter/README.md
index 30db65c73601..c4ae28bdec32 100644
--- a/exporter/datadogexporter/README.md
+++ b/exporter/datadogexporter/README.md
@@ -5,19 +5,21 @@
| ------------- |-----------|
| Stability | [alpha]: logs |
| | [beta]: traces, metrics |
-| Distributions | [contrib], [aws], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fdatadog%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fdatadog) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fdatadog%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fdatadog) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@mx-psi](https://www.github.com/mx-psi), [@gbbr](https://www.github.com/gbbr), [@dineshg13](https://www.github.com/dineshg13), [@liustanley](https://www.github.com/liustanley), [@songy23](https://www.github.com/songy23), [@mackjmr](https://www.github.com/mackjmr) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@mx-psi](https://www.github.com/mx-psi), [@dineshg13](https://www.github.com/dineshg13), [@liustanley](https://www.github.com/liustanley), [@songy23](https://www.github.com/songy23), [@mackjmr](https://www.github.com/mackjmr) |
+| Emeritus | [@gbbr](https://www.github.com/gbbr) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
> Please review the Collector's [security documentation](https://github.com/open-telemetry/opentelemetry-collector/blob/main/docs/security-best-practices.md), which contains recommendations on securing sensitive information such as the API key required by this exporter.
+> The Datadog Exporter now skips APM stats computation by default. It is recommended to only use the [Datadog Connector](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/connector/datadogconnector) in order to compute APM stats.
+> To temporarily revert to the previous behavior, disable the `exporter.datadogexporter.DisableAPMStats` feature gate. Example: `otelcol --config=config.yaml --feature-gates=-exporter.datadogexporter.DisableAPMStats`
+
Visit the [official documentation](https://docs.datadoghq.com/tracing/trace_collection/open_standards/otel_collector_datadog_exporter/) for usage instructions.
## FAQs
@@ -58,6 +60,12 @@ otelcol --config=config.yaml --feature-gates=-exporter.datadogexporter.metricexp
```
Note that we are currently migrating the Datadog metrics exporter to use the metrics serializer instead. The feature flag `exporter.datadogexporter.metricexportnativeclient` will be deprecated and eventually removed in the future, following the [feature lifecycle](https://github.com/open-telemetry/opentelemetry-collector/tree/main/featuregate#feature-lifecycle).
+### Remap OTel’s service.name attribute to service for logs
+
+For Datadog Exporter versions 0.83.0 and later, the `service` field of OTel logs is populated as [OTel semantic convention](https://opentelemetry.io/docs/specs/semconv/resource/#service) `service.name`. However, `service.name` is not one of the default [service attributes](https://docs.datadoghq.com/logs/log_configuration/pipelines/?tab=service#service-attribute) in Datadog’s log preprocessing.
+
+To get the service field correctly populated in your logs, you can specify service.name to be the source of a log’s service by setting a [log service remapper processor](https://docs.datadoghq.com/logs/log_configuration/pipelines/?tab=service#service-attribute).
+
[beta]:https://github.com/open-telemetry/opentelemetry-collector#beta
[alpha]:https://github.com/open-telemetry/opentelemetry-collector#alpha
[contrib]:https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
diff --git a/exporter/datadogexporter/config.go b/exporter/datadogexporter/config.go
index 87a3c0cf55e3..9ebd11698016 100644
--- a/exporter/datadogexporter/config.go
+++ b/exporter/datadogexporter/config.go
@@ -11,8 +11,10 @@ import (
"strings"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/confignet"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.uber.org/zap"
@@ -54,7 +56,7 @@ type MetricsConfig struct {
// TCPAddr.Endpoint is the host of the Datadog intake server to send metrics to.
// If unset, the value is obtained from the Site.
- confignet.TCPAddr `mapstructure:",squash"`
+ confignet.TCPAddrConfig `mapstructure:",squash"`
ExporterConfig MetricsExporterConfig `mapstructure:",squash"`
@@ -247,7 +249,7 @@ type MetricsExporterConfig struct {
type TracesConfig struct {
// TCPAddr.Endpoint is the host of the Datadog intake server to send traces to.
// If unset, the value is obtained from the Site.
- confignet.TCPAddr `mapstructure:",squash"`
+ confignet.TCPAddrConfig `mapstructure:",squash"`
// ignored resources
// A blacklist of regular expressions can be provided to disable certain traces based on their resource name
@@ -291,6 +293,11 @@ type TracesConfig struct {
// The default list of peer tags can be found in https://github.com/DataDog/datadog-agent/blob/main/pkg/trace/stats/concentrator.go.
PeerTagsAggregation bool `mapstructure:"peer_tags_aggregation"`
+ // [BETA] Optional list of supplementary peer tags that go beyond the defaults. The Datadog backend validates all tags
+ // and will drop ones that are unapproved. The default set of peer tags can be found at
+ // https://github.com/DataDog/datadog-agent/blob/505170c4ac8c3cbff1a61cf5f84b28d835c91058/pkg/trace/stats/concentrator.go#L55.
+ PeerTags []string `mapstructure:"peer_tags"`
+
// TraceBuffer specifies the number of Datadog Agent TracerPayloads to buffer before dropping.
// The default value is 0, meaning the Datadog Agent TracerPayloads are unbuffered.
TraceBuffer int `mapstructure:"trace_buffer"`
@@ -304,7 +311,7 @@ type TracesConfig struct {
type LogsConfig struct {
// TCPAddr.Endpoint is the host of the Datadog intake server to send logs to.
// If unset, the value is obtained from the Site.
- confignet.TCPAddr `mapstructure:",squash"`
+ confignet.TCPAddrConfig `mapstructure:",squash"`
// DumpPayloads report whether payloads should be dumped when logging level is debug.
DumpPayloads bool `mapstructure:"dump_payloads"`
@@ -313,8 +320,12 @@ type LogsConfig struct {
// TagsConfig defines the tag-related configuration
// It is embedded in the configuration
type TagsConfig struct {
- // Hostname is the host name for unified service tagging.
- // If unset, it is determined automatically.
+ // Hostname is the fallback hostname used for payloads without hostname-identifying attributes.
+ // This option will NOT change the hostname applied to your metrics, traces and logs if they already have hostname-identifying attributes.
+ // If unset, the hostname will be determined automatically. See https://docs.datadoghq.com/opentelemetry/schema_semantics/hostname/?tab=datadogexporter#fallback-hostname-logic for details.
+ //
+ // Prefer using the `datadog.host.name` resource attribute over using this setting.
+ // See https://docs.datadoghq.com/opentelemetry/schema_semantics/hostname/?tab=datadogexporter#general-hostname-semantic-conventions for details.
Hostname string `mapstructure:"hostname"`
}
@@ -359,11 +370,15 @@ type HostMetadataConfig struct {
Enabled bool `mapstructure:"enabled"`
// HostnameSource is the source for the hostname of host metadata.
+ // This hostname is used for identifying the infrastructure list, host map and host tag information related to the host where the Datadog exporter is running.
+ // Changing this setting will not change the host used to tag your metrics, traces and logs in any way.
+ // For remote hosts, see https://docs.datadoghq.com/opentelemetry/schema_semantics/host_metadata/.
+ //
// Valid values are 'first_resource' and 'config_or_system':
// - 'first_resource' picks the host metadata hostname from the resource
// attributes on the first OTLP payload that gets to the exporter.
// If the first payload lacks hostname-like attributes, it will fallback to 'config_or_system'.
- // Do not use this hostname source if receiving data from multiple hosts.
+ // **Do not use this hostname source if receiving data from multiple hosts**.
// - 'config_or_system' picks the host metadata hostname from the 'hostname' setting,
// If this is empty it will use available system APIs and cloud provider endpoints.
//
@@ -376,24 +391,11 @@ type HostMetadataConfig struct {
Tags []string `mapstructure:"tags"`
}
-// LimitedTLSClientSetting is a subset of TLSClientSetting, see LimitedHTTPClientSettings for more details
-type LimitedTLSClientSettings struct {
- // InsecureSkipVerify controls whether a client verifies the server's
- // certificate chain and host name.
- InsecureSkipVerify bool `mapstructure:"insecure_skip_verify"`
-}
-
-type LimitedHTTPClientSettings struct {
- TLSSetting LimitedTLSClientSettings `mapstructure:"tls,omitempty"`
-}
-
// Config defines configuration for the Datadog exporter.
type Config struct {
- exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
-
- LimitedHTTPClientSettings `mapstructure:",squash"`
+ confighttp.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
TagsConfig `mapstructure:",squash"`
@@ -436,6 +438,10 @@ var _ component.Config = (*Config)(nil)
// Validate the configuration for errors. This is required by component.Config.
func (c *Config) Validate() error {
+ if err := validateClientConfig(c.ClientConfig); err != nil {
+ return err
+ }
+
if c.OnlyMetadata && (!c.HostMetadata.Enabled || c.HostMetadata.HostnameSource != HostnameSourceFirstResource) {
return errNoMetadata
}
@@ -476,6 +482,36 @@ func (c *Config) Validate() error {
return nil
}
+func validateClientConfig(cfg confighttp.ClientConfig) error {
+ var unsupported []string
+ if cfg.Auth != nil {
+ unsupported = append(unsupported, "auth")
+ }
+ if cfg.Endpoint != "" {
+ unsupported = append(unsupported, "endpoint")
+ }
+ if cfg.Compression != "" {
+ unsupported = append(unsupported, "compression")
+ }
+ if cfg.ProxyURL != "" {
+ unsupported = append(unsupported, "proxy_url")
+ }
+ if cfg.Headers != nil {
+ unsupported = append(unsupported, "headers")
+ }
+ if cfg.HTTP2ReadIdleTimeout != 0 {
+ unsupported = append(unsupported, "http2_read_idle_timeout")
+ }
+ if cfg.HTTP2PingTimeout != 0 {
+ unsupported = append(unsupported, "http2_ping_timeout")
+ }
+
+ if len(unsupported) > 0 {
+ return fmt.Errorf("these confighttp client configs are currently not respected by Datadog exporter: %s", strings.Join(unsupported, ", "))
+ }
+ return nil
+}
+
var _ error = (*renameError)(nil)
// renameError is an error related to a renamed setting.
@@ -551,7 +587,7 @@ func (c *Config) Unmarshal(configMap *confmap.Conf) error {
return err
}
- err := configMap.Unmarshal(c, confmap.WithErrorUnused())
+ err := configMap.Unmarshal(c)
if err != nil {
return err
}
@@ -567,17 +603,17 @@ func (c *Config) Unmarshal(configMap *confmap.Conf) error {
// If an endpoint is not explicitly set, override it based on the site.
if !configMap.IsSet("metrics::endpoint") {
- c.Metrics.TCPAddr.Endpoint = fmt.Sprintf("https://api.%s", c.API.Site)
+ c.Metrics.TCPAddrConfig.Endpoint = fmt.Sprintf("https://api.%s", c.API.Site)
}
if !configMap.IsSet("traces::endpoint") {
- c.Traces.TCPAddr.Endpoint = fmt.Sprintf("https://trace.agent.%s", c.API.Site)
+ c.Traces.TCPAddrConfig.Endpoint = fmt.Sprintf("https://trace.agent.%s", c.API.Site)
}
if !configMap.IsSet("logs::endpoint") {
- c.Logs.TCPAddr.Endpoint = fmt.Sprintf("https://http-intake.logs.%s", c.API.Site)
+ c.Logs.TCPAddrConfig.Endpoint = fmt.Sprintf("https://http-intake.logs.%s", c.API.Site)
}
// Return an error if an endpoint is explicitly set to ""
- if c.Metrics.TCPAddr.Endpoint == "" || c.Traces.TCPAddr.Endpoint == "" || c.Logs.TCPAddr.Endpoint == "" {
+ if c.Metrics.TCPAddrConfig.Endpoint == "" || c.Traces.TCPAddrConfig.Endpoint == "" || c.Logs.TCPAddrConfig.Endpoint == "" {
return errEmptyEndpoint
}
diff --git a/exporter/datadogexporter/config_test.go b/exporter/datadogexporter/config_test.go
index 2d6ae5005230..62d244f7ca03 100644
--- a/exporter/datadogexporter/config_test.go
+++ b/exporter/datadogexporter/config_test.go
@@ -5,12 +5,25 @@ package datadogexporter
import (
"testing"
+ "time"
"github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configauth"
+ "go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap"
)
func TestValidate(t *testing.T) {
+ idleConnTimeout := 30 * time.Second
+ maxIdleConn := 300
+ maxIdleConnPerHost := 150
+ maxConnPerHost := 250
+ ty, err := component.NewType("ty")
+ assert.NoError(t, err)
+ auth := configauth.Authentication{AuthenticatorID: component.NewID(ty)}
tests := []struct {
name string
@@ -94,8 +107,8 @@ func TestValidate(t *testing.T) {
name: "TLS settings are valid",
cfg: &Config{
API: APIConfig{Key: "notnull"},
- LimitedHTTPClientSettings: LimitedHTTPClientSettings{
- TLSSetting: LimitedTLSClientSettings{
+ ClientConfig: confighttp.ClientConfig{
+ TLSSetting: configtls.ClientConfig{
InsecureSkipVerify: true,
},
},
@@ -108,6 +121,47 @@ func TestValidate(t *testing.T) {
Traces: TracesConfig{TraceBuffer: 10},
},
},
+ {
+ name: "With peer_tags",
+ cfg: &Config{
+ API: APIConfig{Key: "notnull"},
+ Traces: TracesConfig{PeerTags: []string{"tag1", "tag2"}},
+ },
+ },
+ {
+ name: "With confighttp client configs",
+ cfg: &Config{
+ API: APIConfig{Key: "notnull"},
+ ClientConfig: confighttp.ClientConfig{
+ ReadBufferSize: 100,
+ WriteBufferSize: 200,
+ Timeout: 10 * time.Second,
+ IdleConnTimeout: &idleConnTimeout,
+ MaxIdleConns: &maxIdleConn,
+ MaxIdleConnsPerHost: &maxIdleConnPerHost,
+ MaxConnsPerHost: &maxConnPerHost,
+ DisableKeepAlives: true,
+ TLSSetting: configtls.ClientConfig{InsecureSkipVerify: true},
+ },
+ },
+ },
+
+ {
+ name: "unsupported confighttp client configs",
+ cfg: &Config{
+ API: APIConfig{Key: "notnull"},
+ ClientConfig: confighttp.ClientConfig{
+ Endpoint: "endpoint",
+ Compression: "gzip",
+ ProxyURL: "proxy",
+ Auth: &auth,
+ Headers: map[string]configopaque.String{"key": "val"},
+ HTTP2ReadIdleTimeout: 250,
+ HTTP2PingTimeout: 200,
+ },
+ },
+ err: "these confighttp client configs are currently not respected by Datadog exporter: auth, endpoint, compression, proxy_url, headers, http2_read_idle_timeout, http2_ping_timeout",
+ },
}
for _, testInstance := range tests {
t.Run(testInstance.name, func(t *testing.T) {
@@ -122,10 +176,26 @@ func TestValidate(t *testing.T) {
}
func TestUnmarshal(t *testing.T) {
+ cfgWithHTTPConfigs := NewFactory().CreateDefaultConfig().(*Config)
+ idleConnTimeout := 30 * time.Second
+ maxIdleConn := 300
+ maxIdleConnPerHost := 150
+ maxConnPerHost := 250
+ cfgWithHTTPConfigs.ReadBufferSize = 100
+ cfgWithHTTPConfigs.WriteBufferSize = 200
+ cfgWithHTTPConfigs.Timeout = 10 * time.Second
+ cfgWithHTTPConfigs.MaxIdleConns = &maxIdleConn
+ cfgWithHTTPConfigs.MaxIdleConnsPerHost = &maxIdleConnPerHost
+ cfgWithHTTPConfigs.MaxConnsPerHost = &maxConnPerHost
+ cfgWithHTTPConfigs.IdleConnTimeout = &idleConnTimeout
+ cfgWithHTTPConfigs.DisableKeepAlives = true
+ cfgWithHTTPConfigs.TLSSetting.InsecureSkipVerify = true
+ cfgWithHTTPConfigs.warnings = nil
+
tests := []struct {
name string
configMap *confmap.Conf
- cfg Config
+ cfg *Config
err string
}{
{
@@ -257,6 +327,21 @@ func TestUnmarshal(t *testing.T) {
}),
err: "\"metrics::sums::initial_cumulative_monotonic_value\" can only be configured when \"metrics::sums::cumulative_monotonic_mode\" is set to \"to_delta\"",
},
+ {
+ name: "unmarshall confighttp client configs",
+ configMap: confmap.NewFromStringMap(map[string]any{
+ "read_buffer_size": 100,
+ "write_buffer_size": 200,
+ "timeout": "10s",
+ "max_idle_conns": 300,
+ "max_idle_conns_per_host": 150,
+ "max_conns_per_host": 250,
+ "disable_keep_alives": true,
+ "idle_conn_timeout": "30s",
+ "tls": map[string]any{"insecure_skip_verify": true},
+ }),
+ cfg: cfgWithHTTPConfigs,
+ },
}
f := NewFactory()
diff --git a/exporter/datadogexporter/config_warnings_test.go b/exporter/datadogexporter/config_warnings_test.go
index ea2220d1fdd2..ab98a6e010d6 100644
--- a/exporter/datadogexporter/config_warnings_test.go
+++ b/exporter/datadogexporter/config_warnings_test.go
@@ -7,6 +7,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/confmap"
)
@@ -79,7 +80,7 @@ func TestSendAggregations(t *testing.T) {
t.Run(testInstance.name, func(t *testing.T) {
f := NewFactory()
cfg := f.CreateDefaultConfig().(*Config)
- err := cfg.Unmarshal(testInstance.cfgMap)
+ err := component.UnmarshalConfig(testInstance.cfgMap, cfg)
if err != nil || testInstance.err != "" {
assert.EqualError(t, err, testInstance.err)
} else {
@@ -156,7 +157,7 @@ func TestPeerTags(t *testing.T) {
t.Run(testInstance.name, func(t *testing.T) {
f := NewFactory()
cfg := f.CreateDefaultConfig().(*Config)
- err := cfg.Unmarshal(testInstance.cfgMap)
+ err := component.UnmarshalConfig(testInstance.cfgMap, cfg)
if err != nil || testInstance.err != "" {
assert.EqualError(t, err, testInstance.err)
} else {
diff --git a/exporter/datadogexporter/examples/batch-memory.yaml b/exporter/datadogexporter/examples/batch-memory.yaml
new file mode 100644
index 000000000000..109e7811e058
--- /dev/null
+++ b/exporter/datadogexporter/examples/batch-memory.yaml
@@ -0,0 +1,36 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:4318"
+ grpc:
+ endpoint: "localhost:4317"
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+ memory_limiter:
+ check_interval: 1s
+ limit_mib: 1000
+
+exporters:
+ datadog:
+ api:
+ key: ${env:DD_API_KEY}
+
+service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch, memory_limiter]
+ exporters: [datadog]
+ metrics:
+ receivers: [otlp]
+ processors: [batch, memory_limiter]
+ exporters: [datadog]
+ logs:
+ receivers: [otlp]
+ processors: [batch, memory_limiter]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/collector-metrics.yaml b/exporter/datadogexporter/examples/collector-metrics.yaml
new file mode 100644
index 000000000000..4a68e51caa19
--- /dev/null
+++ b/exporter/datadogexporter/examples/collector-metrics.yaml
@@ -0,0 +1,27 @@
+receivers:
+ prometheus:
+ config:
+ scrape_configs:
+ - job_name: 'otelcol'
+ scrape_interval: 10s
+ static_configs:
+ - targets: ['0.0.0.0:8888']
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+
+exporters:
+ datadog:
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+
+service:
+ pipelines:
+ metrics:
+ receivers: [prometheus]
+ processors: [batch]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/collector.yaml b/exporter/datadogexporter/examples/collector.yaml
index 829c1775bd92..ec0ae11ae1bb 100644
--- a/exporter/datadogexporter/examples/collector.yaml
+++ b/exporter/datadogexporter/examples/collector.yaml
@@ -171,8 +171,12 @@ exporters:
# The Datadog exporter is necessary for exporting telemetry signals to Datadog.
datadog:
## @param hostname - string - optional
- ## A custom hostname.
- ## If unset, this will be determined automatically if possible.
+ ## The fallback hostname used for payloads without hostname-identifying attributes.
+ ## This option will NOT change the hostname applied to your metrics, traces and logs if they already have hostname-identifying attributes.
+ ## If unset, the hostname will be determined automatically. See https://docs.datadoghq.com/opentelemetry/schema_semantics/hostname/?tab=datadogexporter#fallback-hostname-logic for details.
+ ##
+ ## Prefer using the `datadog.host.name` resource attribute over using this setting.
+ ## See https://docs.datadoghq.com/opentelemetry/schema_semantics/hostname/?tab=datadogexporter#general-hostname-semantic-conventions for details.
#
# hostname: customhostname
@@ -210,6 +214,27 @@ exporters:
## @param tls - boolean - optional - default: false
# insecure_skip_verify: false
+ ## @param read_buffer_size - integer - optional
+ ## @param write_buffer_size - integer - optional
+ ## @param timeout - duration - optional
+ ## @param max_idle_conns - integer - optional
+ ## @param max_idle_conns_per_host - integer - optional
+ ## @param max_conns_per_host - integer - optional
+ ## @param idle_conn_timeout - duration - optional
+ ## @param disable_keep_alives - boolean - optional
+ ##
+ ## Below are a subset of configs in confighttp that are respected by Datadog exporter.
+ ## See https://pkg.go.dev/go.opentelemetry.io/collector/config/confighttp for details on these configs.
+ ##
+ # read_buffer_size: 0
+ # write_buffer_size: 0
+ # timeout: 15s
+ # max_idle_conns: 100
+ # max_idle_conns_per_host: 0
+ # max_conns_per_host: 0
+ # idle_conn_timeout: 0s
+ # disable_keep_alives: false
+
## @param metrics - custom object - optional
## Metric exporter specific configuration.
#
@@ -227,9 +252,11 @@ exporters:
# endpoint: https://api.datadoghq.com
## @param resource_attributes_as_tags - string - optional - default: false
- ## Set to true to add all resource attributes of a metric to its metric tags.
- ## When set to false, only a small predefined subset of resource attributes is converted
- ## to metric tags.
+ ## Set to true to add resource attributes of a metric to its metric tags.
+ ## Please note that any of the subset of resource attributes in this
+ ## list https://docs.datadoghq.com/opentelemetry/guide/semantic_mapping/ are
+ ## converted to datadog conventions and set to to metric tags whether this option
+ ## is enabled or not.
#
# resource_attributes_as_tags: false
@@ -299,10 +326,10 @@ exporters:
## The host of the Datadog intake server to send traces to.
## If unset, the value is obtained through the `site` parameter in the `api` section.
#
- # endpoint: https://api.datadoghq.com
+ # endpoint: https://trace.agent.datadoghq.com
## @param ignore_resources - list of strings - optional
- ## A blacklist of regular expressions can be provided to disable certain traces based on their resource name
+ ## A blocklist of regular expressions can be provided to disable certain traces based on their resource name
## all entries must be surrounded by double quotes and separated by commas.
#
# ignore_resources: ["(GET|POST) /healthcheck"]
@@ -354,6 +381,12 @@ exporters:
#
# peer_tags_aggregation: false
+ ## @param peer_tags - [BETA] Optional list of supplementary peer tags that go beyond the defaults. The Datadog backend validates all tags
+ ## and will drop ones that are unapproved. The default set of peer tags can be found at
+ ## https://github.com/DataDog/datadog-agent/blob/505170c4ac8c3cbff1a61cf5f84b28d835c91058/pkg/trace/stats/concentrator.go#L55.
+ #
+ # peer_tags: ["tag"]
+
## @param trace_buffer - specifies the number of outgoing trace payloads to buffer before dropping - optional
## If unset, the default value is 0, meaning the outgoing trace payloads are unbuffered.
## If you start seeing log messages like `Payload in channel full. Dropped 1 payload.` in the datadog exporter, consider
@@ -365,8 +398,9 @@ exporters:
## Host metadata specific configuration.
## Host metadata is the information used for populating the infrastructure list, the host map and providing host tags functionality within the Datadog app.
##
- ## The exporter will only send host metadata for a single host, whose name is chosen
+ ## By default, the exporter will only send host metadata for a single host, whose name is chosen
## according to `host_metadata::hostname_source`.
+ ## See https://docs.datadoghq.com/opentelemetry/schema_semantics/host_metadata/ to send host metadata about more hosts.
#
# host_metadata:
## @param enabled - boolean - optional - default: true
@@ -376,10 +410,14 @@ exporters:
## @param hostname_source - enum - optional - default: config_or_system
## Source for the hostname of host metadata.
+ ## This hostname is used for identifying the infrastructure list, host map and host tag information related to the host where the Datadog exporter is running.
+ ## Changing this setting will not change the host used to tag your metrics, traces and logs in any way.
+ ## For remote hosts, see https://docs.datadoghq.com/opentelemetry/schema_semantics/host_metadata/.
+ ##
## Valid values are 'first_resource' and 'config_or_system':
## - 'first_resource' picks the host metadata hostname from the resource attributes on the first OTLP payload that gets to the exporter.
## If the first payload lacks hostname-like attributes, it will fallback to 'config_or_system' behavior.
- ## Do not use this hostname source if receiving data from multiple hosts.
+ ## **Do not use this hostname source if receiving data from multiple hosts**.
##
## - 'config_or_system' picks the host metadata hostname from the 'hostname' setting, falling back to system and cloud provider APIs.
##
diff --git a/exporter/datadogexporter/examples/docker-stats.yaml b/exporter/datadogexporter/examples/docker-stats.yaml
new file mode 100644
index 000000000000..7505275717ed
--- /dev/null
+++ b/exporter/datadogexporter/examples/docker-stats.yaml
@@ -0,0 +1,37 @@
+receivers:
+ docker_stats:
+ endpoint: unix:///var/run/docker.sock # (default)
+ metrics:
+ container.network.io.usage.rx_packets:
+ enabled: true
+ container.network.io.usage.tx_packets:
+ enabled: true
+ container.cpu.usage.system:
+ enabled: true
+ container.memory.rss:
+ enabled: true
+ container.blockio.io_serviced_recursive:
+ enabled: true
+ container.uptime:
+ enabled: true
+ container.memory.hierarchical_memory_limit:
+ enabled: true
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+
+exporters:
+ datadog:
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+
+service:
+ pipelines:
+ metrics:
+ receivers: [docker_stats]
+ processors: [batch]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/host-metadata.yaml b/exporter/datadogexporter/examples/host-metadata.yaml
new file mode 100644
index 000000000000..4f9ac655329e
--- /dev/null
+++ b/exporter/datadogexporter/examples/host-metadata.yaml
@@ -0,0 +1,43 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:4318"
+ grpc:
+ endpoint: "localhost:4317"
+processors:
+ probabilistic_sampler:
+ sampling_percentage: 20
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+ transform:
+ metric_statements:
+ - context: resource
+ statements:
+ - set(attributes["datadog.host.use_as_metadata"], true)
+ trace_statements:
+ - context: resource
+ statements:
+ - set(attributes["datadog.host.use_as_metadata"], true)
+connectors:
+ datadog/connector:
+exporters:
+ datadog:
+ api:
+ key: ${env:DD_API_KEY}
+service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch, transform]
+ exporters: [datadog/connector]
+ traces/2:
+ receivers: [datadog/connector]
+ processors: [batch, probabilistic_sampler]
+ exporters: [datadog]
+ metrics:
+ receivers: [datadog/connector]
+ processors: [batch, transform]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/host-metrics.yaml b/exporter/datadogexporter/examples/host-metrics.yaml
new file mode 100644
index 000000000000..125fef154363
--- /dev/null
+++ b/exporter/datadogexporter/examples/host-metrics.yaml
@@ -0,0 +1,46 @@
+receivers:
+ hostmetrics:
+ collection_interval: 10s
+ scrapers:
+ paging:
+ metrics:
+ system.paging.utilization:
+ enabled: true
+ cpu:
+ metrics:
+ system.cpu.utilization:
+ enabled: true
+ system.cpu.physical.count:
+ enabled: true
+ system.cpu.logical.count:
+ enabled: true
+ system.cpu.frequency:
+ enabled: true
+ disk:
+ filesystem:
+ metrics:
+ system.filesystem.utilization:
+ enabled: true
+ load:
+ memory:
+ network:
+ processes:
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+
+exporters:
+ datadog:
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+
+service:
+ pipelines:
+ metrics:
+ receivers: [hostmetrics]
+ processors: [batch]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/k8s-chart/configmap.yaml b/exporter/datadogexporter/examples/k8s-chart/configmap.yaml
index 15461930f6f4..494673be5ad4 100644
--- a/exporter/datadogexporter/examples/k8s-chart/configmap.yaml
+++ b/exporter/datadogexporter/examples/k8s-chart/configmap.yaml
@@ -40,7 +40,7 @@ data:
include:
# This will ensure that logs from the following path are collected.
- /var/log/**/*otel-collector*/*.log
- # # Comment out this block below to get access to system metrics regarding
+ # # Uncomment this block below to get access to system metrics regarding
# # the OpenTelemetry Collector and its environment, such as spans or metrics
# # processed, running and sent, queue sizes, uptime, k8s information
# # and much more.
diff --git a/exporter/datadogexporter/examples/k8s-chart/k8s-values.yaml b/exporter/datadogexporter/examples/k8s-chart/k8s-values.yaml
new file mode 100644
index 000000000000..2115f684a5ca
--- /dev/null
+++ b/exporter/datadogexporter/examples/k8s-chart/k8s-values.yaml
@@ -0,0 +1,92 @@
+mode: daemonset
+presets:
+ kubernetesAttributes:
+ enabled: true
+extraEnvs:
+ - name: POD_IP
+ valueFrom:
+ fieldRef:
+ fieldPath: status.podIP
+ - name: OTEL_RESOURCE_ATTRIBUTES
+ value: "k8s.pod.ip=$(POD_IP)"
+config:
+ processors:
+ k8sattributes:
+ passthrough: false
+ auth_type: "serviceAccount"
+ pod_association:
+ - sources:
+ - from: resource_attribute
+ name: k8s.pod.ip
+ extract:
+ metadata:
+ - k8s.pod.name
+ - k8s.pod.uid
+ - k8s.deployment.name
+ - k8s.node.name
+ - k8s.namespace.name
+ - k8s.pod.start_time
+ - k8s.replicaset.name
+ - k8s.replicaset.uid
+ - k8s.daemonset.name
+ - k8s.daemonset.uid
+ - k8s.job.name
+ - k8s.job.uid
+ - k8s.cronjob.name
+ - k8s.statefulset.name
+ - k8s.statefulset.uid
+ - container.image.name
+ - container.image.tag
+ - container.id
+ - k8s.container.name
+ - container.image.name
+ - container.image.tag
+ - container.id
+ labels:
+ - tag_name: kube_app_name
+ key: app.kubernetes.io/name
+ from: pod
+ - tag_name: kube_app_instance
+ key: app.kubernetes.io/instance
+ from: pod
+ - tag_name: kube_app_version
+ key: app.kubernetes.io/version
+ from: pod
+ - tag_name: kube_app_component
+ key: app.kubernetes.io/component
+ from: pod
+ - tag_name: kube_app_part_of
+ key: app.kubernetes.io/part-of
+ from: pod
+ - tag_name: kube_app_managed_by
+ key: app.kubernetes.io/managed-by
+ from: pod
+ resourcedetection:
+ detectors: [env, eks, ec2, system]
+ timeout: 2s
+ override: false
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+ exporters:
+ datadog:
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+ traces:
+ trace_buffer: 500
+ service:
+ pipelines:
+ metrics:
+ receivers: [otlp]
+ processors: [batch, resourcedetection, k8sattributes]
+ exporters: [datadog]
+ traces:
+ receivers: [otlp]
+ processors: [batch, resourcedetection, k8sattributes]
+ exporters: [datadog]
+ logs:
+ receivers: [otlp]
+ processors: [batch, resourcedetection, k8sattributes]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/kafka.yaml b/exporter/datadogexporter/examples/kafka.yaml
new file mode 100644
index 000000000000..0055c79e704a
--- /dev/null
+++ b/exporter/datadogexporter/examples/kafka.yaml
@@ -0,0 +1,61 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:4318"
+ grpc:
+ endpoint: "localhost:4317"
+ filelog:
+ include_file_path: true
+ poll_interval: 500ms
+ include:
+ - /var/log/kafka/server.log
+ operators:
+ - type: json_parser
+ kafkametrics:
+ brokers: "${env:KAFKA_BROKER_ADDRESS}"
+ protocol_version: 2.0.0
+ scrapers:
+ - brokers
+ - topics
+ - consumers
+ jmx:
+ jar_path: /path/to/opentelemetry-jmx-metrics.jar
+ endpoint: ${env:KAFKA_BROKER_JMX_ADDRESS}
+ target_system: kafka,jvm
+ jmx/consumer:
+ jar_path: /path/to/opentelemetry-jmx-metrics.jar
+ endpoint: ${env:KAFKA_CONSUMER_JMX_ADDRESS}
+ target_system: kafka-consumer
+ jmx/producer:
+ jar_path: /path/to/opentelemetry-jmx-metrics.jar
+ endpoint: ${env:KAFKA_PRODUCER_JMX_ADDRESS}
+ target_system: kafka-producer
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+ attributes:
+ actions:
+ - key: ddtags
+ value: "source:kafka"
+ action: insert
+
+exporters:
+ datadog:
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+
+service:
+ pipelines:
+ metrics:
+ receivers: [otlp, kafkametrics, jmx, jmx/consumer, jmx/producer]
+ processors: [batch]
+ exporters: [datadog]
+ logs:
+ receivers: [otlp, filelog]
+ processors: [batch, attributes]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/logs.yaml b/exporter/datadogexporter/examples/logs.yaml
new file mode 100644
index 000000000000..15d9ba66c001
--- /dev/null
+++ b/exporter/datadogexporter/examples/logs.yaml
@@ -0,0 +1,36 @@
+receivers:
+ filelog:
+ include_file_path: true
+ poll_interval: 500ms
+ include:
+ - /var/log/*/app.log
+ operators:
+ - type: json_parser
+ # If your logs are not json, please make sure that you are using the regex_parser to parse out the timestamp into attributes.time.
+ # - type: regex_parser
+ # id: parser-timestamp
+ # ...
+ # Layout needs to match log timestamp format. If this section is removed, timestamp will correspond to time log was intake by DD.
+ - type: time_parser
+ parse_from: attributes.time
+ layout: '%Y-%m-%dT%H:%M:%S%z'
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+
+exporters:
+ datadog:
+ idle_conn_timeout: 10s
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+
+service:
+ pipelines:
+ logs:
+ receivers: [filelog]
+ processors: [batch]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/ootb-ec2.yaml b/exporter/datadogexporter/examples/ootb-ec2.yaml
new file mode 100644
index 000000000000..69be7f66deb3
--- /dev/null
+++ b/exporter/datadogexporter/examples/ootb-ec2.yaml
@@ -0,0 +1,113 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:4318"
+ grpc:
+ endpoint: "localhost:4317"
+
+
+ hostmetrics:
+ collection_interval: 10s
+ scrapers:
+ paging:
+ metrics:
+ system.paging.utilization:
+ enabled: true
+ cpu:
+ metrics:
+ system.cpu.utilization:
+ enabled: true
+ system.cpu.physical.count:
+ enabled: true
+ system.cpu.logical.count:
+ enabled: true
+ system.cpu.frequency:
+ enabled: true
+ disk:
+ filesystem:
+ metrics:
+ system.filesystem.utilization:
+ enabled: true
+ load:
+ memory:
+ network:
+ processes:
+
+ prometheus:
+ config:
+ scrape_configs:
+ - job_name: 'otelcol'
+ scrape_interval: 10s
+ static_configs:
+ - targets: ['0.0.0.0:8888']
+
+ filelog:
+ include_file_path: true
+ poll_interval: 500ms
+ include:
+ - /var/log/*/app.log
+ operators:
+ - type: json_parser
+ # If your logs are not json, please make sure that you are using the regex_parser to parse out the timestamp into attributes.time.
+ # - type: regex_parser
+ # id: parser-timestamp
+ # ...
+ # Layout needs to match log timestamp format. If this section is removed, timestamp will correspond to time log was intake by DD.
+ - type: time_parser
+ parse_from: attributes.time
+ layout: '%Y-%m-%dT%H:%M:%S%z'
+
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+ memory_limiter:
+ check_interval: 1s
+ limit_mib: 4000
+ spike_limit_mib: 800
+ resourcedetection:
+ detectors: [env, ec2, system]
+ system:
+ resource_attributes:
+ os.description:
+ enabled: true
+ host.arch:
+ enabled: true
+ host.cpu.vendor.id:
+ enabled: true
+ host.cpu.family:
+ enabled: true
+ host.cpu.model.id:
+ enabled: true
+ host.cpu.model.name:
+ enabled: true
+ host.cpu.stepping:
+ enabled: true
+ host.cpu.cache.l2.size:
+ enabled: true
+
+exporters:
+ datadog:
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+ traces:
+ trace_buffer: 500
+
+service:
+ pipelines:
+ metrics:
+ receivers: [otlp, hostmetrics]
+ processors: [batch, resourcedetection, memory_limiter]
+ exporters: [datadog]
+ traces:
+ receivers: [otlp]
+ processors: [batch, resourcedetection, memory_limiter]
+ exporters: [datadog]
+ logs:
+ receivers: [otlp, filelog]
+ processors: [batch, resourcedetection, memory_limiter]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/otlp.yaml b/exporter/datadogexporter/examples/otlp.yaml
new file mode 100644
index 000000000000..a251246c7fc1
--- /dev/null
+++ b/exporter/datadogexporter/examples/otlp.yaml
@@ -0,0 +1,35 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:4318"
+ grpc:
+ endpoint: "localhost:4317"
+
+
+processors:
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+
+exporters:
+ datadog:
+ api:
+ site: ${env:DD_SITE}
+ key: ${env:DD_API_KEY}
+
+service:
+ pipelines:
+ metrics:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [datadog]
+ traces:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [datadog]
+ logs:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples/trace-metrics.yaml b/exporter/datadogexporter/examples/trace-metrics.yaml
new file mode 100644
index 000000000000..ef83f5fe8570
--- /dev/null
+++ b/exporter/datadogexporter/examples/trace-metrics.yaml
@@ -0,0 +1,34 @@
+receivers:
+ otlp:
+ protocols:
+ http:
+ endpoint: "localhost:4318"
+ grpc:
+ endpoint: "localhost:4317"
+processors:
+ probabilistic_sampler:
+ sampling_percentage: 20
+ batch:
+ send_batch_max_size: 1000
+ send_batch_size: 100
+ timeout: 10s
+connectors:
+ datadog/connector:
+exporters:
+ datadog:
+ api:
+ key: ${env:DD_API_KEY}
+service:
+ pipelines:
+ traces:
+ receivers: [otlp]
+ processors: [batch]
+ exporters: [datadog/connector]
+ traces/2:
+ receivers: [datadog/connector]
+ processors: [batch, probabilistic_sampler]
+ exporters: [datadog]
+ metrics:
+ receivers: [datadog/connector]
+ processors: [batch]
+ exporters: [datadog]
diff --git a/exporter/datadogexporter/examples_test.go b/exporter/datadogexporter/examples_test.go
index 8cf771cff15c..0da3f50a693d 100644
--- a/exporter/datadogexporter/examples_test.go
+++ b/exporter/datadogexporter/examples_test.go
@@ -10,20 +10,26 @@ import (
"testing"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/connector"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/otelcol"
"go.opentelemetry.io/collector/otelcol/otelcoltest"
"go.opentelemetry.io/collector/processor"
"go.opentelemetry.io/collector/processor/batchprocessor"
+ "go.opentelemetry.io/collector/processor/memorylimiterprocessor"
"go.opentelemetry.io/collector/receiver"
"go.opentelemetry.io/collector/receiver/otlpreceiver"
"gopkg.in/yaml.v2"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector"
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor"
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver"
)
// TestExamples ensures that the configuration in the YAML files can be loaded by the collector. It checks:
@@ -36,6 +42,10 @@ func TestExamples(t *testing.T) {
files, err := os.ReadDir(folder)
require.NoError(t, err)
for _, f := range files {
+ if f.Name() == "kafka.yaml" {
+ // skip validation, as it requires jar file.
+ continue
+ }
if f.IsDir() {
continue
}
@@ -92,14 +102,24 @@ func newTestComponents(t *testing.T) otelcol.Factories {
hostmetricsreceiver.NewFactory(),
dockerstatsreceiver.NewFactory(),
filelogreceiver.NewFactory(),
+ prometheusreceiver.NewFactory(),
}...,
)
require.NoError(t, err)
factories.Processors, err = processor.MakeFactoryMap(
[]processor.Factory{
batchprocessor.NewFactory(),
+ memorylimiterprocessor.NewFactory(),
k8sattributesprocessor.NewFactory(),
resourcedetectionprocessor.NewFactory(),
+ probabilisticsamplerprocessor.NewFactory(),
+ transformprocessor.NewFactory(),
+ }...,
+ )
+ require.NoError(t, err)
+ factories.Connectors, err = connector.MakeFactoryMap(
+ []connector.Factory{
+ datadogconnector.NewFactory(),
}...,
)
require.NoError(t, err)
diff --git a/exporter/datadogexporter/factory.go b/exporter/datadogexporter/factory.go
index 017e9fd0512a..a630cfc9246b 100644
--- a/exporter/datadogexporter/factory.go
+++ b/exporter/datadogexporter/factory.go
@@ -6,14 +6,22 @@ package datadogexporter // import "github.com/open-telemetry/opentelemetry-colle
import (
"context"
"fmt"
+ "runtime"
"sync"
"time"
+ pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace"
"github.com/DataDog/datadog-agent/pkg/trace/agent"
+ "github.com/DataDog/datadog-agent/pkg/trace/telemetry"
+ "github.com/DataDog/datadog-agent/pkg/trace/timing"
+ "github.com/DataDog/datadog-agent/pkg/trace/writer"
"github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata"
+ "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes"
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/confignet"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -23,13 +31,15 @@ import (
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
"go.uber.org/zap"
+ "google.golang.org/protobuf/proto"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/hostmetadata"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/metadata"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
)
-var mertricExportNativeClientFeatureGate = featuregate.GlobalRegistry().MustRegister(
+var metricExportNativeClientFeatureGate = featuregate.GlobalRegistry().MustRegister(
"exporter.datadogexporter.metricexportnativeclient",
featuregate.StageBeta,
featuregate.WithRegisterDescription("When enabled, metric export in datadogexporter uses native Datadog client APIs instead of Zorkian APIs."),
@@ -38,23 +48,23 @@ var mertricExportNativeClientFeatureGate = featuregate.GlobalRegistry().MustRegi
// noAPMStatsFeatureGate causes the trace consumer to skip APM stats computation.
var noAPMStatsFeatureGate = featuregate.GlobalRegistry().MustRegister(
"exporter.datadogexporter.DisableAPMStats",
- featuregate.StageAlpha,
+ featuregate.StageBeta,
featuregate.WithRegisterDescription("Datadog Exporter will not compute APM Stats"),
)
// isMetricExportV2Enabled returns true if metric export in datadogexporter uses native Datadog client APIs, false if it uses Zorkian APIs
func isMetricExportV2Enabled() bool {
- return mertricExportNativeClientFeatureGate.IsEnabled()
+ return metricExportNativeClientFeatureGate.IsEnabled()
}
// enableNativeMetricExport switches metric export to call native Datadog APIs instead of Zorkian APIs.
func enableNativeMetricExport() error {
- return featuregate.GlobalRegistry().Set(mertricExportNativeClientFeatureGate.ID(), true)
+ return featuregate.GlobalRegistry().Set(metricExportNativeClientFeatureGate.ID(), true)
}
// enableZorkianMetricExport switches metric export to call Zorkian APIs instead of native Datadog APIs.
func enableZorkianMetricExport() error {
- return featuregate.GlobalRegistry().Set(mertricExportNativeClientFeatureGate.ID(), false)
+ return featuregate.GlobalRegistry().Set(metricExportNativeClientFeatureGate.ID(), false)
}
const metadataReporterPeriod = 30 * time.Minute
@@ -77,6 +87,10 @@ type factory struct {
reporter *inframetadata.Reporter
reporterErr error
+ onceAttributesTranslator sync.Once
+ attributesTranslator *attributes.Translator
+ attributesErr error
+
wg sync.WaitGroup // waits for agent to exit
registry *featuregate.Registry
@@ -89,6 +103,13 @@ func (f *factory) SourceProvider(set component.TelemetrySettings, configHostname
return f.sourceProvider, f.providerErr
}
+func (f *factory) AttributesTranslator(set component.TelemetrySettings) (*attributes.Translator, error) {
+ f.onceAttributesTranslator.Do(func() {
+ f.attributesTranslator, f.attributesErr = attributes.NewTranslator(set)
+ })
+ return f.attributesTranslator, f.attributesErr
+}
+
// Reporter builds and returns an *inframetadata.Reporter.
func (f *factory) Reporter(params exporter.CreateSettings, pcfg hostmetadata.PusherConfig) (*inframetadata.Reporter, error) {
f.onceReporter.Do(func() {
@@ -117,8 +138,8 @@ func (f *factory) StopReporter() {
})
}
-func (f *factory) TraceAgent(ctx context.Context, params exporter.CreateSettings, cfg *Config, sourceProvider source.Provider) (*agent.Agent, error) {
- agnt, err := newTraceAgent(ctx, params, cfg, sourceProvider)
+func (f *factory) TraceAgent(ctx context.Context, params exporter.CreateSettings, cfg *Config, sourceProvider source.Provider, attrsTranslator *attributes.Translator) (*agent.Agent, error) {
+ agnt, err := newTraceAgent(ctx, params, cfg, sourceProvider, datadog.InitializeMetricClient(params.MeterProvider, datadog.ExporterSourceTag), attrsTranslator)
if err != nil {
return nil, err
}
@@ -146,8 +167,9 @@ func NewFactory() exporter.Factory {
return newFactoryWithRegistry(featuregate.GlobalRegistry())
}
-func defaulttimeoutSettings() exporterhelper.TimeoutSettings {
- return exporterhelper.TimeoutSettings{
+func defaultClientConfig() confighttp.ClientConfig {
+ // do not use NewDefaultClientConfig for backwards-compatibility
+ return confighttp.ClientConfig{
Timeout: 15 * time.Second,
}
}
@@ -155,16 +177,16 @@ func defaulttimeoutSettings() exporterhelper.TimeoutSettings {
// createDefaultConfig creates the default exporter configuration
func (f *factory) createDefaultConfig() component.Config {
return &Config{
- TimeoutSettings: defaulttimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ ClientConfig: defaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
API: APIConfig{
Site: "datadoghq.com",
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://api.datadoghq.com",
},
DeltaTTL: 3600,
@@ -186,14 +208,14 @@ func (f *factory) createDefaultConfig() component.Config {
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://trace.agent.datadoghq.com",
},
IgnoreResources: []string{},
},
Logs: LogsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://http-intake.logs.datadoghq.com",
},
},
@@ -216,6 +238,37 @@ func checkAndCastConfig(c component.Config, logger *zap.Logger) *Config {
return cfg
}
+func (f *factory) consumeStatsPayload(ctx context.Context, statsIn <-chan []byte, statsToAgent chan<- *pb.StatsPayload, tracerVersion string, agentVersion string, logger *zap.Logger) {
+ for i := 0; i < runtime.NumCPU(); i++ {
+ f.wg.Add(1)
+ go func() {
+ defer f.wg.Done()
+ for {
+ select {
+ case <-ctx.Done():
+ return
+ case msg := <-statsIn:
+ sp := &pb.StatsPayload{}
+
+ err := proto.Unmarshal(msg, sp)
+ if err != nil {
+ logger.Error("failed to unmarshal stats payload", zap.Error(err))
+ continue
+ }
+ for _, csp := range sp.Stats {
+ if csp.TracerVersion == "" {
+ csp.TracerVersion = tracerVersion
+ }
+ }
+ // The DD Connector doesn't set the agent version, so we'll set it here
+ sp.AgentVersion = agentVersion
+ statsToAgent <- sp
+ }
+ }
+ }()
+ }
+}
+
// createMetricsExporter creates a metrics exporter based on this config.
func (f *factory) createMetricsExporter(
ctx context.Context,
@@ -223,7 +276,6 @@ func (f *factory) createMetricsExporter(
c component.Config,
) (exporter.Metrics, error) {
cfg := checkAndCastConfig(c, set.TelemetrySettings.Logger)
-
hostProvider, err := f.SourceProvider(set.TelemetrySettings, cfg.Hostname)
if err != nil {
return nil, fmt.Errorf("failed to build hostname provider: %w", err)
@@ -231,13 +283,30 @@ func (f *factory) createMetricsExporter(
ctx, cancel := context.WithCancel(ctx)
// cancel() runs on shutdown
+
+ attrsTranslator, err := f.AttributesTranslator(set.TelemetrySettings)
+ if err != nil {
+ cancel()
+ return nil, fmt.Errorf("failed to build attributes translator: %w", err)
+ }
+
var pushMetricsFn consumer.ConsumeMetricsFunc
- traceagent, err := f.TraceAgent(ctx, set, cfg, hostProvider)
+ acfg, err := newTraceAgentConfig(ctx, set, cfg, hostProvider, attrsTranslator)
if err != nil {
cancel()
- return nil, fmt.Errorf("failed to start trace-agent: %w", err)
+ return nil, err
}
+ statsToAgent := make(chan *pb.StatsPayload)
+ metricsClient := datadog.InitializeMetricClient(set.MeterProvider, datadog.ExporterSourceTag)
+ timingReporter := timing.New(metricsClient)
+ statsWriter := writer.NewStatsWriter(acfg, statsToAgent, telemetry.NewNoopCollector(), metricsClient, timingReporter)
+
+ set.Logger.Debug("Starting Datadog Trace-Agent StatsWriter")
+ go statsWriter.Run()
+ statsIn := make(chan []byte, 1000)
+ statsv := set.BuildInfo.Command + set.BuildInfo.Version
+ f.consumeStatsPayload(ctx, statsIn, statsToAgent, statsv, acfg.AgentVersion, set.Logger)
pcfg := newMetadataConfigfromConfig(cfg)
metadataReporter, err := f.Reporter(set, pcfg)
if err != nil {
@@ -264,7 +333,7 @@ func (f *factory) createMetricsExporter(
return nil
}
} else {
- exp, metricsErr := newMetricsExporter(ctx, set, cfg, &f.onceMetadata, hostProvider, traceagent, metadataReporter)
+ exp, metricsErr := newMetricsExporter(ctx, set, cfg, acfg, &f.onceMetadata, attrsTranslator, hostProvider, statsToAgent, metadataReporter, statsIn)
if metricsErr != nil {
cancel() // first cancel context
f.wg.Wait() // then wait for shutdown
@@ -281,13 +350,21 @@ func (f *factory) createMetricsExporter(
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0 * time.Second}),
// We use our own custom mechanism for retries, since we hit several endpoints.
- exporterhelper.WithRetry(exporterhelper.RetrySettings{Enabled: false}),
+ exporterhelper.WithRetry(configretry.BackOffConfig{Enabled: false}),
// The metrics remapping code mutates data
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: true}),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithShutdown(func(context.Context) error {
- cancel()
+ cancel() // first cancel context
+ f.wg.Wait() // then wait for shutdown
f.StopReporter()
+ statsWriter.Stop()
+ if statsIn != nil {
+ close(statsIn)
+ }
+ if statsToAgent != nil {
+ close(statsToAgent)
+ }
return nil
}),
)
@@ -305,6 +382,13 @@ func (f *factory) createTracesExporter(
c component.Config,
) (exporter.Traces, error) {
cfg := checkAndCastConfig(c, set.TelemetrySettings.Logger)
+ if noAPMStatsFeatureGate.IsEnabled() {
+ set.Logger.Info(
+ "Trace metrics are now disabled in the Datadog Exporter by default. To continue receiving Trace Metrics, configure the Datadog Connector or disable the feature gate.",
+ zap.String("documentation", "https://docs.datadoghq.com/opentelemetry/guide/migration/"),
+ zap.String("feature gate ID", noAPMStatsFeatureGate.ID()),
+ )
+ }
var (
pusher consumer.ConsumeTracesFunc
@@ -317,7 +401,14 @@ func (f *factory) createTracesExporter(
}
ctx, cancel := context.WithCancel(ctx)
// cancel() runs on shutdown
- traceagent, err := f.TraceAgent(ctx, set, cfg, hostProvider)
+
+ attrsTranslator, err := f.AttributesTranslator(set.TelemetrySettings)
+ if err != nil {
+ cancel()
+ return nil, fmt.Errorf("failed to build attributes translator: %w", err)
+ }
+
+ traceagent, err := f.TraceAgent(ctx, set, cfg, hostProvider, attrsTranslator)
if err != nil {
cancel()
return nil, fmt.Errorf("failed to start trace-agent: %w", err)
@@ -375,7 +466,7 @@ func (f *factory) createTracesExporter(
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0 * time.Second}),
// We don't do retries on traces because of deduping concerns on APM Events.
- exporterhelper.WithRetry(exporterhelper.RetrySettings{Enabled: false}),
+ exporterhelper.WithRetry(configretry.BackOffConfig{Enabled: false}),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithShutdown(stop),
)
@@ -404,6 +495,12 @@ func (f *factory) createLogsExporter(
return nil, fmt.Errorf("failed to build host metadata reporter: %w", err)
}
+ attributesTranslator, err := f.AttributesTranslator(set.TelemetrySettings)
+ if err != nil {
+ cancel()
+ return nil, fmt.Errorf("failed to build attributes translator: %w", err)
+ }
+
if cfg.OnlyMetadata {
// only host metadata needs to be sent, once.
pusher = func(_ context.Context, td plog.Logs) error {
@@ -418,7 +515,7 @@ func (f *factory) createLogsExporter(
return nil
}
} else {
- exp, err := newLogsExporter(ctx, set, cfg, &f.onceMetadata, hostProvider, metadataReporter)
+ exp, err := newLogsExporter(ctx, set, cfg, &f.onceMetadata, attributesTranslator, hostProvider, metadataReporter)
if err != nil {
cancel()
f.wg.Wait() // then wait for shutdown
@@ -433,7 +530,7 @@ func (f *factory) createLogsExporter(
pusher,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0 * time.Second}),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithShutdown(func(context.Context) error {
cancel()
diff --git a/exporter/datadogexporter/factory_test.go b/exporter/datadogexporter/factory_test.go
index 4f440810414a..5e65c366a279 100644
--- a/exporter/datadogexporter/factory_test.go
+++ b/exporter/datadogexporter/factory_test.go
@@ -17,6 +17,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/confignet"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
@@ -70,16 +71,16 @@ func TestCreateDefaultConfig(t *testing.T) {
cfg := factory.CreateDefaultConfig()
assert.Equal(t, &Config{
- TimeoutSettings: defaulttimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ ClientConfig: defaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
API: APIConfig{
Site: "datadoghq.com",
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://api.datadoghq.com",
},
DeltaTTL: 3600,
@@ -97,13 +98,13 @@ func TestCreateDefaultConfig(t *testing.T) {
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://trace.agent.datadoghq.com",
},
IgnoreResources: []string{},
},
Logs: LogsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://http-intake.logs.datadoghq.com",
},
},
@@ -131,9 +132,9 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "default"),
expected: &Config{
- TimeoutSettings: defaulttimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ ClientConfig: defaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
API: APIConfig{
Key: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
Site: "datadoghq.com",
@@ -141,7 +142,7 @@ func TestLoadConfig(t *testing.T) {
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://api.datadoghq.com",
},
DeltaTTL: 3600,
@@ -159,13 +160,13 @@ func TestLoadConfig(t *testing.T) {
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://trace.agent.datadoghq.com",
},
IgnoreResources: []string{},
},
Logs: LogsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://http-intake.logs.datadoghq.com",
},
},
@@ -179,9 +180,9 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "api"),
expected: &Config{
- TimeoutSettings: defaulttimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ ClientConfig: defaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TagsConfig: TagsConfig{
Hostname: "customhostname",
},
@@ -191,7 +192,7 @@ func TestLoadConfig(t *testing.T) {
FailOnInvalidKey: true,
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://api.datadoghq.eu",
},
DeltaTTL: 3600,
@@ -208,7 +209,7 @@ func TestLoadConfig(t *testing.T) {
},
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://trace.agent.datadoghq.eu",
},
SpanNameRemappings: map[string]string{
@@ -220,7 +221,7 @@ func TestLoadConfig(t *testing.T) {
TraceBuffer: 10,
},
Logs: LogsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://http-intake.logs.datadoghq.eu",
},
},
@@ -234,9 +235,9 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "api2"),
expected: &Config{
- TimeoutSettings: defaulttimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ ClientConfig: defaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TagsConfig: TagsConfig{
Hostname: "customhostname",
},
@@ -246,7 +247,7 @@ func TestLoadConfig(t *testing.T) {
FailOnInvalidKey: false,
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://api.datadoghq.test",
},
DeltaTTL: 3600,
@@ -263,7 +264,7 @@ func TestLoadConfig(t *testing.T) {
},
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://trace.agent.datadoghq.test",
},
SpanNameRemappings: map[string]string{
@@ -273,7 +274,7 @@ func TestLoadConfig(t *testing.T) {
IgnoreResources: []string{},
},
Logs: LogsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: "https://http-intake.logs.datadoghq.test",
},
},
@@ -410,7 +411,7 @@ func TestCreateAPIMetricsExporter(t *testing.T) {
require.NoError(t, component.UnmarshalConfig(sub, cfg))
c := cfg.(*Config)
- c.Metrics.TCPAddr.Endpoint = server.URL
+ c.Metrics.TCPAddrConfig.Endpoint = server.URL
c.HostMetadata.Enabled = false
ctx := context.Background()
@@ -444,7 +445,7 @@ func TestCreateAPIExporterFailOnInvalidKey_Zorkian(t *testing.T) {
// Use the mock server for API key validation
c := cfg.(*Config)
- c.Metrics.TCPAddr.Endpoint = server.URL
+ c.Metrics.TCPAddrConfig.Endpoint = server.URL
c.HostMetadata.Enabled = false
t.Run("true", func(t *testing.T) {
@@ -483,7 +484,7 @@ func TestCreateAPIExporterFailOnInvalidKey_Zorkian(t *testing.T) {
exportertest.NewNopCreateSettings(),
cfg,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
texp, err := factory.CreateTracesExporter(
@@ -491,7 +492,7 @@ func TestCreateAPIExporterFailOnInvalidKey_Zorkian(t *testing.T) {
exportertest.NewNopCreateSettings(),
cfg,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, texp)
lexp, err := factory.CreateLogsExporter(
@@ -499,7 +500,7 @@ func TestCreateAPIExporterFailOnInvalidKey_Zorkian(t *testing.T) {
exportertest.NewNopCreateSettings(),
cfg,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, lexp)
})
}
@@ -524,7 +525,7 @@ func TestCreateAPIExporterFailOnInvalidKey(t *testing.T) {
// Use the mock server for API key validation
c := cfg.(*Config)
- c.Metrics.TCPAddr.Endpoint = server.URL
+ c.Metrics.TCPAddrConfig.Endpoint = server.URL
c.HostMetadata.Enabled = false
t.Run("true", func(t *testing.T) {
@@ -563,7 +564,7 @@ func TestCreateAPIExporterFailOnInvalidKey(t *testing.T) {
exportertest.NewNopCreateSettings(),
cfg,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
texp, err := factory.CreateTracesExporter(
@@ -571,7 +572,7 @@ func TestCreateAPIExporterFailOnInvalidKey(t *testing.T) {
exportertest.NewNopCreateSettings(),
cfg,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, texp)
lexp, err := factory.CreateLogsExporter(
@@ -579,7 +580,7 @@ func TestCreateAPIExporterFailOnInvalidKey(t *testing.T) {
exportertest.NewNopCreateSettings(),
cfg,
)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, lexp)
})
}
@@ -598,7 +599,7 @@ func TestCreateAPILogsExporter(t *testing.T) {
require.NoError(t, component.UnmarshalConfig(sub, cfg))
c := cfg.(*Config)
- c.Metrics.TCPAddr.Endpoint = server.URL
+ c.Metrics.TCPAddrConfig.Endpoint = server.URL
c.HostMetadata.Enabled = false
ctx := context.Background()
@@ -619,13 +620,13 @@ func TestOnlyMetadata(t *testing.T) {
factory := NewFactory()
ctx := context.Background()
cfg := &Config{
- TimeoutSettings: defaulttimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ ClientConfig: defaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
API: APIConfig{Key: "notnull"},
- Metrics: MetricsConfig{TCPAddr: confignet.TCPAddr{Endpoint: server.URL}},
- Traces: TracesConfig{TCPAddr: confignet.TCPAddr{Endpoint: server.URL}},
+ Metrics: MetricsConfig{TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: server.URL}},
+ Traces: TracesConfig{TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: server.URL}},
OnlyMetadata: true,
HostMetadata: HostMetadataConfig{
diff --git a/exporter/datadogexporter/generated_component_test.go b/exporter/datadogexporter/generated_component_test.go
new file mode 100644
index 000000000000..067e8b463c87
--- /dev/null
+++ b/exporter/datadogexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package datadogexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/datadogexporter/go.mod b/exporter/datadogexporter/go.mod
index a9a249989920..27d530f64cba 100644
--- a/exporter/datadogexporter/go.mod
+++ b/exporter/datadogexporter/go.mod
@@ -1,235 +1,300 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter
-go 1.20
+go 1.21
require (
- github.com/DataDog/agent-payload/v5 v5.0.89
- github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1
- github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1
- github.com/DataDog/datadog-api-client-go/v2 v2.18.0
- github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc
- github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1
- github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1
- github.com/DataDog/sketches-go v1.4.3
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0
- github.com/aws/aws-sdk-go v1.47.10
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confignet v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018
- 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/receiver v0.89.0
- go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
- google.golang.org/protobuf v1.31.0
+ github.com/DataDog/agent-payload/v5 v5.0.111
+ github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae
+ github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae
+ github.com/DataDog/datadog-api-client-go/v2 v2.24.0
+ github.com/DataDog/datadog-go/v5 v5.5.0
+ github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee
+ github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4
+ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4
+ github.com/DataDog/sketches-go v1.4.4
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0
+ github.com/aws/aws-sdk-go v1.51.17
+ github.com/cenkalti/backoff/v4 v4.3.0
+ github.com/google/go-cmp v0.6.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/k8sattributesprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/resourcedetectionprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/dockerstatsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filelogreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/hostmetricsreceiver v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configauth v0.98.0
+ go.opentelemetry.io/collector/config/configcompression v1.5.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/confignet v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/featuregate v1.5.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/processor v0.98.0
+ go.opentelemetry.io/collector/processor/batchprocessor v0.98.0
+ go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+ google.golang.org/protobuf v1.33.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0
- k8s.io/apimachinery v0.28.4
- k8s.io/client-go v0.28.4
+ k8s.io/apimachinery v0.29.3
+ k8s.io/client-go v0.29.3
)
require (
- cloud.google.com/go/compute v1.23.0 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
- github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-go/v5 v5.1.1 // indirect
- github.com/DataDog/go-sqllexer v0.0.8 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 // indirect
+ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 // indirect
+ github.com/Code-Hex/go-generics-cache v1.3.1 // indirect
+ github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/go-sqllexer v0.0.9 // indirect
github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect
github.com/DataDog/zstd v1.5.2 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/Showmax/go-fqdn v1.0.0 // indirect
- github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-00010101000000-000000000000 // indirect
- github.com/antonmedv/expr v1.15.3 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect
+ github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-20240415183253-230331014d2c // indirect
github.com/armon/go-metrics v0.4.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
- github.com/containerd/cgroups/v3 v3.0.2 // indirect
+ github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa // indirect
+ github.com/containerd/cgroups/v3 v3.0.3 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
- github.com/docker/distribution v2.8.2+incompatible // indirect
- github.com/docker/docker v24.0.7+incompatible // indirect
- github.com/docker/go-connections v0.4.0 // indirect
+ github.com/dennwc/varint v1.0.0 // indirect
+ github.com/digitalocean/godo v1.109.0 // indirect
+ github.com/distribution/reference v0.5.0 // indirect
+ github.com/docker/docker v25.0.5+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
- github.com/emicklei/go-restful/v3 v3.9.0 // indirect
- github.com/fatih/color v1.14.1 // indirect
+ github.com/emicklei/go-restful/v3 v3.11.0 // indirect
+ github.com/envoyproxy/go-control-plane v0.12.0 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect
+ github.com/expr-lang/expr v1.16.3 // indirect
+ github.com/fatih/color v1.15.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
- github.com/go-logfmt/logfmt v0.5.1 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logfmt/logfmt v0.6.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-openapi/jsonpointer v0.19.6 // indirect
- github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.3 // indirect
+ github.com/go-openapi/jsonpointer v0.20.2 // indirect
+ github.com/go-openapi/jsonreference v0.20.4 // indirect
+ github.com/go-openapi/swag v0.22.9 // indirect
+ github.com/go-resty/resty/v2 v2.11.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/go-zookeeper/zk v1.0.3 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/godbus/dbus/v5 v5.0.6 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/golang-jwt/jwt/v5 v5.2.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
- github.com/google/go-cmp v0.6.0 // indirect
+ github.com/google/go-querystring v1.1.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
- github.com/google/uuid v1.4.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
- github.com/hashicorp/consul/api v1.25.1 // indirect
+ github.com/google/s2a-go v0.1.7 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.2 // indirect
+ github.com/gophercloud/gophercloud v1.8.0 // indirect
+ github.com/gorilla/websocket v1.5.0 // indirect
+ github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
+ github.com/hashicorp/consul/api v1.28.2 // indirect
+ github.com/hashicorp/cronexpr v1.1.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
github.com/hashicorp/go-hclog v1.5.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
+ github.com/hashicorp/go-retryablehttp v0.7.4 // indirect
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
+ github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
+ github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 // indirect
github.com/hashicorp/serf v0.10.1 // indirect
- github.com/imdario/mergo v0.3.15 // indirect
+ github.com/hetznercloud/hcloud-go/v2 v2.6.0 // indirect
+ github.com/iancoleman/strcase v0.3.0 // indirect
+ github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 // indirect
+ github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 // indirect
+ github.com/ionos-cloud/sdk-go/v6 v6.1.11 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
+ github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/karrick/godirwalk v1.17.0 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
+ github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect
+ github.com/kylelemons/godebug v1.1.0 // indirect
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 // indirect
github.com/leoluk/perflib_exporter v0.2.1 // indirect
+ github.com/linode/linodego v1.30.0 // indirect
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // 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.17 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
+ github.com/mattn/go-isatty v0.0.19 // indirect
+ github.com/miekg/dns v1.1.58 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
+ github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
+ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.89.0 // indirect
+ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/docker v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/opencontainers/runtime-spec v1.1.0-rc.3 // indirect
github.com/openshift/api v3.9.0+incompatible // indirect
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 // indirect
github.com/outcaste-io/ristretto v0.2.1 // indirect
+ github.com/ovh/go-ovh v1.4.3 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
github.com/philhofer/fwd v1.1.2 // indirect
+ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
- github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.52.2 // indirect
+ github.com/prometheus/common/sigv4 v0.1.0 // indirect
+ github.com/prometheus/procfs v0.13.0 // indirect
+ github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e // indirect
github.com/rs/cors v1.10.1 // indirect
+ github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 // indirect
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
github.com/tinylib/msgp v1.1.9 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
+ github.com/valyala/fastjson v1.6.4 // indirect
+ github.com/vultr/govultr/v2 v2.17.2 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
github.com/zorkian/go-datadog-api v2.30.0+incompatible // indirect
go.opencensus.io v0.24.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/configgrpc v0.89.0 // indirect
- go.opentelemetry.io/collector/config/confighttp v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/connector v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/extension/auth v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/contrib/propagators/b3 v1.20.0 // indirect
- go.opentelemetry.io/otel v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- golang.org/x/term v0.14.0 // indirect
+ golang.org/x/crypto v0.22.0 // indirect
+ golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- golang.org/x/tools v0.15.0 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/grpc v1.59.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.19.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/api v0.168.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // 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
- k8s.io/api v0.28.4 // indirect
- k8s.io/klog/v2 v2.100.1 // indirect
- k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
- k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect
+ k8s.io/api v0.29.3 // indirect
+ k8s.io/klog/v2 v2.120.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+ k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
@@ -255,8 +320,6 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/filel
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/stanza => ../../pkg/stanza
-replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
-
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil => ../../pkg/pdatautil
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter => ../../internal/filter
@@ -288,4 +351,24 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/docke
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../pkg/golden
+replace github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector => ../../connector/datadogconnector
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus => ../../pkg/translator/prometheus
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter => ../prometheusremotewriteexporter
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor => ../../processor/probabilisticsamplerprocessor
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver => ../../receiver/prometheusreceiver
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog => ../../internal/datadog
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite => ../../pkg/translator/prometheusremotewrite
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor => ../../processor/tailsamplingprocessor
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage => ../../extension/storage
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor => ../../processor/transformprocessor
+
replace github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws => ../../override/aws
diff --git a/exporter/datadogexporter/go.sum b/exporter/datadogexporter/go.sum
index aa7ae13fda12..13efcd6f98b9 100644
--- a/exporter/datadogexporter/go.sum
+++ b/exporter/datadogexporter/go.sum
@@ -19,8 +19,8 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
-cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
@@ -34,11 +34,25 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
+dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw=
github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
+github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
@@ -46,71 +60,82 @@ github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSY
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/DataDog/agent-payload/v5 v5.0.89 h1:uuLWf/exyNYBnheG9OH2dOWZpCJvaEHX3W9CAd8KarU=
-github.com/DataDog/agent-payload/v5 v5.0.89/go.mod h1:oQZi1VZp1e3QvlSUX4iphZCpJaFepUxWq0hNXxihKBM=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 h1:W6IVI3zWwoJGcFagJ/kwltFL1IIErBZzcBy994PQsQE=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1/go.mod h1:A4nLJvxlg6BO/8/zg81til9yT0uRPuXDFMAzDMpmgn4=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1 h1:zDhs0MnT72cZOxxbPjkGI00NMYgsydOanBX3GZHuS1I=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1/go.mod h1:HvK26YCxg6MfYvPJgpHC7nSjw6DTpNhd75Wlb0GAvis=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 h1:EywptZStgHbDWLScnHfaCj6QNb698DY68pCnPEQrsts=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1 h1:A1uj4IMFs4rWp5LRalsqqnoC1f7QuYuN/b6/L7k4KCc=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1/go.mod h1:Q84EzSKpY/HtasusZM4ZPuYqbPQEbmIcAGzd7tXUX1I=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 h1:iJSVz+YsndcMA/yYNih/qmuvwD1AR7IYX0cXXePpeys=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1/go.mod h1:JUOECuM5XcoxjEPs30C568vGBWtqScjnsC2KXY1OQ7Y=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 h1:NK2kcRdv/r0WycAlGD2JFSmOcNvazzilPvZzk3l105g=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1/go.mod h1:RMBDVajNx78CpFHnbat0aIGcwVQZp8s+smRlcJkvZGg=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 h1:SgaCKuX9e3O5eLRIr+zqW1dlIw/TP3RDKQZUa2FfF8c=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1/go.mod h1:eTXti9mx7qhkoi+Qg3mMmvVY5McghUUgsf4Hrk9zY8k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 h1:aCDYC/AkDS/EOm4GV1bFmiev6pTt+Qjj1yGBJv8U7+k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1/go.mod h1:EOGgNrSPskIxY3+KgCl+yEggMjrGqrA2oL5va+/p2jM=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0 h1:QkX1vY1JtvDeF6N6EarPrJMHlerVGdTvGQOUWqfeVDs=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0/go.mod h1:lHlfhsNQ2qZclvpVQTfrGowUDIdIzAao38A05f9EQpc=
+github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g=
+github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
+github.com/DataDog/agent-payload/v5 v5.0.111 h1:mM+4OBkXF9tjKV0VjwnNO5As9aKcNAEsagvKDSBaTyc=
+github.com/DataDog/agent-payload/v5 v5.0.111/go.mod h1:COngtbYYCncpIPiE5D93QlXDH/3VAKk10jDNwGHcMRE=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae h1:aVo1Uh2WQ8TvgbjqlbDvfP5AcUtnqXUUrc9pVP8MvKc=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:AVPQWekk3h9AOC7+plBlNB68Sy6UIGFoMMVUDeSoNoI=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae h1:b6lU79trCyadhkxhb51jXiqmZaHs1Z0fwWlWKFVCqJ4=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:s6zD4ZvPBta68SBCsCnnbn3VJzoQk5wNd0VJOpB84Ug=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae h1:/vfuF60+5qeGM62IDG1F6Asfa1VGAohiQVivRo9TWoo=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:JhAilx32dkIgoDkFXquCTfaWDsAOfe+vfBaxbiZoPI0=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae h1:B1E9jVLpw+Hrcv9ggzCridX3YMeUmZBE3zHghdwfTSc=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:1FTu8gSg8Pd8DVgRfxlcPN4F+d8K7A3lbMCT84FX44Y=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae h1:GL9JPEUyKDH2brURt09llrqWBmExCuqbHeWucezZ6sY=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:OnkC+HYj+NU9dmowWVtFpmnA4wVVibejbzID7TNm7jA=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae h1:sUEteYos3JjJJB1+A9inYJ3uzM18t9cygjSs0cik8x4=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:z4lpju3fhDa8JcbXxU0Bc6A6ci8xoQMuxDXbBdf4gHw=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae h1:qveAzof7ZZXvm93FL7h5mRM8B4q9w14g2fx6wcZt88k=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:HgJEYNmnFTKIuBhWxYe1coqmzoJXMxQTfK+4wIG5G1Q=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae h1:YZz6I8ym9P4MLytAdAJlafF3tgItgAGZrDqe4otbVUk=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:EVETfdJCkqy0YEvSpQd9LZdcYQ7vrUomCm+bQ6h3lc4=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0 h1:7G+eyezFM8gHq5dOHcrQcGVxrXnwPqX2yYHxsLiq3iM=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0/go.mod h1:QKOu6vscsh87fMY1lHfLEmNSunyXImj8BUaUWJXOehc=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
-github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5TltWcLMU=
-github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E=
-github.com/DataDog/go-sqllexer v0.0.8 h1:vfC8R9PhmJfeOKcFYAX9UOd890A3wu3KrjU9Kr7nM0E=
-github.com/DataDog/go-sqllexer v0.0.8/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
+github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU=
+github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
+github.com/DataDog/go-sqllexer v0.0.9 h1:Cx2Cu1S0hfj4coCCA8hzjM9+UNFRkcu1avIV//RU5Qw=
+github.com/DataDog/go-sqllexer v0.0.9/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I=
github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc h1:gtlKB6B50/UEuFm1LeMn0R5a+tubx69OecPqxfXJDmU=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc/go.mod h1:oyPC4jWHHjVVNjslDAKp8EqfQBaSmODjHt4HCX+C+9Q=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1 h1:16YkGLmeJH830m3dG0owtdSMXDkmTZdRd1EWZ1XIO6M=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1/go.mod h1:re1FCVuKWovntr4bODIUe+iYT2Al0gbS0WK726XLz7w=
-github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.8.1 h1:0GyngySyxePf1RozAdm8p51uxT/kDsxqhzWPZGNrqVg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 h1:ly/egks++IqejMVPcp0OWV1fcL+Nsq4EHF48AAQPKu4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1/go.mod h1:8jOAAH5PrNN6zICpu65M7mNPAeOQsW5Wk/sq80txutA=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1 h1:UizDxaGWPDNzR2orQTE9poYyP09B2OhlaeiY5vdr+EU=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1/go.mod h1:2043mFAA2cD68ilZ93/5zZfL9BxWwj8z9sleaw3rtiY=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 h1:TbZDzUrW8iahevDY5Xw+j1EfrX8XZdeg/M6UYBl9mxg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1/go.mod h1:nVIKiAwP/Zd8IFxeHhEAiirJRH1kOOoZ315HQeSEkng=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 h1:4cyzwoXrnjElTIlsFbpyXQkAJs3+6ly9HExOu9lrup4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1/go.mod h1:3AEt8/uCtbpzjPOPPxIBDcR1qcUq2hBbrkrdE/qNfb0=
-github.com/DataDog/sketches-go v1.4.3 h1:ZB9nijteJRFUQixkQfatCqASartGNfiolIlMiEv3u/w=
-github.com/DataDog/sketches-go v1.4.3/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee h1:tXibLZk3G6HncIFJKaNItsdzcrk4YqILNDZlXPTNt4k=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee/go.mod h1:nTot/Iy0kW16bXgXr6blEc8gFeAS7vTqYlhAxh+dbc0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 h1:PTIZJAsfnr2XLB3V3duL+mSbZvYV8G3XQ9e57KyOuOA=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4/go.mod h1:5yS6i90MEZS3NG+o7PrQQ8i7OaEMzwQvn4bCZ9h9Rao=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4 h1:B2R7Wh791uphpltmorbvvdKk0rJOhoExwM4NnE7hXTg=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4/go.mod h1:Tk2wwdBgWeSvDPtrGGyym8CdVWSuphiToGc/tRvFoNQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 h1:10TPqpTlIkmDPFWVIEZ4ZX3rWrCrx3rEoeoAooZr6LM=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 h1:dU9oPMbAr/wYMNdzhu0pxIhAJOn1Btj1T3ZSyY6RvY0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4/go.mod h1:ud/Xr5TWUopcaGHdkh9RN8lhnCAFa95X16Rb5mrkE18=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 h1:ZuYc5Ql/GSyAEMgpKkbQiHOtIHkEpYujITW1wIVFgLE=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4/go.mod h1:YSntkplFoUM1mepnPeJFsoblqD0Wdi+Avg1/d1upgZQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 h1:t/Zh8ztLDBOMRMiuVNFthWMMG5F4POgc5M6+Y3DTX9g=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4/go.mod h1:JfdBBDreQfbIN5FYrAtZV3VmQMXnf9o4tMbaMxWqe40=
+github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8=
+github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0 h1:tk85AYGwOf6VNtoOQi8w/kVDi2vmPxp3/OU2FsUpdcA=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0/go.mod h1:Xx0VKh7GJ4si3rmElbh19Mejxz68ibWg/J30ZOMrqzU=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 h1:PWcDbDjrcT/ZHLn4Bc/FuglaZZVPP8bWO/YRmJBbe38=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0/go.mod h1:XEK/YHYsi+Wk2Bk1+zi/he+gjRfDWtoIZEZwuwcYjhk=
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/Microsoft/hcsshim v0.11.1 h1:hJ3s7GbWlGK4YVV92sO88BQSyF4ZLVy7/awqOlPxFbA=
+github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
+github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
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/Showmax/go-fqdn v1.0.0 h1:0rG5IbmVliNT5O19Mfuvna9LL7zlHyRfsSvBPZmF9tM=
github.com/Showmax/go-fqdn v1.0.0/go.mod h1:SfrFBzmDCtCGrnHhoDjuvFnKsWjEQX/Q9ARZvOrJAko=
+github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
-github.com/antonmedv/expr v1.15.3 h1:q3hOJZNvLvhqE8OHBs1cFRdbXFNKuA+bHmRaI+AmRmI=
-github.com/antonmedv/expr v1.15.3/go.mod h1:0E/6TxnOlRNp81GMzX9QfDPAmHo2Phg00y4JUv1ihsE=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
@@ -118,8 +143,11 @@ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+
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-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-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/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
+github.com/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0=
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=
@@ -129,13 +157,12 @@ github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwN
github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -146,28 +173,39 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0=
-github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE=
-github.com/containerd/containerd v1.7.7 h1:QOC2K4A42RQpcrZyptP6z9EJZnlHfHJUfZrAAHe15q4=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
+github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
+github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
+github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
+github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=
+github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
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/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
+github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU=
+github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
+github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
@@ -177,20 +215,26 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
-github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
+github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
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.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
+github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
+github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
+github.com/expr-lang/expr v1.16.3 h1:NLldf786GffptcXNxxJx5dQ+FzeWDKChBDqOOwyK8to=
+github.com/expr-lang/expr v1.16.3/go.mod h1:uCkhfG+x7fcZ5A5sXHKuQ07jGZRl6J0FCAaf2k4PtVQ=
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/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
-github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
-github.com/fatih/color v1.14.1/go.mod h1:2oHN61fhTpgcxD3TSWCgKDiH1+x4OiDVVGH8WlgGZGg=
+github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
+github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
@@ -203,41 +247,46 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
+github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
+github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
+github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-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/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
+github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-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/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
+github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
+github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
+github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
+github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
@@ -248,6 +297,8 @@ github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
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=
@@ -279,13 +330,14 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
+github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -300,11 +352,11 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.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/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/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
+github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
@@ -318,28 +370,45 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
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.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
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/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
+github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk=
+github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
+github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
-github.com/hashicorp/consul/sdk v0.14.1 h1:ZiwE2bKb+zro68sWzZ1SgHF3kRMBZ94TwOCFRF4ylPs=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
+github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8=
+github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A=
+github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A=
+github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4=
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.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
+github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
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=
@@ -347,46 +416,66 @@ github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJ
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
+github.com/hashicorp/go-msgpack v0.5.5/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-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
+github.com/hashicorp/go-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA=
+github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
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 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
+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-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.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/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
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.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA=
+github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
+github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
-github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
+github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
+github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 h1:s9ZL6ZhFF8y6ebnm1FLvobkzoIu5xwDQUcRPk/IEhpM=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6/go.mod h1:aXdIdfn2OcGnMhOTojXmwZqXKgC3MU5riiNvzwwG9OY=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 h1:2r2WiFeAwiJ/uyx1qIKnV1L4C9w/2V8ehlbJY4gjFaM=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4/go.mod h1:1yEQhaLb/cETXCqQmdh7lDjupNAReO7c83AHyK2dJ48=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
+github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww=
+github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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/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=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
@@ -402,35 +491,43 @@ github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwS
github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
+github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 h1:bCiVCRCs1Heq84lurVinUPy19keqGEe4jh5vtK37jcg=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg=
github.com/leoluk/perflib_exporter v0.2.1 h1:/3/ut1k/jFt5p4ypjLZKDHDqlXAK6ERZPVWtwdI389I=
github.com/leoluk/perflib_exporter v0.2.1/go.mod h1:MinSWm88jguXFFrGsP56PtleUb4Qtm4tNRH/wXNXRTI=
github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8LbfQI7cA4=
+github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs=
+github.com/linode/linodego v1.30.0 h1:6HJli+LX7NGu+Sne2G+ux790EkVOWOV/SR4mK3jcs6k=
+github.com/linode/linodego v1.30.0/go.mod h1:/46h/XpmWi//oSA92GX2p3FIxb8HbX7grslPPQalR2o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
+github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
@@ -449,29 +546,39 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
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/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/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
+github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
+github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM=
github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
-github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY=
github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
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 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
+github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
+github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
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.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/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
+github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
+github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -480,29 +587,33 @@ 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/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
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/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
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/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
-github.com/observiq/nanojack v0.0.0-20201106172433-343928847ebc h1:49ewVBwLcy+eYqI4R0ICilCI4dPjddpFXWv3liXzUxM=
+github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE=
+github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
+github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
+github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
-github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/runtime-spec v1.1.0-rc.3 h1:l04uafi6kxByhbxev7OWiuUv0LZxEsYUfDWZ6bztAuU=
github.com/opencontainers/runtime-spec v1.1.0-rc.3/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/openshift/api v0.0.0-20180801171038-322a19404e37 h1:05irGU4HK4IauGGDbsk+ZHrm1wOzMLYjMlfaiqMrBYc=
@@ -513,6 +624,8 @@ github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 h1:ZHRIMCFIJN1
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142/go.mod h1:fjS8r9mqDVsPb5td3NehsNOAWa4uiFkYEfVZioQ2gH0=
github.com/outcaste-io/ristretto v0.2.1 h1:KCItuNIGJZcursqHr3ghO7fc5ddZLEHspL9UR0cQM64=
github.com/outcaste-io/ristretto v0.2.1/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac=
+github.com/ovh/go-ovh v1.4.3 h1:Gs3V823zwTFpzgGLZNI6ILS4rmxZgJwJCz54Er9LwD0=
+github.com/ovh/go-ovh v1.4.3/go.mod h1:AkPXVtgwB6xlKblMjRKJJmjRp+ogrE7fz2lVgcQY8SY=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
@@ -521,6 +634,8 @@ github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTK
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -538,60 +653,60 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
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.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
github.com/prometheus/common v0.31.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
+github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
+github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
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.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
-github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
-github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
+github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o=
+github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg=
github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI=
-github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
-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/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
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/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY=
+github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
@@ -602,8 +717,9 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -613,29 +729,48 @@ 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.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
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/testcontainers/testcontainers-go v0.26.0 h1:uqcYdoOHBy1ca7gKODfBd9uTHVK3a7UL848z09MVZ0c=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/testcontainers/testcontainers-go v0.29.1 h1:z8kxdFlovA2y97RWx98v/TQ+tR+SXZm6p35M+xB92zk=
+github.com/testcontainers/testcontainers-go v0.29.1/go.mod h1:SnKnKQav8UcgtKqjp/AD8bE1MqZm+3TDb/B8crE3XnI=
+github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
+github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
+github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
+github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
+github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
+github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
+github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I=
+github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8=
+github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4=
+github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E=
github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
-github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
+github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
-github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
+github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
+github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
+github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U=
+github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc=
+github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
+github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
+github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/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.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes=
github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
@@ -643,107 +778,131 @@ go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/collector v0.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/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/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/zpagesextension v0.89.0 h1:opvHcGANx+dS4HJwGTPtRMd6dZdOmmGn6c3PfW/bihQ=
-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/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.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0 h1:zAFCXYzpxDh64BIVujqntlN5RE4jDahbPfJBy/Wq7D0=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0/go.mod h1:S15ELDQFoP5da3NHzXJR2I8FGUnM2C1Hp6e/OhaCtw0=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 h1:iM4fMLGig3GKmz5XNtOPKDsnCnvbi0+UHYaWsx/aSRc=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0/go.mod h1:ROnuUkZJgpKEIDf3AIVjgRGNI7KPqCKPXsw8whL6Hzs=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0 h1:1jjiC3POfIluGLVM+6y8nolKEI95/vlHAvDmIOatags=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0/go.mod h1:VQDDrhQbIoelGF+fKzy6vCQM3hWDCH2YFaZKqgTDmGk=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0 h1:j7lfLwc5o1dtXIPXU8LjmxadejmJVRHN57ZYGH33Wq4=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0/go.mod h1:uWDBDxaWuzF1U5S2UIhstO0+Q8aUiwiUu8uO1IYN2XQ=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -754,7 +913,11 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -765,8 +928,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-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -789,8 +952,10 @@ 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.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -829,19 +994,21 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
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-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
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=
@@ -853,8 +1020,10 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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=
@@ -908,28 +1077,33 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
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=
-golang.org/x/sys v0.0.0-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-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-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.6.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.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
-golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
+golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
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=
@@ -938,14 +1112,19 @@ 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.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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+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=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -993,14 +1172,16 @@ golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
-golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -1017,14 +1198,16 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/api v0.168.0 h1:MBRe+Ki4mMN93jhDDbpuRLjRddooArz4FeSObvUMmjY=
+google.golang.org/api v0.168.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -1054,11 +1237,10 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
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=
@@ -1072,8 +1254,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -1087,9 +1269,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -1101,6 +1282,8 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
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/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=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -1116,6 +1299,7 @@ gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 h1:umQdVO0Ytx+kYadhuJNjFtDgIsIEBnKrOTvNuu8ClKI=
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0/go.mod h1:kx0CSMRpzEZfx/nFH62GLU4stZjparh/BRpM89t4XCQ=
gotest.tools/v3 v3.2.0 h1:I0DwBVMGAx26dttAj1BtJLAkVGncrkkUXfJLC4Flt/I=
+gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1124,28 +1308,28 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
-k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY=
-k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=
+k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
-k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8=
-k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
-k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY=
-k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
@@ -1153,8 +1337,8 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/exporter/datadogexporter/hostmetadata.go b/exporter/datadogexporter/hostmetadata.go
index 05fe73da7dc5..1338bed2fb54 100644
--- a/exporter/datadogexporter/hostmetadata.go
+++ b/exporter/datadogexporter/hostmetadata.go
@@ -16,7 +16,7 @@ func newMetadataConfigfromConfig(cfg *Config) hostmetadata.PusherConfig {
APIKey: string(cfg.API.Key),
UseResourceMetadata: cfg.HostMetadata.HostnameSource == HostnameSourceFirstResource,
InsecureSkipVerify: cfg.TLSSetting.InsecureSkipVerify,
- TimeoutSettings: cfg.TimeoutSettings,
- RetrySettings: cfg.RetrySettings,
+ ClientConfig: cfg.ClientConfig,
+ RetrySettings: cfg.BackOffConfig,
}
}
diff --git a/exporter/datadogexporter/integrationtest/go.mod b/exporter/datadogexporter/integrationtest/go.mod
index 485b67b56e19..c9799c3f3c8c 100644
--- a/exporter/datadogexporter/integrationtest/go.mod
+++ b/exporter/datadogexporter/integrationtest/go.mod
@@ -1,126 +1,122 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/integrationtest
-go 1.20
+go 1.21
require (
- github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1
- github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.89.0
- github.com/stretchr/testify v1.8.4
+ github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae
+ github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/processor/tailsamplingprocessor v0.98.0
+ github.com/stretchr/testify v1.9.0
github.com/tinylib/msgp v1.1.9
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/connector v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/exporter/debugexporter v0.89.0
- go.opentelemetry.io/collector/otelcol v0.89.0
- go.opentelemetry.io/collector/processor v0.89.0
- go.opentelemetry.io/collector/processor/batchprocessor v0.89.0
- go.opentelemetry.io/collector/receiver v0.89.0
- go.opentelemetry.io/collector/receiver/otlpreceiver v0.89.0
- go.opentelemetry.io/otel v1.20.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0
- go.opentelemetry.io/otel/sdk v1.20.0
- google.golang.org/protobuf v1.31.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0
+ go.opentelemetry.io/collector/connector v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/exporter/debugexporter v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/processor v0.98.0
+ go.opentelemetry.io/collector/processor/batchprocessor v0.98.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0
+ go.opentelemetry.io/otel v1.25.0
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0
+ go.opentelemetry.io/otel/sdk v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ google.golang.org/protobuf v1.33.0
)
require (
- cloud.google.com/go/compute v1.23.0 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
- github.com/DataDog/agent-payload/v5 v5.0.89 // indirect
- github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 // indirect
- github.com/DataDog/datadog-api-client-go/v2 v2.18.0 // indirect
- github.com/DataDog/datadog-go/v5 v5.1.1 // indirect
- github.com/DataDog/go-sqllexer v0.0.8 // indirect
+ github.com/DataDog/agent-payload/v5 v5.0.111 // indirect
+ github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae // indirect
+ github.com/DataDog/datadog-api-client-go/v2 v2.24.0 // indirect
+ github.com/DataDog/datadog-go/v5 v5.5.0 // indirect
+ github.com/DataDog/go-sqllexer v0.0.9 // indirect
github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect
- github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 // indirect
- github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 // indirect
- github.com/DataDog/sketches-go v1.4.3 // indirect
+ github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 // indirect
+ github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 // indirect
+ github.com/DataDog/sketches-go v1.4.4 // indirect
github.com/DataDog/zstd v1.5.2 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/alecthomas/participle/v2 v2.1.0 // indirect
- github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-00010101000000-000000000000 // indirect
- github.com/aws/aws-sdk-go v1.47.10 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws v0.0.0-20240415183253-230331014d2c // indirect
+ github.com/aws/aws-sdk-go v1.51.17 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff v2.2.1+incompatible // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 // indirect
- github.com/containerd/cgroups/v3 v3.0.2 // indirect
+ github.com/containerd/cgroups/v3 v3.0.3 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
- github.com/emicklei/go-restful/v3 v3.9.0 // indirect
+ github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-kit/log v0.2.1 // indirect
- github.com/go-logfmt/logfmt v0.5.1 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/go-openapi/jsonpointer v0.19.6 // indirect
- github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.3 // indirect
+ github.com/go-openapi/jsonpointer v0.20.2 // indirect
+ github.com/go-openapi/jsonreference v0.20.4 // indirect
+ github.com/go-openapi/swag v0.22.9 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/goccy/go-json v0.10.2 // indirect
github.com/godbus/dbus/v5 v5.0.6 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/mock v1.6.0 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
- github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
- github.com/google/uuid v1.4.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
- github.com/hashicorp/errwrap v1.1.0 // indirect
- github.com/hashicorp/go-multierror v1.1.1 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
- github.com/imdario/mergo v0.3.15 // indirect
+ github.com/imdario/mergo v0.3.16 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
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/karrick/godirwalk v1.17.0 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c // indirect
github.com/mailru/easyjson v0.7.7 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/aws/ecsutil v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/datadog v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/k8sconfig v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/metadataproviders v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0 // indirect
github.com/opencontainers/runtime-spec v1.1.0-rc.3 // indirect
github.com/openshift/api v3.9.0+incompatible // indirect
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 // indirect
@@ -130,83 +126,89 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
- github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.52.2 // indirect
+ github.com/prometheus/procfs v0.13.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
- github.com/stretchr/objx v0.5.0 // indirect
+ github.com/stretchr/objx v0.5.2 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opencensus.io v0.24.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/configgrpc v0.89.0 // indirect
- go.opentelemetry.io/collector/config/confighttp 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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/contrib/propagators/b3 v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confighttp v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- golang.org/x/term v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- golang.org/x/tools v0.15.0 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/grpc v1.59.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.19.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gopkg.in/zorkian/go-datadog-api.v2 v2.30.0 // indirect
- k8s.io/api v0.28.4 // indirect
- k8s.io/apimachinery v0.28.4 // indirect
- k8s.io/client-go v0.28.4 // indirect
- k8s.io/klog/v2 v2.100.1 // indirect
- k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
- k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 // indirect
+ k8s.io/api v0.29.3 // indirect
+ k8s.io/apimachinery v0.29.3 // indirect
+ k8s.io/client-go v0.29.3 // indirect
+ k8s.io/klog/v2 v2.120.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+ k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
@@ -267,4 +269,16 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/docke
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../../pkg/golden
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus => ../../../pkg/translator/prometheus
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter => ../../prometheusremotewriteexporter
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite => ../../../pkg/translator/prometheusremotewrite
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/probabilisticsamplerprocessor => ../../../processor/probabilisticsamplerprocessor
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver => ../../../receiver/prometheusreceiver
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/processor/transformprocessor => ../../../processor/transformprocessor
+
replace github.com/amazon-contributing/opentelemetry-collector-contrib/override/aws => ../../../override/aws
diff --git a/exporter/datadogexporter/integrationtest/go.sum b/exporter/datadogexporter/integrationtest/go.sum
index 23ff22a3c739..328bb474e45f 100644
--- a/exporter/datadogexporter/integrationtest/go.sum
+++ b/exporter/datadogexporter/integrationtest/go.sum
@@ -9,18 +9,11 @@ cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6T
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
-cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
-cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
-cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
-cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
-cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
-cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
@@ -28,15 +21,20 @@ cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
-cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
-cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk=
github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw=
github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A=
@@ -44,53 +42,58 @@ github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSY
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/DataDog/agent-payload/v5 v5.0.89 h1:uuLWf/exyNYBnheG9OH2dOWZpCJvaEHX3W9CAd8KarU=
-github.com/DataDog/agent-payload/v5 v5.0.89/go.mod h1:oQZi1VZp1e3QvlSUX4iphZCpJaFepUxWq0hNXxihKBM=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1 h1:W6IVI3zWwoJGcFagJ/kwltFL1IIErBZzcBy994PQsQE=
-github.com/DataDog/datadog-agent/pkg/obfuscate v0.50.0-rc.1/go.mod h1:A4nLJvxlg6BO/8/zg81til9yT0uRPuXDFMAzDMpmgn4=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1 h1:zDhs0MnT72cZOxxbPjkGI00NMYgsydOanBX3GZHuS1I=
-github.com/DataDog/datadog-agent/pkg/proto v0.50.0-rc.1/go.mod h1:HvK26YCxg6MfYvPJgpHC7nSjw6DTpNhd75Wlb0GAvis=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1 h1:EywptZStgHbDWLScnHfaCj6QNb698DY68pCnPEQrsts=
-github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.50.0-rc.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1 h1:A1uj4IMFs4rWp5LRalsqqnoC1f7QuYuN/b6/L7k4KCc=
-github.com/DataDog/datadog-agent/pkg/trace v0.50.0-rc.1/go.mod h1:Q84EzSKpY/HtasusZM4ZPuYqbPQEbmIcAGzd7tXUX1I=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1 h1:iJSVz+YsndcMA/yYNih/qmuvwD1AR7IYX0cXXePpeys=
-github.com/DataDog/datadog-agent/pkg/util/cgroups v0.50.0-rc.1/go.mod h1:JUOECuM5XcoxjEPs30C568vGBWtqScjnsC2KXY1OQ7Y=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1 h1:NK2kcRdv/r0WycAlGD2JFSmOcNvazzilPvZzk3l105g=
-github.com/DataDog/datadog-agent/pkg/util/log v0.50.0-rc.1/go.mod h1:RMBDVajNx78CpFHnbat0aIGcwVQZp8s+smRlcJkvZGg=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1 h1:SgaCKuX9e3O5eLRIr+zqW1dlIw/TP3RDKQZUa2FfF8c=
-github.com/DataDog/datadog-agent/pkg/util/pointer v0.50.0-rc.1/go.mod h1:eTXti9mx7qhkoi+Qg3mMmvVY5McghUUgsf4Hrk9zY8k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1 h1:aCDYC/AkDS/EOm4GV1bFmiev6pTt+Qjj1yGBJv8U7+k=
-github.com/DataDog/datadog-agent/pkg/util/scrubber v0.50.0-rc.1/go.mod h1:EOGgNrSPskIxY3+KgCl+yEggMjrGqrA2oL5va+/p2jM=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0 h1:QkX1vY1JtvDeF6N6EarPrJMHlerVGdTvGQOUWqfeVDs=
-github.com/DataDog/datadog-api-client-go/v2 v2.18.0/go.mod h1:lHlfhsNQ2qZclvpVQTfrGowUDIdIzAao38A05f9EQpc=
-github.com/DataDog/datadog-go/v5 v5.1.1 h1:JLZ6s2K1pG2h9GkvEvMdEGqMDyVLEAccdX5TltWcLMU=
-github.com/DataDog/datadog-go/v5 v5.1.1/go.mod h1:KhiYb2Badlv9/rofz+OznKoEF5XKTonWyhx5K83AP8E=
-github.com/DataDog/go-sqllexer v0.0.8 h1:vfC8R9PhmJfeOKcFYAX9UOd890A3wu3KrjU9Kr7nM0E=
-github.com/DataDog/go-sqllexer v0.0.8/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
+github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g=
+github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
+github.com/DataDog/agent-payload/v5 v5.0.111 h1:mM+4OBkXF9tjKV0VjwnNO5As9aKcNAEsagvKDSBaTyc=
+github.com/DataDog/agent-payload/v5 v5.0.111/go.mod h1:COngtbYYCncpIPiE5D93QlXDH/3VAKk10jDNwGHcMRE=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae h1:aVo1Uh2WQ8TvgbjqlbDvfP5AcUtnqXUUrc9pVP8MvKc=
+github.com/DataDog/datadog-agent/pkg/obfuscate v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:AVPQWekk3h9AOC7+plBlNB68Sy6UIGFoMMVUDeSoNoI=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae h1:b6lU79trCyadhkxhb51jXiqmZaHs1Z0fwWlWKFVCqJ4=
+github.com/DataDog/datadog-agent/pkg/proto v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:s6zD4ZvPBta68SBCsCnnbn3VJzoQk5wNd0VJOpB84Ug=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae h1:/vfuF60+5qeGM62IDG1F6Asfa1VGAohiQVivRo9TWoo=
+github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:JhAilx32dkIgoDkFXquCTfaWDsAOfe+vfBaxbiZoPI0=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae h1:B1E9jVLpw+Hrcv9ggzCridX3YMeUmZBE3zHghdwfTSc=
+github.com/DataDog/datadog-agent/pkg/trace v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:1FTu8gSg8Pd8DVgRfxlcPN4F+d8K7A3lbMCT84FX44Y=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae h1:GL9JPEUyKDH2brURt09llrqWBmExCuqbHeWucezZ6sY=
+github.com/DataDog/datadog-agent/pkg/util/cgroups v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:OnkC+HYj+NU9dmowWVtFpmnA4wVVibejbzID7TNm7jA=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae h1:sUEteYos3JjJJB1+A9inYJ3uzM18t9cygjSs0cik8x4=
+github.com/DataDog/datadog-agent/pkg/util/log v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:z4lpju3fhDa8JcbXxU0Bc6A6ci8xoQMuxDXbBdf4gHw=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae h1:qveAzof7ZZXvm93FL7h5mRM8B4q9w14g2fx6wcZt88k=
+github.com/DataDog/datadog-agent/pkg/util/pointer v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:HgJEYNmnFTKIuBhWxYe1coqmzoJXMxQTfK+4wIG5G1Q=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae h1:YZz6I8ym9P4MLytAdAJlafF3tgItgAGZrDqe4otbVUk=
+github.com/DataDog/datadog-agent/pkg/util/scrubber v0.52.1-0.20240321095122-a3c5dbb936ae/go.mod h1:EVETfdJCkqy0YEvSpQd9LZdcYQ7vrUomCm+bQ6h3lc4=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0 h1:7G+eyezFM8gHq5dOHcrQcGVxrXnwPqX2yYHxsLiq3iM=
+github.com/DataDog/datadog-api-client-go/v2 v2.24.0/go.mod h1:QKOu6vscsh87fMY1lHfLEmNSunyXImj8BUaUWJXOehc=
+github.com/DataDog/datadog-go/v5 v5.5.0 h1:G5KHeB8pWBNXT4Jtw0zAkhdxEAWSpWH00geHI6LDrKU=
+github.com/DataDog/datadog-go/v5 v5.5.0/go.mod h1:K9kcYBlxkcPP8tvvjZZKs/m1edNAUFzBbdpTUKfCsuw=
+github.com/DataDog/go-sqllexer v0.0.9 h1:Cx2Cu1S0hfj4coCCA8hzjM9+UNFRkcu1avIV//RU5Qw=
+github.com/DataDog/go-sqllexer v0.0.9/go.mod h1:nB4Ea2YNsqMwtbWMc4Fm/oP98IIrSPapqwOwPioMspY=
github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I=
github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc h1:gtlKB6B50/UEuFm1LeMn0R5a+tubx69OecPqxfXJDmU=
-github.com/DataDog/gohai v0.0.0-20220718130825-1776f9beb9cc/go.mod h1:oyPC4jWHHjVVNjslDAKp8EqfQBaSmODjHt4HCX+C+9Q=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1 h1:16YkGLmeJH830m3dG0owtdSMXDkmTZdRd1EWZ1XIO6M=
-github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.8.1/go.mod h1:re1FCVuKWovntr4bODIUe+iYT2Al0gbS0WK726XLz7w=
-github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.8.1 h1:0GyngySyxePf1RozAdm8p51uxT/kDsxqhzWPZGNrqVg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1 h1:ly/egks++IqejMVPcp0OWV1fcL+Nsq4EHF48AAQPKu4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.8.1/go.mod h1:8jOAAH5PrNN6zICpu65M7mNPAeOQsW5Wk/sq80txutA=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1 h1:UizDxaGWPDNzR2orQTE9poYyP09B2OhlaeiY5vdr+EU=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.8.1/go.mod h1:2043mFAA2cD68ilZ93/5zZfL9BxWwj8z9sleaw3rtiY=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1 h1:TbZDzUrW8iahevDY5Xw+j1EfrX8XZdeg/M6UYBl9mxg=
-github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.8.1/go.mod h1:nVIKiAwP/Zd8IFxeHhEAiirJRH1kOOoZ315HQeSEkng=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1 h1:4cyzwoXrnjElTIlsFbpyXQkAJs3+6ly9HExOu9lrup4=
-github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.8.1/go.mod h1:3AEt8/uCtbpzjPOPPxIBDcR1qcUq2hBbrkrdE/qNfb0=
-github.com/DataDog/sketches-go v1.4.3 h1:ZB9nijteJRFUQixkQfatCqASartGNfiolIlMiEv3u/w=
-github.com/DataDog/sketches-go v1.4.3/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee h1:tXibLZk3G6HncIFJKaNItsdzcrk4YqILNDZlXPTNt4k=
+github.com/DataDog/gohai v0.0.0-20230524154621-4316413895ee/go.mod h1:nTot/Iy0kW16bXgXr6blEc8gFeAS7vTqYlhAxh+dbc0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4 h1:PTIZJAsfnr2XLB3V3duL+mSbZvYV8G3XQ9e57KyOuOA=
+github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata v0.13.4/go.mod h1:5yS6i90MEZS3NG+o7PrQQ8i7OaEMzwQvn4bCZ9h9Rao=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4 h1:B2R7Wh791uphpltmorbvvdKk0rJOhoExwM4NnE7hXTg=
+github.com/DataDog/opentelemetry-mapping-go/pkg/internal/sketchtest v0.13.4/go.mod h1:Tk2wwdBgWeSvDPtrGGyym8CdVWSuphiToGc/tRvFoNQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0 h1:10TPqpTlIkmDPFWVIEZ4ZX3rWrCrx3rEoeoAooZr6LM=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes v0.14.0/go.mod h1:dvIWN9pA2zWNTw5rhDWZgzZnhcfpH++d+8d1SWW6xkY=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4 h1:dU9oPMbAr/wYMNdzhu0pxIhAJOn1Btj1T3ZSyY6RvY0=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs v0.13.4/go.mod h1:ud/Xr5TWUopcaGHdkh9RN8lhnCAFa95X16Rb5mrkE18=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4 h1:ZuYc5Ql/GSyAEMgpKkbQiHOtIHkEpYujITW1wIVFgLE=
+github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics v0.13.4/go.mod h1:YSntkplFoUM1mepnPeJFsoblqD0Wdi+Avg1/d1upgZQ=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4 h1:t/Zh8ztLDBOMRMiuVNFthWMMG5F4POgc5M6+Y3DTX9g=
+github.com/DataDog/opentelemetry-mapping-go/pkg/quantile v0.13.4/go.mod h1:JfdBBDreQfbIN5FYrAtZV3VmQMXnf9o4tMbaMxWqe40=
+github.com/DataDog/sketches-go v1.4.4 h1:dF52vzXRFSPOj2IjXSWLvXq3jubL4CI69kwYjJ1w5Z8=
+github.com/DataDog/sketches-go v1.4.4/go.mod h1:XR0ns2RtEEF09mDKXiKZiQg+nfZStrq1ZuL1eezeZe0=
github.com/DataDog/zstd v1.5.2 h1:vUG4lAyuPCXO0TLbXvPv7EB7cNK1QV/luu55UHLrrn8=
github.com/DataDog/zstd v1.5.2/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0 h1:tk85AYGwOf6VNtoOQi8w/kVDi2vmPxp3/OU2FsUpdcA=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.20.0/go.mod h1:Xx0VKh7GJ4si3rmElbh19Mejxz68ibWg/J30ZOMrqzU=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0 h1:PWcDbDjrcT/ZHLn4Bc/FuglaZZVPP8bWO/YRmJBbe38=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.22.0/go.mod h1:XEK/YHYsi+Wk2Bk1+zi/he+gjRfDWtoIZEZwuwcYjhk=
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
@@ -98,35 +101,32 @@ github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb0
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/Showmax/go-fqdn v1.0.0 h1:0rG5IbmVliNT5O19Mfuvna9LL7zlHyRfsSvBPZmF9tM=
+github.com/Showmax/go-fqdn v1.0.0/go.mod h1:SfrFBzmDCtCGrnHhoDjuvFnKsWjEQX/Q9ARZvOrJAko=
github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
-github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4=
-github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
-github.com/antonmedv/expr v1.15.3 h1:q3hOJZNvLvhqE8OHBs1cFRdbXFNKuA+bHmRaI+AmRmI=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
+github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4=
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
-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/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/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
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/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
+github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc=
github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4=
github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -135,9 +135,10 @@ github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575 h1:kHaBemcxl8o/pQ5VM1
github.com/cihub/seelog v0.0.0-20170130134532-f561c5e57575/go.mod h1:9d6lWj8KzO/fd/NrVaLscBKmPigpZpn5YawRPw+e3Yo=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/containerd/cgroups/v3 v3.0.2 h1:f5WFqIVSgo5IZmtTT3qVBo6TzI1ON6sycSBKkymb9L0=
-github.com/containerd/cgroups/v3 v3.0.2/go.mod h1:JUgITrzdFqp42uI2ryGA+ge0ap/nxzYgkGmIcetmErE=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
+github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0=
+github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
@@ -146,11 +147,19 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs
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/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
+github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
+github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw=
+github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU=
+github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
@@ -160,15 +169,21 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m
github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc=
github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs=
-github.com/emicklei/go-restful/v3 v3.9.0 h1:XwGDlfxEnQZzuopoqxwSEllNcCOM9DhhFyhFIIGKwxE=
-github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
+github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
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.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
+github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/fatih/color v1.14.1 h1:qfhVLaG5s+nCROl1zJsZRxFeYrHLqWroPOQ8BWiNb4w=
+github.com/expr-lang/expr v1.16.3 h1:NLldf786GffptcXNxxJx5dQ+FzeWDKChBDqOOwyK8to=
+github.com/expr-lang/expr v1.16.3/go.mod h1:uCkhfG+x7fcZ5A5sXHKuQ07jGZRl6J0FCAaf2k4PtVQ=
+github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs=
+github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
@@ -178,44 +193,42 @@ github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyT
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
+github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
+github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas=
github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg=
github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg=
-github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
+github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
+github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc=
github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8=
-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/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
+github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo=
github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk=
github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
-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-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
+github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
+github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
+github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
+github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
@@ -223,9 +236,10 @@ github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MG
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/godbus/dbus/v5 v5.0.6 h1:mkgN1ofwASrYnJ5W6U/BxG15eXXXjirgZc7CLqkcaro=
github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
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=
@@ -237,8 +251,6 @@ github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc=
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -246,19 +258,17 @@ github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5y
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
@@ -269,115 +279,146 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.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/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/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
+github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
+github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
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.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
+github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
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/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
+github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg=
+github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk=
+github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
+github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
+github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
+github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A=
+github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4=
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.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
+github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
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.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
+github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
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-retryablehttp v0.7.4 h1:ZQgVdpTdAL7WpMIwLzCfbalOcSUdkDZnpUv3/+BxzFA=
+github.com/hashicorp/go-retryablehttp v0.7.4/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
+github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
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/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
+github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
-github.com/imdario/mergo v0.3.15 h1:M8XP7IuFNsqUx6VPK2P9OSmsYsI/YFaGil0uD21V3dM=
-github.com/imdario/mergo v0.3.15/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
+github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
+github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/influxdata/go-syslog/v3 v3.0.1-0.20210608084020-ac565dc76ba6 h1:s9ZL6ZhFF8y6ebnm1FLvobkzoIu5xwDQUcRPk/IEhpM=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4 h1:2r2WiFeAwiJ/uyx1qIKnV1L4C9w/2V8ehlbJY4gjFaM=
+github.com/influxdata/go-syslog/v3 v3.0.1-0.20230911200830-875f5bc594a4/go.mod h1:1yEQhaLb/cETXCqQmdh7lDjupNAReO7c83AHyK2dJ48=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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/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=
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/karrick/godirwalk v1.17.0 h1:b4kY7nqDdioR/6qnbHQyDvmA17u5G1cZ6J+CZXwSWoI=
github.com/karrick/godirwalk v1.17.0/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs=
github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU=
github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU=
-github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g=
-github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
+github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
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.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
+github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165 h1:bCiVCRCs1Heq84lurVinUPy19keqGEe4jh5vtK37jcg=
+github.com/leodido/ragel-machinery v0.0.0-20181214104525-299bdde78165/go.mod h1:WZxr2/6a/Ar9bMDc2rN/LJrE/hF6bXE4LPyDSIxwAfg=
github.com/leoluk/perflib_exporter v0.2.1 h1:/3/ut1k/jFt5p4ypjLZKDHDqlXAK6ERZPVWtwdI389I=
+github.com/leoluk/perflib_exporter v0.2.1/go.mod h1:MinSWm88jguXFFrGsP56PtleUb4Qtm4tNRH/wXNXRTI=
github.com/lightstep/go-expohisto v1.0.0 h1:UPtTS1rGdtehbbAF7o/dhkWLTDI73UifG8LbfQI7cA4=
+github.com/lightstep/go-expohisto v1.0.0/go.mod h1:xDXD0++Mu2FOaItXtdDfksfgxfV0z1TMPa+e/EUd0cs=
+github.com/linode/linodego v1.30.0 h1:6HJli+LX7NGu+Sne2G+ux790EkVOWOV/SR4mK3jcs6k=
+github.com/linode/linodego v1.30.0/go.mod h1:/46h/XpmWi//oSA92GX2p3FIxb8HbX7grslPPQalR2o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c h1:VtwQ41oftZwlMnOEbMWQtSEUgU64U4s+GHk7hZK+jtY=
github.com/lufia/plan9stats v0.0.0-20220913051719-115f729f3c8c/go.mod h1:JKx41uQRwqlTZabZc+kILPrO/3jlKnQ2Z8b7YiVw5cE=
@@ -387,16 +428,20 @@ github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
-github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
+github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
+github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
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 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
+github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-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/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
@@ -412,7 +457,7 @@ github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlc
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-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/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
@@ -420,12 +465,16 @@ github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw=
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
-github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE=
+github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
+github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
+github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
+github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/opencontainers/runtime-spec v1.1.0-rc.3 h1:l04uafi6kxByhbxev7OWiuUv0LZxEsYUfDWZ6bztAuU=
github.com/opencontainers/runtime-spec v1.1.0-rc.3/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
github.com/openshift/api v0.0.0-20180801171038-322a19404e37 h1:05irGU4HK4IauGGDbsk+ZHrm1wOzMLYjMlfaiqMrBYc=
@@ -436,13 +485,15 @@ github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142 h1:ZHRIMCFIJN1
github.com/openshift/client-go v0.0.0-20210521082421-73d9475a9142/go.mod h1:fjS8r9mqDVsPb5td3NehsNOAWa4uiFkYEfVZioQ2gH0=
github.com/outcaste-io/ristretto v0.2.1 h1:KCItuNIGJZcursqHr3ghO7fc5ddZLEHspL9UR0cQM64=
github.com/outcaste-io/ristretto v0.2.1/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac=
+github.com/ovh/go-ovh v1.4.3 h1:Gs3V823zwTFpzgGLZNI6ILS4rmxZgJwJCz54Er9LwD0=
+github.com/ovh/go-ovh v1.4.3/go.mod h1:AkPXVtgwB6xlKblMjRKJJmjRp+ogrE7fz2lVgcQY8SY=
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw=
github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -451,56 +502,36 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c h1:NRoLoZvkBTKvR5gQLgA3e0hqjkY9u1wm+iOL45VN/qI=
github.com/power-devops/perfstat v0.0.0-20220216144756-c35f1ee13d7c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
-github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
-github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
+github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
+github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
+github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o=
+github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg=
github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI=
-github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
-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/shirou/gopsutil/v3 v3.22.12/go.mod h1:Xd7P1kwZcp5VW52+9XsirIKd/BROzbb2wdX3Kqlz9uI=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
@@ -509,11 +540,11 @@ github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzu
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -522,137 +553,164 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
+github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tinylib/msgp v1.1.9 h1:SHf3yoO2sGA0veCJeCBYLHuttAVFHGm2RHgNodW7wQU=
github.com/tinylib/msgp v1.1.9/go.mod h1:BCXGB54lDD8qUEPmiG0cQQUANC4IUQyB2ItS2UDlO/k=
-github.com/tklauser/go-sysconf v0.3.9/go.mod h1:11DU/5sG7UexIrp/O6g35hrWzu0JxlwQ3LSFUzyeuhs=
+github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
-github.com/tklauser/numcpus v0.3.0/go.mod h1:yFGUr7TUHQRAhyqBcEg0Ge34zDBAsIvJJcyE6boqnA8=
+github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
+github.com/valyala/fastjson v1.6.4 h1:uAUNq9Z6ymTgGhcm0UynUAB6tlbakBrz6CQFax3BXVQ=
+github.com/valyala/fastjson v1.6.4/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY=
github.com/vmihailenco/msgpack/v4 v4.3.12 h1:07s4sz9IReOgdikxLTKNbBdqDMLsjPKXwvCazn8G65U=
+github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4=
github.com/vmihailenco/tagparser v0.1.2 h1:gnjoVuB/kljJ5wICEEOpx98oXMWPLj22G67Vbd1qPqc=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI=
+github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
+github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
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.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
github.com/zorkian/go-datadog-api v2.30.0+incompatible h1:R4ryGocppDqZZbnNc5EDR8xGWF/z/MxzWnqTUijDQes=
+github.com/zorkian/go-datadog-api v2.30.0+incompatible/go.mod h1:PkXwHX9CUQa/FpB9ZwAD45N1uhCW4MT/Wj7m36PbKss=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/collector v0.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/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/debugexporter v0.89.0 h1:MQUEX4OWszJQqQMqtYERiiw02Ta9QMWPe/hHWoD4YBU=
-go.opentelemetry.io/collector/exporter/debugexporter v0.89.0/go.mod h1:eLoVrKOjgPvAmg0XJuellJ03zEpEol26l8i48Rhv53Q=
-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/zpagesextension v0.89.0 h1:opvHcGANx+dS4HJwGTPtRMd6dZdOmmGn6c3PfW/bihQ=
-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/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.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0 h1:zAFCXYzpxDh64BIVujqntlN5RE4jDahbPfJBy/Wq7D0=
+go.opentelemetry.io/collector/exporter/debugexporter v0.98.0/go.mod h1:S15ELDQFoP5da3NHzXJR2I8FGUnM2C1Hp6e/OhaCtw0=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 h1:iM4fMLGig3GKmz5XNtOPKDsnCnvbi0+UHYaWsx/aSRc=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0/go.mod h1:ROnuUkZJgpKEIDf3AIVjgRGNI7KPqCKPXsw8whL6Hzs=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0 h1:1jjiC3POfIluGLVM+6y8nolKEI95/vlHAvDmIOatags=
+go.opentelemetry.io/collector/processor/memorylimiterprocessor v0.98.0/go.mod h1:VQDDrhQbIoelGF+fKzy6vCQM3hWDCH2YFaZKqgTDmGk=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0 h1:j7lfLwc5o1dtXIPXU8LjmxadejmJVRHN57ZYGH33Wq4=
+go.opentelemetry.io/collector/receiver/otlpreceiver v0.98.0/go.mod h1:uWDBDxaWuzF1U5S2UIhstO0+Q8aUiwiUu8uO1IYN2XQ=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -661,7 +719,9 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -672,8 +732,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-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -696,12 +756,12 @@ 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.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
@@ -711,7 +771,6 @@ golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -721,52 +780,37 @@ golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/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-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -778,7 +822,6 @@ golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -786,14 +829,6 @@ golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -801,44 +836,40 @@ golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7w
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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20210816074244-15123e1e1f71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220627191245-f75cf1eec38b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-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.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.3.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.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
-golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/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.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=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -869,30 +900,21 @@ golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
-golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -902,21 +924,16 @@ google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsb
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
-google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
+google.golang.org/api v0.168.0 h1:MBRe+Ki4mMN93jhDDbpuRLjRddooArz4FeSObvUMmjY=
+google.golang.org/api v0.168.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -934,23 +951,12 @@ google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvx
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17 h1:Jyp0Hsi0bmHXG6k9eATXoYtjd6e2UzZ1SCn/wIupY14=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:oQ5rr10WTTMvP4A36n8JpR1OrO1BEiV4f78CneXZxkA=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4=
+google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
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=
@@ -959,13 +965,9 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -974,15 +976,12 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
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=
@@ -993,13 +992,13 @@ gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
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/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=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -1013,30 +1012,29 @@ honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.21.1/go.mod h1:FstGROTmsSHBarKc8bylzXih8BLNYTiS3TZcsoEDg2s=
-k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY=
-k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0=
+k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
k8s.io/apimachinery v0.21.1/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY=
-k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8=
-k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
k8s.io/client-go v0.21.1/go.mod h1:/kEw4RgW+3xnBGzvp9IWxKSNA+lXn3A7AuH3gdOAzLs=
-k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY=
-k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
k8s.io/code-generator v0.21.1/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q=
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
@@ -1044,8 +1042,8 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/exporter/datadogexporter/integrationtest/integration_test.go b/exporter/datadogexporter/integrationtest/integration_test.go
index 12b9199d2ae7..738709d5e76d 100644
--- a/exporter/datadogexporter/integrationtest/integration_test.go
+++ b/exporter/datadogexporter/integrationtest/integration_test.go
@@ -33,7 +33,9 @@ import (
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
+ "go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
+ apitrace "go.opentelemetry.io/otel/trace"
"google.golang.org/protobuf/proto"
"github.com/open-telemetry/opentelemetry-collector-contrib/connector/datadogconnector"
@@ -79,9 +81,6 @@ func TestIntegration(t *testing.T) {
for _, tps := range traces.TracerPayloads {
for _, chunks := range tps.Chunks {
spans = append(spans, chunks.Spans...)
- for _, span := range chunks.Spans {
- assert.Equal(t, span.Meta["_dd.stats_computed"], "true")
- }
}
}
@@ -90,12 +89,15 @@ func TestIntegration(t *testing.T) {
var spl pb.StatsPayload
require.NoError(t, msgp.Decode(gz, &spl))
for _, csps := range spl.Stats {
+ assert.Equal(t, "datadogexporter-otelcol-tests", spl.AgentVersion)
for _, csbs := range csps.Stats {
stats = append(stats, csbs.Stats...)
for _, stat := range csbs.Stats {
assert.True(t, strings.HasPrefix(stat.Resource, "TestSpan"))
- assert.Equal(t, stat.Hits, uint64(1))
- assert.Equal(t, stat.TopLevelHits, uint64(1))
+ assert.Equal(t, uint64(1), stat.Hits)
+ assert.Equal(t, uint64(1), stat.TopLevelHits)
+ assert.Equal(t, "client", stat.SpanKind)
+ assert.Equal(t, []string{"extra_peer_tag:tag_val", "peer.service:svc"}, stat.PeerTags)
}
}
}
@@ -167,6 +169,10 @@ processors:
connectors:
datadog/connector:
+ traces:
+ compute_stats_by_span_kind: true
+ peer_tags_aggregation: true
+ peer_tags: ["extra_peer_tag"]
exporters:
debug:
@@ -185,6 +191,9 @@ exporters:
endpoint: %q
service:
+ telemetry:
+ metrics:
+ level: none
pipelines:
traces:
receivers: [otlp]
@@ -206,7 +215,7 @@ service:
_, err = otelcoltest.LoadConfigAndValidate(confFile.Name(), factories)
require.NoError(t, err, "All yaml config must be valid.")
- fmp := fileprovider.New()
+ fmp := fileprovider.NewWithSettings(confmap.ProviderSettings{})
configProvider, err := otelcol.NewConfigProvider(
otelcol.ConfigProviderSettings{
ResolverSettings: confmap.ResolverSettings{
@@ -250,22 +259,40 @@ func sendTraces(t *testing.T) {
traceExporter, err := otlptracegrpc.New(ctx, otlptracegrpc.WithInsecure())
require.NoError(t, err)
bsp := sdktrace.NewBatchSpanProcessor(traceExporter)
+ r1, _ := resource.New(ctx, resource.WithAttributes(attribute.String("k8s.node.name", "aaaa")))
+ r2, _ := resource.New(ctx, resource.WithAttributes(attribute.String("k8s.node.name", "bbbb")))
tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithSampler(sdktrace.AlwaysSample()),
sdktrace.WithSpanProcessor(bsp),
+ sdktrace.WithResource(r1),
+ )
+ tracerProvider2 := sdktrace.NewTracerProvider(
+ sdktrace.WithSampler(sdktrace.AlwaysSample()),
+ sdktrace.WithSpanProcessor(bsp),
+ sdktrace.WithResource(r2),
)
otel.SetTracerProvider(tracerProvider)
defer func() {
require.NoError(t, tracerProvider.Shutdown(ctx))
+ require.NoError(t, tracerProvider2.Shutdown(ctx))
}()
tracer := otel.Tracer("test-tracer")
for i := 0; i < 10; i++ {
- _, span := tracer.Start(ctx, fmt.Sprintf("TestSpan%d", i))
+ _, span := tracer.Start(ctx, fmt.Sprintf("TestSpan%d", i), apitrace.WithSpanKind(apitrace.SpanKindClient))
+
+ if i == 3 {
+ // Send some traces from a different resource
+ // This verifies that stats from different hosts don't accidentally create extraneous empty stats buckets
+ otel.SetTracerProvider(tracerProvider2)
+ tracer = otel.Tracer("test-tracer2")
+ }
// Only sample 5 out of the 10 spans
if i < 5 {
span.SetAttributes(attribute.Bool("sampled", true))
}
+ span.SetAttributes(attribute.String("peer.service", "svc"))
+ span.SetAttributes(attribute.String("extra_peer_tag", "tag_val"))
span.End()
}
time.Sleep(1 * time.Second)
diff --git a/exporter/datadogexporter/internal/clientutil/api.go b/exporter/datadogexporter/internal/clientutil/api.go
index 616627d9b9f0..60bbaeb36dec 100644
--- a/exporter/datadogexporter/internal/clientutil/api.go
+++ b/exporter/datadogexporter/internal/clientutil/api.go
@@ -11,7 +11,7 @@ import (
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV1"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
"go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/config/confighttp"
"go.uber.org/zap"
zorkian "gopkg.in/zorkian/go-datadog-api.v2"
)
@@ -20,10 +20,10 @@ import (
var GZipSubmitMetricsOptionalParameters = datadogV2.NewSubmitMetricsOptionalParameters().WithContentEncoding(datadogV2.METRICCONTENTENCODING_GZIP)
// CreateAPIClient creates a new Datadog API client
-func CreateAPIClient(buildInfo component.BuildInfo, endpoint string, settings exporterhelper.TimeoutSettings, insecureSkipVerify bool) *datadog.APIClient {
+func CreateAPIClient(buildInfo component.BuildInfo, endpoint string, hcs confighttp.ClientConfig) *datadog.APIClient {
configuration := datadog.NewConfiguration()
configuration.UserAgent = UserAgent(buildInfo)
- configuration.HTTPClient = NewHTTPClient(settings, insecureSkipVerify)
+ configuration.HTTPClient = NewHTTPClient(hcs)
configuration.Compress = true
configuration.Servers = datadog.ServerConfigurations{
{
diff --git a/exporter/datadogexporter/internal/clientutil/http.go b/exporter/datadogexporter/internal/clientutil/http.go
index 2b19d3c22d67..4b69ebdef6e3 100644
--- a/exporter/datadogexporter/internal/clientutil/http.go
+++ b/exporter/datadogexporter/internal/clientutil/http.go
@@ -11,7 +11,7 @@ import (
"time"
"go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/config/confighttp"
)
var (
@@ -27,21 +27,50 @@ var (
}
)
-// NewHTTPClient returns a http.Client configured with the Agent options.
-func NewHTTPClient(settings exporterhelper.TimeoutSettings, insecureSkipVerify bool) *http.Client {
+// NewHTTPClient returns a http.Client configured with a subset of the confighttp.ClientConfig options.
+func NewHTTPClient(hcs confighttp.ClientConfig) *http.Client {
+ transport := http.Transport{
+ Proxy: http.ProxyFromEnvironment,
+ // Default values consistent with https://github.com/DataDog/datadog-agent/blob/f9ae7f4b842f83b23b2dfe3f15d31f9e6b12e857/pkg/util/http/transport.go#L91-L106
+ DialContext: (&net.Dialer{
+ Timeout: 30 * time.Second,
+ // Enables TCP keepalives to detect broken connections
+ KeepAlive: 30 * time.Second,
+ // Disable RFC 6555 Fast Fallback ("Happy Eyeballs")
+ FallbackDelay: -1 * time.Nanosecond,
+ }).DialContext,
+ MaxIdleConns: 100,
+ MaxIdleConnsPerHost: 5,
+ // This parameter is set to avoid connections sitting idle in the pool indefinitely
+ IdleConnTimeout: 45 * time.Second,
+ TLSHandshakeTimeout: 10 * time.Second,
+ ExpectContinueTimeout: 1 * time.Second,
+ // Not supported by intake
+ ForceAttemptHTTP2: false,
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: hcs.TLSSetting.InsecureSkipVerify},
+ }
+ if hcs.ReadBufferSize > 0 {
+ transport.ReadBufferSize = hcs.ReadBufferSize
+ }
+ if hcs.WriteBufferSize > 0 {
+ transport.WriteBufferSize = hcs.WriteBufferSize
+ }
+ if hcs.MaxIdleConns != nil {
+ transport.MaxIdleConns = *hcs.MaxIdleConns
+ }
+ if hcs.MaxIdleConnsPerHost != nil {
+ transport.MaxIdleConnsPerHost = *hcs.MaxIdleConnsPerHost
+ }
+ if hcs.MaxConnsPerHost != nil {
+ transport.MaxConnsPerHost = *hcs.MaxConnsPerHost
+ }
+ if hcs.IdleConnTimeout != nil {
+ transport.IdleConnTimeout = *hcs.IdleConnTimeout
+ }
+ transport.DisableKeepAlives = hcs.DisableKeepAlives
return &http.Client{
- Timeout: settings.Timeout,
- Transport: &http.Transport{
- Proxy: http.ProxyFromEnvironment,
- DialContext: (&net.Dialer{
- // Disable RFC 6555 Fast Fallback ("Happy Eyeballs")
- FallbackDelay: -1 * time.Nanosecond,
- }).DialContext,
- MaxIdleConns: 100,
- // Not supported by intake
- ForceAttemptHTTP2: false,
- TLSClientConfig: &tls.Config{InsecureSkipVerify: insecureSkipVerify},
- },
+ Timeout: hcs.Timeout,
+ Transport: &transport,
}
}
diff --git a/exporter/datadogexporter/internal/clientutil/http_test.go b/exporter/datadogexporter/internal/clientutil/http_test.go
index db6e02360a46..db2eea93cb50 100644
--- a/exporter/datadogexporter/internal/clientutil/http_test.go
+++ b/exporter/datadogexporter/internal/clientutil/http_test.go
@@ -4,11 +4,18 @@
package clientutil // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/clientutil"
import (
+ "crypto/tls"
"net/http"
"testing"
+ "time"
+ "github.com/google/go-cmp/cmp"
+ "github.com/google/go-cmp/cmp/cmpopts"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configcompression"
+ "go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configtls"
)
var (
@@ -18,6 +25,73 @@ var (
}
)
+func TestNewHTTPClient(t *testing.T) {
+ hcsEmpty := confighttp.ClientConfig{}
+ client1 := NewHTTPClient(hcsEmpty)
+ defaultTransport := &http.Transport{
+ MaxIdleConns: 100,
+ MaxIdleConnsPerHost: 5,
+ IdleConnTimeout: 45 * time.Second,
+ TLSHandshakeTimeout: 10 * time.Second,
+ ExpectContinueTimeout: 1 * time.Second,
+ ForceAttemptHTTP2: false,
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: false},
+ }
+ if diff := cmp.Diff(
+ defaultTransport,
+ client1.Transport.(*http.Transport),
+ cmpopts.IgnoreUnexported(http.Transport{}, tls.Config{}),
+ cmpopts.IgnoreFields(http.Transport{}, "Proxy", "DialContext")); diff != "" {
+ t.Errorf("Mismatched transports -want +got %s", diff)
+ }
+ assert.Equal(t, time.Duration(0), client1.Timeout)
+
+ idleConnTimeout := 30 * time.Second
+ maxIdleConn := 300
+ maxIdleConnPerHost := 150
+ maxConnPerHost := 250
+ hcs := confighttp.ClientConfig{
+ ReadBufferSize: 100,
+ WriteBufferSize: 200,
+ Timeout: 10 * time.Second,
+ IdleConnTimeout: &idleConnTimeout,
+ MaxIdleConns: &maxIdleConn,
+ MaxIdleConnsPerHost: &maxIdleConnPerHost,
+ MaxConnsPerHost: &maxConnPerHost,
+ DisableKeepAlives: true,
+ TLSSetting: configtls.ClientConfig{InsecureSkipVerify: true},
+
+ // The rest are ignored
+ Endpoint: "endpoint",
+ ProxyURL: "proxy",
+ Compression: configcompression.TypeSnappy,
+ HTTP2ReadIdleTimeout: 15 * time.Second,
+ HTTP2PingTimeout: 20 * time.Second,
+ }
+ client2 := NewHTTPClient(hcs)
+ expectedTransport := &http.Transport{
+ TLSHandshakeTimeout: 10 * time.Second,
+ ExpectContinueTimeout: 1 * time.Second,
+ ReadBufferSize: 100,
+ WriteBufferSize: 200,
+ MaxIdleConns: maxIdleConn,
+ MaxIdleConnsPerHost: maxIdleConnPerHost,
+ MaxConnsPerHost: maxConnPerHost,
+ IdleConnTimeout: idleConnTimeout,
+ DisableKeepAlives: true,
+ ForceAttemptHTTP2: false,
+ TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
+ }
+ if diff := cmp.Diff(
+ expectedTransport,
+ client2.Transport.(*http.Transport),
+ cmpopts.IgnoreUnexported(http.Transport{}, tls.Config{}),
+ cmpopts.IgnoreFields(http.Transport{}, "Proxy", "DialContext")); diff != "" {
+ t.Errorf("Mismatched transports -want +got %s", diff)
+ }
+ assert.Equal(t, 10*time.Second, client2.Timeout)
+}
+
func TestUserAgent(t *testing.T) {
assert.Equal(t, UserAgent(buildInfo), "otelcontribcol/1.0")
diff --git a/exporter/datadogexporter/internal/clientutil/package_test.go b/exporter/datadogexporter/internal/clientutil/package_test.go
new file mode 100644
index 000000000000..5f1943db73b8
--- /dev/null
+++ b/exporter/datadogexporter/internal/clientutil/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package clientutil
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/clientutil/retrier.go b/exporter/datadogexporter/internal/clientutil/retrier.go
index 56dafe2b67bc..da7d75946ba3 100644
--- a/exporter/datadogexporter/internal/clientutil/retrier.go
+++ b/exporter/datadogexporter/internal/clientutil/retrier.go
@@ -9,20 +9,20 @@ import (
"time"
"github.com/cenkalti/backoff/v4"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer/consumererror"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
"go.uber.org/zap"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/scrub"
)
type Retrier struct {
- cfg exporterhelper.RetrySettings
+ cfg configretry.BackOffConfig
logger *zap.Logger
scrubber scrub.Scrubber
}
-func NewRetrier(logger *zap.Logger, settings exporterhelper.RetrySettings, scrubber scrub.Scrubber) *Retrier {
+func NewRetrier(logger *zap.Logger, settings configretry.BackOffConfig, scrubber scrub.Scrubber) *Retrier {
return &Retrier{
cfg: settings,
logger: logger,
diff --git a/exporter/datadogexporter/internal/clientutil/retrier_test.go b/exporter/datadogexporter/internal/clientutil/retrier_test.go
index 61f3cdc13306..a52ec759d56b 100644
--- a/exporter/datadogexporter/internal/clientutil/retrier_test.go
+++ b/exporter/datadogexporter/internal/clientutil/retrier_test.go
@@ -13,7 +13,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/config/configretry"
"go.uber.org/zap"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/scrub"
@@ -21,7 +21,7 @@ import (
func TestDoWithRetries(t *testing.T) {
scrubber := scrub.NewScrubber()
- retrier := NewRetrier(zap.NewNop(), exporterhelper.NewDefaultRetrySettings(), scrubber)
+ retrier := NewRetrier(zap.NewNop(), configretry.NewDefaultBackOffConfig(), scrubber)
ctx := context.Background()
retryNum, err := retrier.DoWithRetries(ctx, func(context.Context) error { return nil })
@@ -29,7 +29,7 @@ func TestDoWithRetries(t *testing.T) {
assert.Equal(t, retryNum, int64(0))
retrier = NewRetrier(zap.NewNop(),
- exporterhelper.RetrySettings{
+ configretry.BackOffConfig{
Enabled: true,
InitialInterval: 5 * time.Millisecond,
MaxInterval: 30 * time.Millisecond,
@@ -44,7 +44,7 @@ func TestDoWithRetries(t *testing.T) {
func TestNoRetriesOnPermanentError(t *testing.T) {
scrubber := scrub.NewScrubber()
- retrier := NewRetrier(zap.NewNop(), exporterhelper.NewDefaultRetrySettings(), scrubber)
+ retrier := NewRetrier(zap.NewNop(), configretry.NewDefaultBackOffConfig(), scrubber)
ctx := context.Background()
respNonRetriable := http.Response{StatusCode: 404}
diff --git a/exporter/datadogexporter/internal/hostmetadata/config.go b/exporter/datadogexporter/internal/hostmetadata/config.go
index 5b7be16b7865..d5c4a3e34160 100644
--- a/exporter/datadogexporter/internal/hostmetadata/config.go
+++ b/exporter/datadogexporter/internal/hostmetadata/config.go
@@ -4,7 +4,8 @@
package hostmetadata // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/hostmetadata"
import (
- "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
)
// PusherConfig is the configuration for the metadata pusher goroutine.
@@ -21,8 +22,8 @@ type PusherConfig struct {
UseResourceMetadata bool
// InsecureSkipVerify is the value of `tls.insecure_skip_verify` on the configuration.
InsecureSkipVerify bool
- // TimeoutSettings of exporter.
- TimeoutSettings exporterhelper.TimeoutSettings
+ // ClientConfig of exporter.
+ ClientConfig confighttp.ClientConfig
// RetrySettings of exporter.
- RetrySettings exporterhelper.RetrySettings
+ RetrySettings configretry.BackOffConfig
}
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/azure/package_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/azure/package_test.go
new file mode 100644
index 000000000000..c7b9e1e8dda9
--- /dev/null
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/azure/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package azure
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/ec2/package_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/ec2/package_test.go
new file mode 100644
index 000000000000..84becb4326f7
--- /dev/null
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/ec2/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package ec2
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/ecs/package_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/ecs/package_test.go
new file mode 100644
index 000000000000..d53a4a4d11c2
--- /dev/null
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/ecs/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package ecs
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/gcp/package_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/gcp/package_test.go
new file mode 100644
index 000000000000..3f4c7e378e6d
--- /dev/null
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/gcp/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package gcp
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai.go b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai.go
index d3c3a8dddda2..344ae0746a1a 100644
--- a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai.go
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai.go
@@ -26,34 +26,44 @@ func newGohai(logger *zap.Logger) *gohai.Gohai {
res := new(gohai.Gohai)
if p, err := new(cpu.Cpu).Collect(); err != nil {
- logger.Info("Failed to retrieve cpu metadata", zap.Error(err))
+ logger.Debug("Failed to retrieve cpu metadata", zap.Error(err))
+ } else if cpu, ok := p.(map[string]string); !ok {
+ logger.Warn("Internal error: Failed to cast cpu metadata to map[string]string", zap.Any("cpu", p))
} else {
- res.CPU = p
+ res.CPU = cpu
}
if p, err := new(filesystem.FileSystem).Collect(); err != nil {
- logger.Info("Failed to retrieve filesystem metadata", zap.Error(err))
+ logger.Debug("Failed to retrieve filesystem metadata", zap.Error(err))
+ } else if fs, ok := p.([]any); !ok {
+ logger.Warn("Internal error: Failed to cast filesystem metadata to []any", zap.Any("filesystem", p))
} else {
- res.FileSystem = p
+ res.FileSystem = fs
}
if p, err := new(memory.Memory).Collect(); err != nil {
- logger.Info("Failed to retrieve memory metadata", zap.Error(err))
+ logger.Debug("Failed to retrieve memory metadata", zap.Error(err))
+ } else if mem, ok := p.(map[string]string); !ok {
+ logger.Warn("Internal error: Failed to cast memory metadata to map[string]string", zap.Any("memory", p))
} else {
- res.Memory = p
+ res.Memory = mem
}
// in case of containerized environment, this would return pod id not node's ip
if p, err := new(network.Network).Collect(); err != nil {
- logger.Info("Failed to retrieve network metadata", zap.Error(err))
+ logger.Debug("Failed to retrieve network metadata", zap.Error(err))
+ } else if net, ok := p.(map[string]any); !ok {
+ logger.Warn("Internal error: Failed to cast network metadata to map[string]any", zap.Any("network", p))
} else {
- res.Network = p
+ res.Network = net
}
if p, err := new(platform.Platform).Collect(); err != nil {
- logger.Info("Failed to retrieve platform metadata", zap.Error(err))
+ logger.Debug("Failed to retrieve platform metadata", zap.Error(err))
+ } else if platform, ok := p.(map[string]string); !ok {
+ logger.Warn("Internal error: Failed to cast platform metadata to map[string]string", zap.Any("platform", p))
} else {
- res.Platform = p
+ res.Platform = platform
}
return res
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai_test.go
index 773d8147ae92..cf0e72fe3817 100644
--- a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai_test.go
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/gohai_test.go
@@ -19,8 +19,11 @@ func TestGetPayload(t *testing.T) {
logger := zap.NewNop()
gohai := NewPayload(logger)
assert.NotNil(t, gohai.Gohai.Gohai.CPU)
+ assert.NotPanics(t, func() { gohai.CPU() })
assert.NotNil(t, gohai.Gohai.Gohai.FileSystem)
assert.NotNil(t, gohai.Gohai.Gohai.Memory)
assert.NotNil(t, gohai.Gohai.Gohai.Network)
+ assert.NotPanics(t, func() { gohai.Network() })
assert.NotNil(t, gohai.Gohai.Gohai.Platform)
+ assert.NotPanics(t, func() { gohai.Platform() })
}
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes.go b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes.go
index 2d2fb9803179..2003b4f70b1e 100644
--- a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes.go
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
+
//go:build linux || darwin
-// +build linux darwin
package gohai // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/hostmetadata/internal/gohai"
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes_other.go b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes_other.go
index 0c7c0403979f..e0dfc7176d7d 100644
--- a/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes_other.go
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/gohai/processes_other.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
+
//go:build !linux && !darwin
-// +build !linux,!darwin
package gohai // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/hostmetadata/internal/gohai"
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/k8s/package_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/k8s/package_test.go
new file mode 100644
index 000000000000..eef8bf585d82
--- /dev/null
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/k8s/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package k8s
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix.go b/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix.go
index 30d2137282cf..ca55c518a905 100644
--- a/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix.go
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix.go
@@ -1,7 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
//go:build !windows
-// +build !windows
package system // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/hostmetadata/internal/system"
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix_test.go
index 2d752048b8b1..805a0db5cae7 100644
--- a/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix_test.go
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/system/host_unix_test.go
@@ -1,7 +1,6 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
//go:build !windows
-// +build !windows
package system
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/system/host_windows.go b/exporter/datadogexporter/internal/hostmetadata/internal/system/host_windows.go
index 9b59eef6aef9..306742f8a28d 100644
--- a/exporter/datadogexporter/internal/hostmetadata/internal/system/host_windows.go
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/system/host_windows.go
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0
//go:build windows
-// +build windows
package system // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/hostmetadata/internal/system"
diff --git a/exporter/datadogexporter/internal/hostmetadata/internal/system/package_test.go b/exporter/datadogexporter/internal/hostmetadata/internal/system/package_test.go
new file mode 100644
index 000000000000..641255b7bf5e
--- /dev/null
+++ b/exporter/datadogexporter/internal/hostmetadata/internal/system/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package system
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/hostmetadata/metadata.go b/exporter/datadogexporter/internal/hostmetadata/metadata.go
index ed4ea8626c77..700f20269127 100644
--- a/exporter/datadogexporter/internal/hostmetadata/metadata.go
+++ b/exporter/datadogexporter/internal/hostmetadata/metadata.go
@@ -144,7 +144,7 @@ func NewPusher(params exporter.CreateSettings, pcfg PusherConfig) inframetadata.
params: params,
pcfg: pcfg,
retrier: clientutil.NewRetrier(params.Logger, pcfg.RetrySettings, scrub.NewScrubber()),
- httpClient: clientutil.NewHTTPClient(pcfg.TimeoutSettings, pcfg.InsecureSkipVerify),
+ httpClient: clientutil.NewHTTPClient(pcfg.ClientConfig),
}
}
diff --git a/exporter/datadogexporter/internal/hostmetadata/metadata_test.go b/exporter/datadogexporter/internal/hostmetadata/metadata_test.go
index fb6dca6597cb..9c434ee40b76 100644
--- a/exporter/datadogexporter/internal/hostmetadata/metadata_test.go
+++ b/exporter/datadogexporter/internal/hostmetadata/metadata_test.go
@@ -186,7 +186,7 @@ func TestPushMetadata(t *testing.T) {
}
handler := http.NewServeMux()
- handler.HandleFunc("/intake", func(w http.ResponseWriter, r *http.Request) {
+ handler.HandleFunc("/intake", func(_ http.ResponseWriter, r *http.Request) {
assert.Equal(t, r.Header.Get("DD-Api-Key"), "apikey")
assert.Equal(t, r.Header.Get("User-Agent"), "otelcontribcol/1.0")
diff --git a/exporter/datadogexporter/internal/hostmetadata/valid/package_test.go b/exporter/datadogexporter/internal/hostmetadata/valid/package_test.go
new file mode 100644
index 000000000000..af34af695cd4
--- /dev/null
+++ b/exporter/datadogexporter/internal/hostmetadata/valid/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package valid
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/logs/package_test.go b/exporter/datadogexporter/internal/logs/package_test.go
new file mode 100644
index 000000000000..1158f120b289
--- /dev/null
+++ b/exporter/datadogexporter/internal/logs/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package logs
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/logs/sender.go b/exporter/datadogexporter/internal/logs/sender.go
index 016bc68da510..7aa6d26cec4d 100644
--- a/exporter/datadogexporter/internal/logs/sender.go
+++ b/exporter/datadogexporter/internal/logs/sender.go
@@ -8,7 +8,7 @@ import (
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/config/confighttp"
"go.uber.org/zap"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/clientutil"
@@ -27,7 +27,7 @@ type Sender struct {
const logsV2 = "v2.LogsApi.SubmitLog"
// NewSender creates a new Sender
-func NewSender(endpoint string, logger *zap.Logger, s exporterhelper.TimeoutSettings, insecureSkipVerify, verbose bool, apiKey string) *Sender {
+func NewSender(endpoint string, logger *zap.Logger, hcs confighttp.ClientConfig, verbose bool, apiKey string) *Sender {
cfg := datadog.NewConfiguration()
logger.Info("Logs sender initialized", zap.String("endpoint", endpoint))
cfg.OperationServers[logsV2] = datadog.ServerConfigurations{
@@ -35,7 +35,7 @@ func NewSender(endpoint string, logger *zap.Logger, s exporterhelper.TimeoutSett
URL: endpoint,
},
}
- cfg.HTTPClient = clientutil.NewHTTPClient(s, insecureSkipVerify)
+ cfg.HTTPClient = clientutil.NewHTTPClient(hcs)
cfg.AddDefaultHeader("DD-API-KEY", apiKey)
apiClient := datadog.NewAPIClient(cfg)
return &Sender{
diff --git a/exporter/datadogexporter/internal/logs/sender_test.go b/exporter/datadogexporter/internal/logs/sender_test.go
index fe95e1360162..cb74c4abf785 100644
--- a/exporter/datadogexporter/internal/logs/sender_test.go
+++ b/exporter/datadogexporter/internal/logs/sender_test.go
@@ -12,7 +12,8 @@ import (
"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
"github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configtls"
"go.uber.org/zap/zaptest"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/testutil"
@@ -191,7 +192,7 @@ func TestSubmitLogs(t *testing.T) {
}
})
defer server.Close()
- s := NewSender(server.URL, logger, exporterhelper.TimeoutSettings{Timeout: time.Second * 10}, true, true, "")
+ s := NewSender(server.URL, logger, confighttp.ClientConfig{Timeout: time.Second * 10, TLSSetting: configtls.ClientConfig{InsecureSkipVerify: true}}, true, "")
if err := s.SubmitLogs(context.Background(), tt.payload); err != nil {
t.Fatal(err)
}
diff --git a/exporter/datadogexporter/internal/metadata/generated_status.go b/exporter/datadogexporter/internal/metadata/generated_status.go
index 0c8a1b30a60b..0aaf59990097 100644
--- a/exporter/datadogexporter/internal/metadata/generated_status.go
+++ b/exporter/datadogexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("datadog")
)
const (
- Type = "datadog"
LogsStability = component.StabilityLevelAlpha
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/datadog")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/datadog")
+}
diff --git a/exporter/datadogexporter/internal/metrics/consumer_test.go b/exporter/datadogexporter/internal/metrics/consumer_test.go
index 37bceedf1861..eefe38964830 100644
--- a/exporter/datadogexporter/internal/metrics/consumer_test.go
+++ b/exporter/datadogexporter/internal/metrics/consumer_test.go
@@ -14,6 +14,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/pdata/pmetric"
conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
"go.uber.org/zap"
@@ -28,7 +29,12 @@ func (t testProvider) Source(context.Context) (source.Source, error) {
}
func newTranslator(t *testing.T, logger *zap.Logger) *metrics.Translator {
- tr, err := metrics.NewTranslator(logger,
+ set := componenttest.NewNopTelemetrySettings()
+ set.Logger = logger
+ attributesTranslator, err := attributes.NewTranslator(set)
+ require.NoError(t, err)
+ tr, err := metrics.NewTranslator(set,
+ attributesTranslator,
metrics.WithHistogramMode(metrics.HistogramModeDistributions),
metrics.WithNumberMode(metrics.NumberModeCumulativeToDelta),
metrics.WithFallbackSourceProvider(testProvider("fallbackHostname")),
diff --git a/exporter/datadogexporter/internal/metrics/sketches/package_test.go b/exporter/datadogexporter/internal/metrics/sketches/package_test.go
new file mode 100644
index 000000000000..5d296837beea
--- /dev/null
+++ b/exporter/datadogexporter/internal/metrics/sketches/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package sketches
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/scrub/package_test.go b/exporter/datadogexporter/internal/scrub/package_test.go
new file mode 100644
index 000000000000..7f10499845b8
--- /dev/null
+++ b/exporter/datadogexporter/internal/scrub/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package scrub
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/datadogexporter/internal/testutil/test_utils.go b/exporter/datadogexporter/internal/testutil/test_utils.go
index 25abd1cd99ef..20fad52506cd 100644
--- a/exporter/datadogexporter/internal/testutil/test_utils.go
+++ b/exporter/datadogexporter/internal/testutil/test_utils.go
@@ -55,7 +55,7 @@ func DatadogServerMock(overwriteHandlerFuncs ...OverwriteHandleFunc) *DatadogSer
MetricV1Endpoint: metricsEndpoint,
MetricV2Endpoint: metricsV2Endpoint,
MetadataEndpoint: newMetadataEndpoint(metadataChan),
- "/": func(w http.ResponseWriter, r *http.Request) {},
+ "/": func(_ http.ResponseWriter, _ *http.Request) {},
}
for _, f := range overwriteHandlerFuncs {
p, hf := f()
@@ -84,7 +84,7 @@ type HTTPRequestRecorder struct {
}
func (rec *HTTPRequestRecorder) HandlerFunc() (string, http.HandlerFunc) {
- return rec.Pattern, func(w http.ResponseWriter, r *http.Request) {
+ return rec.Pattern, func(_ http.ResponseWriter, r *http.Request) {
rec.Header = r.Header
rec.ByteBody, _ = io.ReadAll(r.Body)
}
@@ -97,7 +97,7 @@ type HTTPRequestRecorderWithChan struct {
}
func (rec *HTTPRequestRecorderWithChan) HandlerFunc() (string, http.HandlerFunc) {
- return rec.Pattern, func(w http.ResponseWriter, r *http.Request) {
+ return rec.Pattern, func(_ http.ResponseWriter, r *http.Request) {
bytesBody, _ := io.ReadAll(r.Body)
rec.ReqChan <- bytesBody
}
@@ -163,7 +163,7 @@ func metricsV2Endpoint(w http.ResponseWriter, _ *http.Request) {
}
func newMetadataEndpoint(c chan []byte) func(http.ResponseWriter, *http.Request) {
- return func(w http.ResponseWriter, r *http.Request) {
+ return func(_ http.ResponseWriter, r *http.Request) {
body, _ := io.ReadAll(r.Body)
c <- body
}
diff --git a/exporter/datadogexporter/logs_exporter.go b/exporter/datadogexporter/logs_exporter.go
index 92f5e50d20a6..37d0a52b1675 100644
--- a/exporter/datadogexporter/logs_exporter.go
+++ b/exporter/datadogexporter/logs_exporter.go
@@ -5,10 +5,11 @@ package datadogexporter // import "github.com/open-telemetry/opentelemetry-colle
import (
"context"
+ "fmt"
"sync"
- "github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
"github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata"
+ "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes"
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source"
logsmapping "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/logs"
"go.opentelemetry.io/collector/consumer"
@@ -22,14 +23,16 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datadogexporter/internal/scrub"
)
-// otelTag specifies a tag to be added to all logs sent from the Datadog exporter
-const otelTag = "otel_source:datadog_exporter"
+// otelSource specifies a source to be added to all logs sent from the Datadog exporter
+// The tag has key `otel_source` and the value specified on this constant.
+const otelSource = "datadog_exporter"
type logsExporter struct {
params exporter.CreateSettings
cfg *Config
ctx context.Context // ctx triggers shutdown upon cancellation
scrubber scrub.Scrubber // scrubber scrubs sensitive information from error messages
+ translator *logsmapping.Translator
sender *logs.Sender
onceMetadata *sync.Once
sourceProvider source.Provider
@@ -42,6 +45,7 @@ func newLogsExporter(
params exporter.CreateSettings,
cfg *Config,
onceMetadata *sync.Once,
+ attributesTranslator *attributes.Translator,
sourceProvider source.Provider,
metadataReporter *inframetadata.Reporter,
) (*logsExporter, error) {
@@ -51,12 +55,11 @@ func newLogsExporter(
if isMetricExportV2Enabled() {
apiClient := clientutil.CreateAPIClient(
params.BuildInfo,
- cfg.Metrics.TCPAddr.Endpoint,
- cfg.TimeoutSettings,
- cfg.LimitedHTTPClientSettings.TLSSetting.InsecureSkipVerify)
+ cfg.Metrics.TCPAddrConfig.Endpoint,
+ cfg.ClientConfig)
go func() { errchan <- clientutil.ValidateAPIKey(ctx, string(cfg.API.Key), params.Logger, apiClient) }()
} else {
- client := clientutil.CreateZorkianClient(string(cfg.API.Key), cfg.Metrics.TCPAddr.Endpoint)
+ client := clientutil.CreateZorkianClient(string(cfg.API.Key), cfg.Metrics.TCPAddrConfig.Endpoint)
go func() { errchan <- clientutil.ValidateAPIKeyZorkian(params.Logger, client) }()
}
// validate the apiKey
@@ -66,12 +69,17 @@ func newLogsExporter(
}
}
- s := logs.NewSender(cfg.Logs.TCPAddr.Endpoint, params.Logger, cfg.TimeoutSettings, cfg.LimitedHTTPClientSettings.TLSSetting.InsecureSkipVerify, cfg.Logs.DumpPayloads, string(cfg.API.Key))
+ translator, err := logsmapping.NewTranslator(params.TelemetrySettings, attributesTranslator, otelSource)
+ if err != nil {
+ return nil, fmt.Errorf("failed to create logs translator: %w", err)
+ }
+ s := logs.NewSender(cfg.Logs.TCPAddrConfig.Endpoint, params.Logger, cfg.ClientConfig, cfg.Logs.DumpPayloads, string(cfg.API.Key))
return &logsExporter{
params: params,
cfg: cfg,
ctx: ctx,
+ translator: translator,
sender: s,
onceMetadata: onceMetadata,
scrubber: scrub.NewScrubber(),
@@ -83,7 +91,7 @@ func newLogsExporter(
var _ consumer.ConsumeLogsFunc = (*logsExporter)(nil).consumeLogs
// consumeLogs is implementation of cosumer.ConsumeLogsFunc
-func (exp *logsExporter) consumeLogs(_ context.Context, ld plog.Logs) (err error) {
+func (exp *logsExporter) consumeLogs(ctx context.Context, ld plog.Logs) (err error) {
defer func() { err = exp.scrubber.Scrub(err) }()
if exp.cfg.HostMetadata.Enabled {
// start host metadata with resource attributes from
@@ -103,29 +111,6 @@ func (exp *logsExporter) consumeLogs(_ context.Context, ld plog.Logs) (err error
}
}
- rsl := ld.ResourceLogs()
- var payloads []datadogV2.HTTPLogItem
- // Iterate over resource logs
- for i := 0; i < rsl.Len(); i++ {
- rl := rsl.At(i)
- sls := rl.ScopeLogs()
- res := rl.Resource()
- for j := 0; j < sls.Len(); j++ {
- sl := sls.At(j)
- lsl := sl.LogRecords()
- // iterate over Logs
- for k := 0; k < lsl.Len(); k++ {
- log := lsl.At(k)
- payload := logsmapping.Transform(log, res, exp.params.Logger)
- ddtags := payload.GetDdtags()
- if ddtags != "" {
- payload.SetDdtags(ddtags + "," + otelTag)
- } else {
- payload.SetDdtags(otelTag)
- }
- payloads = append(payloads, payload)
- }
- }
- }
+ payloads := exp.translator.MapLogs(ctx, ld)
return exp.sender.SubmitLogs(exp.ctx, payloads)
}
diff --git a/exporter/datadogexporter/logs_exporter_test.go b/exporter/datadogexporter/logs_exporter_test.go
index 7f01c3629af9..3f858f71f903 100644
--- a/exporter/datadogexporter/logs_exporter_test.go
+++ b/exporter/datadogexporter/logs_exporter_test.go
@@ -8,7 +8,6 @@ import (
"encoding/binary"
"fmt"
"testing"
- "time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -21,6 +20,8 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/traceutil"
)
+const timeFormatString = "2006-01-02T15:04:05.000Z07:00"
+
func TestLogsExporter(t *testing.T) {
lr := testdata.GenerateLogsOneLogRecord()
ld := lr.ResourceLogs().At(0).ScopeLogs().At(0).LogRecords().At(0)
@@ -44,7 +45,7 @@ func TestLogsExporter(t *testing.T) {
"message": ld.Body().AsString(),
"app": "server",
"instance_num": "1",
- "@timestamp": testdata.TestLogTime.Format(time.RFC3339),
+ "@timestamp": testdata.TestLogTime.Format(timeFormatString),
"status": "Info",
"dd.span_id": fmt.Sprintf("%d", spanIDToUint64(ld.SpanID())),
"dd.trace_id": fmt.Sprintf("%d", traceIDToUint64(ld.TraceID())),
@@ -74,7 +75,7 @@ func TestLogsExporter(t *testing.T) {
"message": "hello",
"app": "server",
"instance_num": "1",
- "@timestamp": testdata.TestLogTime.Format(time.RFC3339),
+ "@timestamp": testdata.TestLogTime.Format(timeFormatString),
"status": "Info",
"dd.span_id": fmt.Sprintf("%d", spanIDToUint64(ld.SpanID())),
"dd.trace_id": fmt.Sprintf("%d", traceIDToUint64(ld.TraceID())),
@@ -104,7 +105,7 @@ func TestLogsExporter(t *testing.T) {
"message": ld.Body().AsString(),
"app": "server",
"instance_num": "1",
- "@timestamp": testdata.TestLogTime.Format(time.RFC3339),
+ "@timestamp": testdata.TestLogTime.Format(timeFormatString),
"status": "Info",
"dd.span_id": fmt.Sprintf("%d", spanIDToUint64(ld.SpanID())),
"dd.trace_id": fmt.Sprintf("%d", traceIDToUint64(ld.TraceID())),
@@ -136,7 +137,7 @@ func TestLogsExporter(t *testing.T) {
"message": ld.Body().AsString(),
"app": "server",
"instance_num": "1",
- "@timestamp": testdata.TestLogTime.Format(time.RFC3339),
+ "@timestamp": testdata.TestLogTime.Format(timeFormatString),
"status": "Info",
"dd.span_id": fmt.Sprintf("%d", spanIDToUint64(ld.SpanID())),
"dd.trace_id": fmt.Sprintf("%d", traceIDToUint64(ld.TraceID())),
@@ -152,7 +153,7 @@ func TestLogsExporter(t *testing.T) {
"message": "something happened",
"env": "dev",
"customer": "acme",
- "@timestamp": testdata.TestLogTime.Format(time.RFC3339),
+ "@timestamp": testdata.TestLogTime.Format(timeFormatString),
"status": "Info",
"ddtags": "tag1:true,otel_source:datadog_exporter",
"otel.severity_text": "Info",
@@ -180,7 +181,7 @@ func TestLogsExporter(t *testing.T) {
"message": ld.Body().AsString(),
"app": "server",
"instance_num": "1",
- "@timestamp": testdata.TestLogTime.Format(time.RFC3339),
+ "@timestamp": testdata.TestLogTime.Format(timeFormatString),
"status": "Info",
"dd.span_id": fmt.Sprintf("%d", spanIDToUint64(ld.SpanID())),
"dd.trace_id": fmt.Sprintf("%d", traceIDToUint64(ld.TraceID())),
@@ -196,7 +197,7 @@ func TestLogsExporter(t *testing.T) {
"message": "something happened",
"env": "dev",
"customer": "acme",
- "@timestamp": testdata.TestLogTime.Format(time.RFC3339),
+ "@timestamp": testdata.TestLogTime.Format(timeFormatString),
"status": "Info",
"ddtags": "tag2:true,otel_source:datadog_exporter",
"otel.severity_text": "Info",
@@ -213,12 +214,12 @@ func TestLogsExporter(t *testing.T) {
defer server.Close()
cfg := &Config{
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: server.URL,
},
},
Logs: LogsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: server.URL,
},
},
diff --git a/exporter/datadogexporter/metadata.yaml b/exporter/datadogexporter/metadata.yaml
index 474bdcade49a..eb1992ca1401 100644
--- a/exporter/datadogexporter/metadata.yaml
+++ b/exporter/datadogexporter/metadata.yaml
@@ -1,10 +1,24 @@
type: datadog
+scope_name: otelcol/datadog
status:
class: exporter
stability:
alpha: [logs]
beta: [traces, metrics]
- distributions: [contrib, aws, observiq]
+ distributions: [contrib]
codeowners:
- active: [mx-psi, gbbr, dineshg13, liustanley, songy23, mackjmr]
+ active: [mx-psi, dineshg13, liustanley, songy23, mackjmr]
+ emeritus: [gbbr]
+
+tests:
+ config:
+ hostname: customhostname
+ api:
+ key: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ site: datadoghq.eu
+ sending_queue:
+ enabled: false
+ retry_on_failure:
+ enabled: false
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/datadogexporter/metrics_exporter.go b/exporter/datadogexporter/metrics_exporter.go
index 7dccdf16d194..94709256d1b5 100644
--- a/exporter/datadogexporter/metrics_exporter.go
+++ b/exporter/datadogexporter/metrics_exporter.go
@@ -13,11 +13,13 @@ import (
"time"
pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace"
- "github.com/DataDog/datadog-agent/pkg/trace/api"
+ "github.com/DataDog/datadog-agent/pkg/trace/config"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
"github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata"
+ "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes"
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source"
otlpmetrics "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
@@ -34,6 +36,7 @@ import (
type metricsExporter struct {
params exporter.CreateSettings
cfg *Config
+ agntConfig *config.AgentConfig
ctx context.Context
client *zorkian.Client
metricsAPI *datadogV2.MetricsApi
@@ -45,12 +48,12 @@ type metricsExporter struct {
metadataReporter *inframetadata.Reporter
// getPushTime returns a Unix time in nanoseconds, representing the time pushing metrics.
// It will be overwritten in tests.
- getPushTime func() uint64
- apmStatsProcessor api.StatsProcessor
+ getPushTime func() uint64
+ statsToAgent chan<- *pb.StatsPayload
}
// translatorFromConfig creates a new metrics translator from the exporter
-func translatorFromConfig(logger *zap.Logger, cfg *Config, sourceProvider source.Provider) (*otlpmetrics.Translator, error) {
+func translatorFromConfig(set component.TelemetrySettings, cfg *Config, attrsTranslator *attributes.Translator, sourceProvider source.Provider, statsOut chan []byte) (*otlpmetrics.Translator, error) {
options := []otlpmetrics.TranslatorOption{
otlpmetrics.WithDeltaTTL(cfg.Metrics.DeltaTTL),
otlpmetrics.WithFallbackSourceProvider(sourceProvider),
@@ -65,10 +68,6 @@ func translatorFromConfig(logger *zap.Logger, cfg *Config, sourceProvider source
options = append(options, otlpmetrics.WithQuantiles())
}
- if cfg.Metrics.ExporterConfig.ResourceAttributesAsTags {
- options = append(options, otlpmetrics.WithResourceAttributesAsTags())
- }
-
if cfg.Metrics.ExporterConfig.InstrumentationScopeMetadataAsTags {
options = append(options, otlpmetrics.WithInstrumentationScopeMetadataAsTags())
}
@@ -86,50 +85,54 @@ func translatorFromConfig(logger *zap.Logger, cfg *Config, sourceProvider source
options = append(options, otlpmetrics.WithInitialCumulMonoValueMode(
otlpmetrics.InitialCumulMonoValueMode(cfg.Metrics.SumConfig.InitialCumulativeMonotonicMode)))
- return otlpmetrics.NewTranslator(logger, options...)
+ options = append(options, otlpmetrics.WithStatsOut(statsOut))
+ return otlpmetrics.NewTranslator(set, attrsTranslator, options...)
}
func newMetricsExporter(
ctx context.Context,
params exporter.CreateSettings,
cfg *Config,
+ agntConfig *config.AgentConfig,
onceMetadata *sync.Once,
+ attrsTranslator *attributes.Translator,
sourceProvider source.Provider,
- apmStatsProcessor api.StatsProcessor,
+ statsToAgent chan<- *pb.StatsPayload,
metadataReporter *inframetadata.Reporter,
+ statsOut chan []byte,
) (*metricsExporter, error) {
- tr, err := translatorFromConfig(params.Logger, cfg, sourceProvider)
+ tr, err := translatorFromConfig(params.TelemetrySettings, cfg, attrsTranslator, sourceProvider, statsOut)
if err != nil {
return nil, err
}
scrubber := scrub.NewScrubber()
exporter := &metricsExporter{
- params: params,
- cfg: cfg,
- ctx: ctx,
- tr: tr,
- scrubber: scrubber,
- retrier: clientutil.NewRetrier(params.Logger, cfg.RetrySettings, scrubber),
- onceMetadata: onceMetadata,
- sourceProvider: sourceProvider,
- getPushTime: func() uint64 { return uint64(time.Now().UTC().UnixNano()) },
- apmStatsProcessor: apmStatsProcessor,
- metadataReporter: metadataReporter,
+ params: params,
+ cfg: cfg,
+ ctx: ctx,
+ agntConfig: agntConfig,
+ tr: tr,
+ scrubber: scrubber,
+ retrier: clientutil.NewRetrier(params.Logger, cfg.BackOffConfig, scrubber),
+ onceMetadata: onceMetadata,
+ sourceProvider: sourceProvider,
+ getPushTime: func() uint64 { return uint64(time.Now().UTC().UnixNano()) },
+ statsToAgent: statsToAgent,
+ metadataReporter: metadataReporter,
}
errchan := make(chan error)
if isMetricExportV2Enabled() {
apiClient := clientutil.CreateAPIClient(
params.BuildInfo,
- cfg.Metrics.TCPAddr.Endpoint,
- cfg.TimeoutSettings,
- cfg.LimitedHTTPClientSettings.TLSSetting.InsecureSkipVerify)
+ cfg.Metrics.TCPAddrConfig.Endpoint,
+ cfg.ClientConfig)
go func() { errchan <- clientutil.ValidateAPIKey(ctx, string(cfg.API.Key), params.Logger, apiClient) }()
exporter.metricsAPI = datadogV2.NewMetricsApi(apiClient)
} else {
- client := clientutil.CreateZorkianClient(string(cfg.API.Key), cfg.Metrics.TCPAddr.Endpoint)
+ client := clientutil.CreateZorkianClient(string(cfg.API.Key), cfg.Metrics.TCPAddrConfig.Endpoint)
client.ExtraHeader["User-Agent"] = clientutil.UserAgent(params.BuildInfo)
- client.HttpClient = clientutil.NewHTTPClient(cfg.TimeoutSettings, cfg.LimitedHTTPClientSettings.TLSSetting.InsecureSkipVerify)
+ client.HttpClient = clientutil.NewHTTPClient(cfg.ClientConfig)
go func() { errchan <- clientutil.ValidateAPIKeyZorkian(params.Logger, client) }()
exporter.client = client
}
@@ -150,7 +153,7 @@ func (exp *metricsExporter) pushSketches(ctx context.Context, sl sketches.Sketch
req, err := http.NewRequestWithContext(ctx,
http.MethodPost,
- exp.cfg.Metrics.TCPAddr.Endpoint+sketches.SketchSeriesEndpoint,
+ exp.cfg.Metrics.TCPAddrConfig.Endpoint+sketches.SketchSeriesEndpoint,
bytes.NewBuffer(payload),
)
if err != nil {
@@ -256,8 +259,18 @@ func (exp *metricsExporter) PushMetricsData(ctx context.Context, md pmetric.Metr
if len(sp) > 0 {
exp.params.Logger.Debug("exporting APM stats payloads", zap.Any("stats_payloads", sp))
statsv := exp.params.BuildInfo.Command + exp.params.BuildInfo.Version
- for _, p := range sp {
- exp.apmStatsProcessor.ProcessStats(p, "", statsv)
+ for _, csp := range sp {
+ if csp.TracerVersion == "" {
+ csp.TracerVersion = statsv
+ }
+ }
+ exp.statsToAgent <- &pb.StatsPayload{
+ AgentHostname: exp.agntConfig.Hostname, // This is "dead-code". We will be removing this code path entirely
+ AgentEnv: exp.agntConfig.DefaultEnv,
+ Stats: sp,
+ AgentVersion: exp.agntConfig.AgentVersion,
+ ClientComputed: false,
+ SplitPayload: false,
}
}
diff --git a/exporter/datadogexporter/metrics_exporter_test.go b/exporter/datadogexporter/metrics_exporter_test.go
index 8dcf3d792a47..23e1401e8b65 100644
--- a/exporter/datadogexporter/metrics_exporter_test.go
+++ b/exporter/datadogexporter/metrics_exporter_test.go
@@ -16,13 +16,16 @@ import (
"github.com/DataDog/agent-payload/v5/gogen"
pb "github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace"
+ traceconfig "github.com/DataDog/datadog-agent/pkg/trace/config"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
"github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata"
"github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata/payload"
+ "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes"
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source"
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/metrics"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/confignet"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pdata/pcommon"
@@ -46,7 +49,7 @@ func TestNewExporter(t *testing.T) {
Key: "ddog_32_characters_long_api_key1",
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: server.URL,
},
DeltaTTL: 3600,
@@ -295,22 +298,26 @@ func Test_metricsExporter_PushMetricsData(t *testing.T) {
defer server.Close()
var (
- once sync.Once
- statsRecorder testutil.MockStatsProcessor
+ once sync.Once
)
-
+ statsToAgent := make(chan *pb.StatsPayload, 1000) // Buffer the channel to allow test to pass without go-routines
pusher := newTestPusher(t)
reporter, err := inframetadata.NewReporter(zap.NewNop(), pusher, 1*time.Second)
require.NoError(t, err)
-
+ attributesTranslator, err := attributes.NewTranslator(componenttest.NewNopTelemetrySettings())
+ require.NoError(t, err)
+ acfg := traceconfig.New()
exp, err := newMetricsExporter(
context.Background(),
exportertest.NewNopCreateSettings(),
newTestConfig(t, server.URL, tt.hostTags, tt.histogramMode),
+ acfg,
&once,
+ attributesTranslator,
&testutil.MockSourceProvider{Src: tt.source},
- &statsRecorder,
+ statsToAgent,
reporter,
+ nil,
)
if tt.expectedErr == nil {
assert.NoError(t, err, "unexpected error")
@@ -352,10 +359,18 @@ func Test_metricsExporter_PushMetricsData(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, expected, sketchRecorder.ByteBody)
}
- if tt.expectedStats == nil {
- assert.Len(t, statsRecorder.In, 0)
- } else {
- assert.ElementsMatch(t, statsRecorder.In, tt.expectedStats)
+ if tt.expectedStats != nil {
+ var actualStats []*pb.ClientStatsPayload
+ pullStats:
+ for len(actualStats) < len(tt.expectedStats) {
+ select {
+ case <-time.After(10 * time.Second):
+ break pullStats
+ case sp := <-statsToAgent:
+ actualStats = append(actualStats, sp.Stats...)
+ }
+ }
+ assert.ElementsMatch(t, actualStats, tt.expectedStats)
}
})
}
@@ -374,7 +389,7 @@ func TestNewExporter_Zorkian(t *testing.T) {
Key: "ddog_32_characters_long_api_key1",
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: server.URL,
},
DeltaTTL: 3600,
@@ -614,7 +629,7 @@ func Test_metricsExporter_PushMetricsData_Zorkian(t *testing.T) {
expectedErr: nil,
},
{
- metrics: createTestMetricsWithStats(),
+ metrics: createTestMetricsWithStats(t),
source: source.Source{
Kind: source.HostnameKind,
Identifier: "test-host",
@@ -685,20 +700,26 @@ func Test_metricsExporter_PushMetricsData_Zorkian(t *testing.T) {
defer server.Close()
var (
- once sync.Once
- statsRecorder testutil.MockStatsProcessor
+ once sync.Once
)
+ statsToAgent := make(chan *pb.StatsPayload, 1000)
pusher := newTestPusher(t)
reporter, err := inframetadata.NewReporter(zap.NewNop(), pusher, 1*time.Second)
require.NoError(t, err)
+ attributesTranslator, err := attributes.NewTranslator(componenttest.NewNopTelemetrySettings())
+ require.NoError(t, err)
+ acfg := traceconfig.New()
exp, err := newMetricsExporter(
context.Background(),
exportertest.NewNopCreateSettings(),
newTestConfig(t, server.URL, tt.hostTags, tt.histogramMode),
+ acfg,
&once,
+ attributesTranslator,
&testutil.MockSourceProvider{Src: tt.source},
- &statsRecorder,
+ statsToAgent,
reporter,
+ nil,
)
if tt.expectedErr == nil {
assert.NoError(t, err, "unexpected error")
@@ -735,26 +756,37 @@ func Test_metricsExporter_PushMetricsData_Zorkian(t *testing.T) {
assert.NoError(t, err)
assert.Equal(t, expected, sketchRecorder.ByteBody)
}
- if tt.expectedStats == nil {
- assert.Len(t, statsRecorder.In, 0)
- } else {
- assert.ElementsMatch(t, statsRecorder.In, tt.expectedStats)
+ if tt.expectedStats != nil {
+ var actualStats []*pb.ClientStatsPayload
+ pullStats:
+ for len(actualStats) < len(tt.expectedStats) {
+ select {
+ case <-time.After(10 * time.Second):
+ break pullStats
+ case sp := <-statsToAgent:
+ actualStats = append(actualStats, sp.Stats...)
+ }
+ }
+ assert.ElementsMatch(t, actualStats, tt.expectedStats)
}
})
}
}
-func createTestMetricsWithStats() pmetric.Metrics {
+func createTestMetricsWithStats(t *testing.T) pmetric.Metrics {
md := createTestMetrics(map[string]string{
conventions.AttributeDeploymentEnvironment: "dev",
"custom_attribute": "custom_value",
})
dest := md.ResourceMetrics()
- logger, _ := zap.NewDevelopment()
- trans, err := metrics.NewTranslator(logger)
- if err != nil {
- panic(err)
- }
+ set := componenttest.NewNopTelemetrySettings()
+ var err error
+ set.Logger, err = zap.NewDevelopment()
+ require.NoError(t, err)
+ attributesTranslator, err := attributes.NewTranslator(set)
+ require.NoError(t, err)
+ trans, err := metrics.NewTranslator(set, attributesTranslator)
+ require.NoError(t, err)
src := trans.
StatsPayloadToMetrics(&pb.StatsPayload{Stats: testutil.StatsPayloads}).
ResourceMetrics()
@@ -827,7 +859,7 @@ func newTestConfig(t *testing.T, endpoint string, hostTags []string, histogramMo
Tags: hostTags,
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: endpoint,
},
HistConfig: HistogramConfig{
diff --git a/exporter/datadogexporter/traces_exporter.go b/exporter/datadogexporter/traces_exporter.go
index 71a02caf1b0c..05088b2f3db9 100644
--- a/exporter/datadogexporter/traces_exporter.go
+++ b/exporter/datadogexporter/traces_exporter.go
@@ -15,7 +15,9 @@ import (
tracelog "github.com/DataDog/datadog-agent/pkg/trace/log"
"github.com/DataDog/datadog-agent/pkg/trace/telemetry"
"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
+ "github.com/DataDog/datadog-go/v5/statsd"
"github.com/DataDog/opentelemetry-mapping-go/pkg/inframetadata"
+ "github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes"
"github.com/DataDog/opentelemetry-mapping-go/pkg/otlp/attributes/source"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
@@ -62,7 +64,7 @@ func newTracesExporter(
onceMetadata: onceMetadata,
scrubber: scrubber,
sourceProvider: sourceProvider,
- retrier: clientutil.NewRetrier(params.Logger, cfg.RetrySettings, scrubber),
+ retrier: clientutil.NewRetrier(params.Logger, cfg.BackOffConfig, scrubber),
metadataReporter: metadataReporter,
}
// client to send running metric to the backend & perform API key validation
@@ -70,13 +72,12 @@ func newTracesExporter(
if isMetricExportV2Enabled() {
apiClient := clientutil.CreateAPIClient(
params.BuildInfo,
- cfg.Metrics.TCPAddr.Endpoint,
- cfg.TimeoutSettings,
- cfg.LimitedHTTPClientSettings.TLSSetting.InsecureSkipVerify)
+ cfg.Metrics.TCPAddrConfig.Endpoint,
+ cfg.ClientConfig)
go func() { errchan <- clientutil.ValidateAPIKey(ctx, string(cfg.API.Key), params.Logger, apiClient) }()
exp.metricsAPI = datadogV2.NewMetricsApi(apiClient)
} else {
- client := clientutil.CreateZorkianClient(string(cfg.API.Key), cfg.Metrics.TCPAddr.Endpoint)
+ client := clientutil.CreateZorkianClient(string(cfg.API.Key), cfg.Metrics.TCPAddrConfig.Endpoint)
go func() { errchan <- clientutil.ValidateAPIKeyZorkian(params.Logger, client) }()
exp.client = client
}
@@ -181,7 +182,15 @@ func (exp *traceExporter) exportUsageMetrics(ctx context.Context, hosts map[stri
}
}
-func newTraceAgent(ctx context.Context, params exporter.CreateSettings, cfg *Config, sourceProvider source.Provider) (*agent.Agent, error) {
+func newTraceAgent(ctx context.Context, params exporter.CreateSettings, cfg *Config, sourceProvider source.Provider, metricsClient statsd.ClientInterface, attrsTranslator *attributes.Translator) (*agent.Agent, error) {
+ acfg, err := newTraceAgentConfig(ctx, params, cfg, sourceProvider, attrsTranslator)
+ if err != nil {
+ return nil, err
+ }
+ return agent.NewAgent(ctx, acfg, telemetry.NewNoopCollector(), metricsClient), nil
+}
+
+func newTraceAgentConfig(ctx context.Context, params exporter.CreateSettings, cfg *Config, sourceProvider source.Provider, attrsTranslator *attributes.Translator) (*traceconfig.AgentConfig, error) {
acfg := traceconfig.New()
src, err := sourceProvider.Source(ctx)
if err != nil {
@@ -190,16 +199,18 @@ func newTraceAgent(ctx context.Context, params exporter.CreateSettings, cfg *Con
if src.Kind == source.HostnameKind {
acfg.Hostname = src.Identifier
}
+ acfg.OTLPReceiver.AttributesTranslator = attrsTranslator
acfg.OTLPReceiver.SpanNameRemappings = cfg.Traces.SpanNameRemappings
acfg.OTLPReceiver.SpanNameAsResourceName = cfg.Traces.SpanNameAsResourceName
acfg.Endpoints[0].APIKey = string(cfg.API.Key)
acfg.Ignore["resource"] = cfg.Traces.IgnoreResources
acfg.ReceiverPort = 0 // disable HTTP receiver
acfg.AgentVersion = fmt.Sprintf("datadogexporter-%s-%s", params.BuildInfo.Command, params.BuildInfo.Version)
- acfg.SkipSSLValidation = cfg.LimitedHTTPClientSettings.TLSSetting.InsecureSkipVerify
+ acfg.SkipSSLValidation = cfg.ClientConfig.TLSSetting.InsecureSkipVerify
acfg.ComputeStatsBySpanKind = cfg.Traces.ComputeStatsBySpanKind
acfg.PeerServiceAggregation = cfg.Traces.PeerServiceAggregation
acfg.PeerTagsAggregation = cfg.Traces.PeerTagsAggregation
+ acfg.PeerTags = cfg.Traces.PeerTags
if v := cfg.Traces.flushInterval; v > 0 {
acfg.TraceWriter.FlushPeriodSeconds = v
}
@@ -209,6 +220,6 @@ func newTraceAgent(ctx context.Context, params exporter.CreateSettings, cfg *Con
if addr := cfg.Traces.Endpoint; addr != "" {
acfg.Endpoints[0].Host = addr
}
- tracelog.SetLogger(&zaplogger{params.Logger})
- return agent.NewAgent(ctx, acfg, telemetry.NewNoopCollector()), nil
+ tracelog.SetLogger(&zaplogger{params.Logger}) //TODO: This shouldn't be a singleton
+ return acfg, nil
}
diff --git a/exporter/datadogexporter/traces_exporter_test.go b/exporter/datadogexporter/traces_exporter_test.go
index 4d177a0f34cf..531044cbe14b 100644
--- a/exporter/datadogexporter/traces_exporter_test.go
+++ b/exporter/datadogexporter/traces_exporter_test.go
@@ -120,7 +120,7 @@ func TestTracesSource(t *testing.T) {
assert.NoError(t, err)
}))
defer metricsServer.Close()
- tracesServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+ tracesServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
rw.WriteHeader(http.StatusAccepted)
}))
defer tracesServer.Close()
@@ -133,10 +133,10 @@ func TestTracesSource(t *testing.T) {
Hostname: "fallbackHostname",
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{Endpoint: metricsServer.URL},
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: metricsServer.URL},
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{Endpoint: tracesServer.URL},
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: tracesServer.URL},
IgnoreResources: []string{},
},
}
@@ -248,12 +248,12 @@ func TestTraceExporter(t *testing.T) {
Hostname: "test-host",
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: metricsServer.URL,
},
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{
+ TCPAddrConfig: confignet.TCPAddrConfig{
Endpoint: server.URL,
},
IgnoreResources: []string{},
@@ -286,7 +286,7 @@ func TestNewTracesExporter(t *testing.T) {
cfg := &Config{}
cfg.API.Key = "ddog_32_characters_long_api_key1"
- cfg.Metrics.TCPAddr.Endpoint = metricsServer.URL
+ cfg.Metrics.TCPAddrConfig.Endpoint = metricsServer.URL
params := exportertest.NewNopCreateSettings()
// The client should have been created correctly
@@ -307,10 +307,10 @@ func TestPushTraceData(t *testing.T) {
Hostname: "test-host",
},
Metrics: MetricsConfig{
- TCPAddr: confignet.TCPAddr{Endpoint: server.URL},
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: server.URL},
},
Traces: TracesConfig{
- TCPAddr: confignet.TCPAddr{Endpoint: server.URL},
+ TCPAddrConfig: confignet.TCPAddrConfig{Endpoint: server.URL},
},
HostMetadata: HostMetadataConfig{
diff --git a/exporter/datasetexporter/README.md b/exporter/datasetexporter/README.md
index 8ac481490d15..05720c9645df 100644
--- a/exporter/datasetexporter/README.md
+++ b/exporter/datasetexporter/README.md
@@ -6,7 +6,7 @@
| Stability | [alpha]: logs, traces |
| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fdataset%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fdataset) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fdataset%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fdataset) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atoulme](https://www.github.com/atoulme), [@martin-majlis-s1](https://www.github.com/martin-majlis-s1), [@zdaratom](https://www.github.com/zdaratom), [@tomaz-s1](https://www.github.com/tomaz-s1) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atoulme](https://www.github.com/atoulme), [@martin-majlis-s1](https://www.github.com/martin-majlis-s1), [@zdaratom-s1](https://www.github.com/zdaratom-s1), [@tomaz-s1](https://www.github.com/tomaz-s1) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
@@ -45,9 +45,11 @@ Make sure to provide the appropriate server host value in the `serverHost` attri
### Optional Settings
+- `debug` (default = false): Adds `session_key` to the server fields. It's useful for debugging throughput issues.
- `buffer`:
- - `max_lifetime` (default = 5s): The maximum delay between sending batches from the same source.
- - `group_by` (default = []): The list of attributes based on which events should be grouped.
+ - `max_lifetime` (default = 5s): The maximum delay between sending batches from the same session.
+ - `purge_older_than` (default = 30s): The maximum delay between receiving data for the same session after which resources associated with it are purged.
+ - `group_by` (default = []): The list of attributes based on which events should be grouped. They are moved from the event attributes to the session info and shown as server fields in the UI.
- `retry_initial_interval` (default = 5s): Time to wait after the first failure before retrying.
- `retry_max_interval` (default = 30s): Is the upper bound on backoff.
- `retry_max_elapsed_time` (default = 300s): Is the maximum amount of time spent trying to send a buffer.
@@ -259,8 +261,6 @@ service:
exporters: [dataset/traces]
```
-## Examples
-
### Handling `serverHost` Attribute
Based on the given configuration and scenarios, here's the expected behavior:
@@ -280,3 +280,41 @@ Based on the given configuration and scenarios, here's the expected behavior:
5. Resource: `{}`, Log: `{'attribute.foo': 'Bar'}`, Env: `SERVER_HOST=''`, Hostname: `ip-172-31-27-19`
* Since the attribute `container_id` is not set and the environmental variable `SERVER_HOST` is empty, the `hostname` of the node (`ip-172-31-27-19`) will be used as the fallback value for `serverHost`.
* Used `serverHost` will be `ip-172-31-27-19`.
+
+## Metrics
+
+To enable metrics you have to:
+1. Run collector with enabled feature gate `telemetry.useOtelForInternalMetrics`. This can be done by executing it with one additional parameter - `--feature-gates=telemetry.useOtelForInternalMetrics`.
+2. Enable metrics scraping as part of the configuration and add receiver into services:
+ ```yaml
+ receivers:
+ prometheus:
+ config:
+ scrape_configs:
+ - job_name: 'otel-collector'
+ scrape_interval: 5s
+ static_configs:
+ - targets: ['0.0.0.0:8888']
+ ...
+ service:
+ pipelines:
+ metrics:
+ # add prometheus among metrics receivers
+ receivers: [prometheus]
+ processors: [batch]
+ exporters: [otlphttp/prometheus, debug]
+ ```
+
+### Available Metrics
+
+Available metrics contain `dataset` in their name. There are counters related to the
+number of processed events (`events`), buffers (`buffer`), sessions (`sessions`), and transferred bytes (`bytes`).
+There are also histograms related to response times (`responseTime`) and payload size (`payloadSize`).
+
+There are several counters related to events/buffers:
+* `enqueued` - the number of received entities
+* `processed` - the number of entities that were accepted by the next layer
+* `dropped` - the number of entities that were not accepted by the next layer
+* `broken` - the number of entities that were somehow corrupted during processing (should be 0)
+
+The number of entities, that are still in the queue can be computed as `enqueued - (processed + dropped + broken)`.
diff --git a/exporter/datasetexporter/config.go b/exporter/datasetexporter/config.go
index c497086434be..22734ba4719a 100644
--- a/exporter/datasetexporter/config.go
+++ b/exporter/datasetexporter/config.go
@@ -13,6 +13,7 @@ import (
datasetConfig "github.com/scalyr/dataset-go/pkg/config"
"github.com/scalyr/dataset-go/pkg/server_host_config"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -105,6 +106,7 @@ func newDefaultLogsSettings() LogsSettings {
}
const bufferMaxLifetime = 5 * time.Second
+const bufferPurgeOlderThan = 30 * time.Second
const bufferRetryInitialInterval = 5 * time.Second
const bufferRetryMaxInterval = 30 * time.Second
const bufferRetryMaxElapsedTime = 300 * time.Second
@@ -112,6 +114,7 @@ const bufferRetryShutdownTimeout = 30 * time.Second
type BufferSettings struct {
MaxLifetime time.Duration `mapstructure:"max_lifetime"`
+ PurgeOlderThan time.Duration `mapstructure:"purge_older_than"`
GroupBy []string `mapstructure:"group_by"`
RetryInitialInterval time.Duration `mapstructure:"retry_initial_interval"`
RetryMaxInterval time.Duration `mapstructure:"retry_max_interval"`
@@ -123,6 +126,7 @@ type BufferSettings struct {
func newDefaultBufferSettings() BufferSettings {
return BufferSettings{
MaxLifetime: bufferMaxLifetime,
+ PurgeOlderThan: bufferPurgeOlderThan,
GroupBy: []string{},
RetryInitialInterval: bufferRetryInitialInterval,
RetryMaxInterval: bufferRetryMaxInterval,
@@ -144,20 +148,23 @@ func newDefaultServerHostSettings() ServerHostSettings {
}
}
+const debugDefault = false
+
type Config struct {
DatasetURL string `mapstructure:"dataset_url"`
APIKey configopaque.String `mapstructure:"api_key"`
+ Debug bool `mapstructure:"debug"`
BufferSettings `mapstructure:"buffer"`
TracesSettings `mapstructure:"traces"`
LogsSettings `mapstructure:"logs"`
ServerHostSettings `mapstructure:"server_host"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
exporterhelper.TimeoutSettings `mapstructure:"timeout"`
}
func (c *Config) Unmarshal(conf *confmap.Conf) error {
- if err := conf.Unmarshal(c, confmap.WithErrorUnused()); err != nil {
+ if err := conf.Unmarshal(c); err != nil {
return fmt.Errorf("cannot unmarshal config: %w", err)
}
@@ -180,16 +187,18 @@ func (c *Config) Validate() error {
// String returns a string representation of the Config object.
// It includes all the fields and their values in the format "field_name: field_value".
func (c *Config) String() string {
+ apiKey, _ := c.APIKey.MarshalText()
s := ""
s += fmt.Sprintf("%s: %s; ", "DatasetURL", c.DatasetURL)
+ s += fmt.Sprintf("%s: %s (%d); ", "APIKey", apiKey, len(c.APIKey))
+ s += fmt.Sprintf("%s: %t; ", "Debug", c.Debug)
s += fmt.Sprintf("%s: %+v; ", "BufferSettings", c.BufferSettings)
s += fmt.Sprintf("%s: %+v; ", "LogsSettings", c.LogsSettings)
s += fmt.Sprintf("%s: %+v; ", "TracesSettings", c.TracesSettings)
s += fmt.Sprintf("%s: %+v; ", "ServerHostSettings", c.ServerHostSettings)
- s += fmt.Sprintf("%s: %+v; ", "RetrySettings", c.RetrySettings)
+ s += fmt.Sprintf("%s: %+v; ", "BackOffConfig", c.BackOffConfig)
s += fmt.Sprintf("%s: %+v; ", "QueueSettings", c.QueueSettings)
s += fmt.Sprintf("%s: %+v", "TimeoutSettings", c.TimeoutSettings)
-
return s
}
@@ -205,6 +214,7 @@ func (c *Config) convert() (*ExporterConfig, error) {
Tokens: datasetConfig.DataSetTokens{WriteLog: string(c.APIKey)},
BufferSettings: buffer_config.DataSetBufferSettings{
MaxLifetime: c.BufferSettings.MaxLifetime,
+ PurgeOlderThan: c.BufferSettings.PurgeOlderThan,
MaxSize: buffer.LimitBufferSize,
GroupBy: c.BufferSettings.GroupBy,
RetryInitialInterval: c.BufferSettings.RetryInitialInterval,
@@ -218,6 +228,7 @@ func (c *Config) convert() (*ExporterConfig, error) {
UseHostName: c.ServerHostSettings.UseHostName,
ServerHost: c.ServerHostSettings.ServerHost,
},
+ Debug: c.Debug,
},
tracesSettings: c.TracesSettings,
logsSettings: c.LogsSettings,
diff --git a/exporter/datasetexporter/config_test.go b/exporter/datasetexporter/config_test.go
index af99f0cf7f93..07db7361c4d2 100644
--- a/exporter/datasetexporter/config_test.go
+++ b/exporter/datasetexporter/config_test.go
@@ -9,6 +9,8 @@ import (
"time"
"github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -21,7 +23,7 @@ func TestConfigUnmarshalUnknownAttributes(t *testing.T) {
"api_key": "secret",
"unknown_attribute": "some value",
})
- err := config.Unmarshal(configMap)
+ err := component.UnmarshalConfig(configMap, config)
unmarshalErr := fmt.Errorf("1 error(s) decoding:\n\n* '' has invalid keys: unknown_attribute")
expectedError := fmt.Errorf("cannot unmarshal config: %w", unmarshalErr)
@@ -37,7 +39,7 @@ func TestConfigUseDefaults(t *testing.T) {
"api_key": "secret",
})
err := config.Unmarshal(configMap)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, "https://example.com", config.DatasetURL)
assert.Equal(t, "secret", string(config.APIKey))
@@ -108,9 +110,11 @@ func TestConfigString(t *testing.T) {
config := Config{
DatasetURL: "https://example.com",
APIKey: "secret",
+ Debug: true,
BufferSettings: BufferSettings{
- MaxLifetime: 123,
- GroupBy: []string{"field1", "field2"},
+ MaxLifetime: 123,
+ PurgeOlderThan: 567,
+ GroupBy: []string{"field1", "field2"},
},
TracesSettings: TracesSettings{
exportSettings: exportSettings{
@@ -134,13 +138,13 @@ func TestConfigString(t *testing.T) {
ServerHost: "foo-bar",
UseHostName: false,
},
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
}
assert.Equal(t,
- "DatasetURL: https://example.com; BufferSettings: {MaxLifetime:123ns GroupBy:[field1 field2] RetryInitialInterval:0s RetryMaxInterval:0s RetryMaxElapsedTime:0s RetryShutdownTimeout:0s}; LogsSettings: {ExportResourceInfo:true ExportResourcePrefix:AAA ExportScopeInfo:true ExportScopePrefix:BBB DecomposeComplexMessageField:true DecomposedComplexMessagePrefix:EEE exportSettings:{ExportSeparator:CCC ExportDistinguishingSuffix:DDD}}; TracesSettings: {exportSettings:{ExportSeparator:TTT ExportDistinguishingSuffix:UUU}}; ServerHostSettings: {UseHostName:false ServerHost:foo-bar}; RetrySettings: {Enabled:true InitialInterval:5s RandomizationFactor:0.5 Multiplier:1.5 MaxInterval:30s MaxElapsedTime:5m0s}; QueueSettings: {Enabled:true NumConsumers:10 QueueSize:1000 StorageID:}; TimeoutSettings: {Timeout:5s}",
+ "DatasetURL: https://example.com; APIKey: [REDACTED] (6); Debug: true; BufferSettings: {MaxLifetime:123ns PurgeOlderThan:567ns GroupBy:[field1 field2] RetryInitialInterval:0s RetryMaxInterval:0s RetryMaxElapsedTime:0s RetryShutdownTimeout:0s}; LogsSettings: {ExportResourceInfo:true ExportResourcePrefix:AAA ExportScopeInfo:true ExportScopePrefix:BBB DecomposeComplexMessageField:true DecomposedComplexMessagePrefix:EEE exportSettings:{ExportSeparator:CCC ExportDistinguishingSuffix:DDD}}; TracesSettings: {exportSettings:{ExportSeparator:TTT ExportDistinguishingSuffix:UUU}}; ServerHostSettings: {UseHostName:false ServerHost:foo-bar}; BackOffConfig: {Enabled:true InitialInterval:5s RandomizationFactor:0.5 Multiplier:1.5 MaxInterval:30s MaxElapsedTime:5m0s}; QueueSettings: {Enabled:true NumConsumers:10 QueueSize:1000 StorageID:}; TimeoutSettings: {Timeout:5s}",
config.String(),
)
}
@@ -156,7 +160,7 @@ func TestConfigUseProvidedExportResourceInfoValue(t *testing.T) {
},
})
err := config.Unmarshal(configMap)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, true, config.LogsSettings.ExportResourceInfo)
}
@@ -171,6 +175,6 @@ func TestConfigUseProvidedExportScopeInfoValue(t *testing.T) {
},
})
err := config.Unmarshal(configMap)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, false, config.LogsSettings.ExportScopeInfo)
}
diff --git a/exporter/datasetexporter/datasetexporter.go b/exporter/datasetexporter/datasetexporter.go
index 4767c588d4c4..70c962730b14 100644
--- a/exporter/datasetexporter/datasetexporter.go
+++ b/exporter/datasetexporter/datasetexporter.go
@@ -14,15 +14,14 @@ import (
"github.com/google/uuid"
"github.com/scalyr/dataset-go/pkg/api/add_events"
"github.com/scalyr/dataset-go/pkg/client"
+ "github.com/scalyr/dataset-go/pkg/meter_config"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.uber.org/zap"
- "golang.org/x/time/rate"
)
type DatasetExporter struct {
client *client.DataSetClient
- limiter *rate.Limiter
logger *zap.Logger
session string
exporterCfg *ExporterConfig
@@ -34,6 +33,8 @@ func newDatasetExporter(entity string, config *Config, set exporter.CreateSettin
logger.Info("Creating new DataSetExporter",
zap.String("config", config.String()),
zap.String("entity", entity),
+ zap.String("id.string", set.ID.String()),
+ zap.String("id.name", set.ID.Name()),
)
exporterCfg, err := config.convert()
if err != nil {
@@ -48,11 +49,20 @@ func newDatasetExporter(entity string, config *Config, set exporter.CreateSettin
set.BuildInfo.Version,
entity,
)
+
+ meter := set.MeterProvider.Meter("datasetexporter")
+ meterConfig := meter_config.NewMeterConfig(
+ &meter,
+ entity,
+ set.ID.Name(),
+ )
+
client, err := client.NewClient(
exporterCfg.datasetConfig,
&http.Client{Timeout: time.Second * 60},
logger,
&userAgent,
+ meterConfig,
)
if err != nil {
logger.Error("Cannot create DataSetClient: ", zap.Error(err))
@@ -61,7 +71,6 @@ func newDatasetExporter(entity string, config *Config, set exporter.CreateSettin
return &DatasetExporter{
client: client,
- limiter: rate.NewLimiter(100*rate.Every(1*time.Minute), 100), // 100 requests / minute
session: uuid.New().String(),
logger: logger,
exporterCfg: exporterCfg,
diff --git a/exporter/datasetexporter/factory.go b/exporter/datasetexporter/factory.go
index 600cc0f1fa83..b631aae6527e 100644
--- a/exporter/datasetexporter/factory.go
+++ b/exporter/datasetexporter/factory.go
@@ -7,6 +7,7 @@ package datasetexporter // import "github.com/open-telemetry/opentelemetry-colle
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -29,9 +30,10 @@ func createDefaultConfig() component.Config {
TracesSettings: newDefaultTracesSettings(),
LogsSettings: newDefaultLogsSettings(),
ServerHostSettings: newDefaultServerHostSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
+ Debug: debugDefault,
}
}
diff --git a/exporter/datasetexporter/factory_test.go b/exporter/datasetexporter/factory_test.go
index 2e3d3f0dab65..3168a0efb47a 100644
--- a/exporter/datasetexporter/factory_test.go
+++ b/exporter/datasetexporter/factory_test.go
@@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -28,7 +29,7 @@ func TestCreateDefaultConfig(t *testing.T) {
TracesSettings: newDefaultTracesSettings(),
LogsSettings: newDefaultLogsSettings(),
ServerHostSettings: newDefaultServerHostSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
}, cfg, "failed to create default config")
@@ -38,7 +39,7 @@ func TestCreateDefaultConfig(t *testing.T) {
func TestLoadConfig(t *testing.T) {
cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
- assert.Nil(t, err)
+ assert.NoError(t, err)
tests := []struct {
id component.ID
@@ -53,7 +54,7 @@ func TestLoadConfig(t *testing.T) {
TracesSettings: newDefaultTracesSettings(),
LogsSettings: newDefaultLogsSettings(),
ServerHostSettings: newDefaultServerHostSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
},
@@ -65,6 +66,7 @@ func TestLoadConfig(t *testing.T) {
APIKey: "key-lib",
BufferSettings: BufferSettings{
MaxLifetime: 345 * time.Millisecond,
+ PurgeOlderThan: bufferPurgeOlderThan,
GroupBy: []string{"attributes.container_id", "attributes.log.file.path"},
RetryInitialInterval: bufferRetryInitialInterval,
RetryMaxInterval: bufferRetryMaxInterval,
@@ -74,7 +76,7 @@ func TestLoadConfig(t *testing.T) {
TracesSettings: newDefaultTracesSettings(),
LogsSettings: newDefaultLogsSettings(),
ServerHostSettings: newDefaultServerHostSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
},
@@ -84,8 +86,10 @@ func TestLoadConfig(t *testing.T) {
expected: &Config{
DatasetURL: "https://app.scalyr.com",
APIKey: "key-full",
+ Debug: true,
BufferSettings: BufferSettings{
MaxLifetime: 3456 * time.Millisecond,
+ PurgeOlderThan: 78 * time.Second,
GroupBy: []string{"body.map.kubernetes.pod_id", "body.map.kubernetes.docker_id", "body.map.stream"},
RetryInitialInterval: 21 * time.Second,
RetryMaxInterval: 22 * time.Second,
@@ -114,10 +118,10 @@ func TestLoadConfig(t *testing.T) {
UseHostName: false,
ServerHost: "server-host",
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 11 * time.Nanosecond,
- RandomizationFactor: 11.3,
+ RandomizationFactor: 0.113,
Multiplier: 11.6,
MaxInterval: 12 * time.Nanosecond,
MaxElapsedTime: 13 * time.Nanosecond,
@@ -140,7 +144,7 @@ func TestLoadConfig(t *testing.T) {
cfg := factory.CreateDefaultConfig()
sub, err := cm.Sub(tt.id.String())
- require.Nil(t, err)
+ require.NoError(t, err)
require.Nil(t, component.UnmarshalConfig(sub, cfg))
if assert.Nil(t, component.ValidateConfig(cfg)) {
assert.Equal(t, tt.expected, cfg)
@@ -156,11 +160,16 @@ type CreateTest struct {
}
func createExporterTests() []CreateTest {
+ factory := NewFactory()
+ defaultCfg := factory.CreateDefaultConfig().(*Config)
+ defaultCfg.APIKey = "default-api-key"
+ defaultCfg.DatasetURL = "https://app.eu.scalyr.com"
+
return []CreateTest{
{
name: "broken",
config: &Config{},
- expectedError: fmt.Errorf("cannot get DataSetExpoter: cannot convert config: DatasetURL: ; BufferSettings: {MaxLifetime:0s GroupBy:[] RetryInitialInterval:0s RetryMaxInterval:0s RetryMaxElapsedTime:0s RetryShutdownTimeout:0s}; LogsSettings: {ExportResourceInfo:false ExportResourcePrefix: ExportScopeInfo:false ExportScopePrefix: DecomposeComplexMessageField:false DecomposedComplexMessagePrefix: exportSettings:{ExportSeparator: ExportDistinguishingSuffix:}}; TracesSettings: {exportSettings:{ExportSeparator: ExportDistinguishingSuffix:}}; ServerHostSettings: {UseHostName:false ServerHost:}; RetrySettings: {Enabled:false InitialInterval:0s RandomizationFactor:0 Multiplier:0 MaxInterval:0s MaxElapsedTime:0s}; QueueSettings: {Enabled:false NumConsumers:0 QueueSize:0 StorageID:}; TimeoutSettings: {Timeout:0s}; config is not valid: api_key is required"),
+ expectedError: fmt.Errorf("cannot get DataSetExporter: cannot convert config: DatasetURL: ; APIKey: [REDACTED] (0); Debug: false; BufferSettings: {MaxLifetime:0s PurgeOlderThan:0s GroupBy:[] RetryInitialInterval:0s RetryMaxInterval:0s RetryMaxElapsedTime:0s RetryShutdownTimeout:0s}; LogsSettings: {ExportResourceInfo:false ExportResourcePrefix: ExportScopeInfo:false ExportScopePrefix: DecomposeComplexMessageField:false DecomposedComplexMessagePrefix: exportSettings:{ExportSeparator: ExportDistinguishingSuffix:}}; TracesSettings: {exportSettings:{ExportSeparator: ExportDistinguishingSuffix:}}; ServerHostSettings: {UseHostName:false ServerHost:}; BackOffConfig: {Enabled:false InitialInterval:0s RandomizationFactor:0 Multiplier:0 MaxInterval:0s MaxElapsedTime:0s}; QueueSettings: {Enabled:false NumConsumers:0 QueueSize:0 StorageID:}; TimeoutSettings: {Timeout:0s}; config is not valid: api_key is required"),
},
{
name: "valid",
@@ -169,6 +178,7 @@ func createExporterTests() []CreateTest {
APIKey: "key-lib",
BufferSettings: BufferSettings{
MaxLifetime: 12345,
+ PurgeOlderThan: 78901,
GroupBy: []string{"attributes.container_id"},
RetryInitialInterval: time.Second,
RetryMaxInterval: time.Minute,
@@ -180,11 +190,16 @@ func createExporterTests() []CreateTest {
ServerHostSettings: ServerHostSettings{
UseHostName: true,
},
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
},
expectedError: nil,
},
+ {
+ name: "default",
+ config: defaultCfg,
+ expectedError: nil,
+ },
}
}
diff --git a/exporter/datasetexporter/generated_component_test.go b/exporter/datasetexporter/generated_component_test.go
new file mode 100644
index 000000000000..e80c4b9f3f51
--- /dev/null
+++ b/exporter/datasetexporter/generated_component_test.go
@@ -0,0 +1,94 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package datasetexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/datasetexporter/go.mod b/exporter/datasetexporter/go.mod
index 0223c6542c8b..62b9e86c4d12 100644
--- a/exporter/datasetexporter/go.mod
+++ b/exporter/datasetexporter/go.mod
@@ -1,62 +1,69 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/datasetexporter
-go 1.20
+go 1.21
require (
- github.com/google/uuid v1.4.0
- // github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.77.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/scalyr/dataset-go v0.14.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
- golang.org/x/time v0.4.0
+ github.com/google/uuid v1.6.0
+ // github.com/open-telemetry/opentelemetry-collector-contrib/extension/storage/filestorage v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/scalyr/dataset-go v0.18.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1
- go.opentelemetry.io/collector/config/configopaque v0.89.0
+ github.com/cenkalti/backoff/v4 v4.3.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cskr/pubsub v1.0.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/go-logfmt/logfmt v0.6.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/datasetexporter/go.sum b/exporter/datasetexporter/go.sum
index 380c4e2db0a7..92d3025943e2 100644
--- a/exporter/datasetexporter/go.sum
+++ b/exporter/datasetexporter/go.sum
@@ -1,59 +1,32 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cskr/pubsub v1.0.2 h1:vlOzMhl6PFn60gRlTQQsIfVwaPB/B/8MziK8FhEPt/0=
github.com/cskr/pubsub v1.0.2/go.mod h1:/8MzYXk/NJAz782G8RPkFzXTZVu63VotefPnR9TIRis=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
-github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -62,15 +35,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -80,109 +52,92 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/scalyr/dataset-go v0.14.0 h1:uRkoUt6LcMcH3VUTjOakQ4aq+1ooJB2t47oqYRUkV/k=
-github.com/scalyr/dataset-go v0.14.0/go.mod h1:+a4BvVyS7mKquK7ySuWh4vygyDBREQrdikdcnABYKFw=
+github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
+github.com/scalyr/dataset-go v0.18.0 h1:CTv7kk/FGdiicTWo3h1brFusHD1yjhVGINFamP8uukw=
+github.com/scalyr/dataset-go v0.18.0/go.mod h1:4x0JK5X0UdhZ2TEO3kHu9pTELDRc3WsrBBwQfkOPZKc=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -190,38 +145,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/datasetexporter/internal/metadata/generated_status.go b/exporter/datasetexporter/internal/metadata/generated_status.go
index 8b046b1fbb8a..749593d9f20b 100644
--- a/exporter/datasetexporter/internal/metadata/generated_status.go
+++ b/exporter/datasetexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("dataset")
)
const (
- Type = "dataset"
LogsStability = component.StabilityLevelAlpha
TracesStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/dataset")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/dataset")
+}
diff --git a/exporter/datasetexporter/logs_exporter.go b/exporter/datasetexporter/logs_exporter.go
index 8ff1a98892e1..9ddba874f7f2 100644
--- a/exporter/datasetexporter/logs_exporter.go
+++ b/exporter/datasetexporter/logs_exporter.go
@@ -43,7 +43,7 @@ func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config
cfg := castConfig(config)
e, err := newDatasetExporter("logs", cfg, set)
if err != nil {
- return nil, fmt.Errorf("cannot get DataSetExpoter: %w", err)
+ return nil, fmt.Errorf("cannot get DataSetExporter: %w", err)
}
return exporterhelper.NewLogsExporter(
@@ -52,7 +52,7 @@ func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config
config,
e.consumeLogs,
exporterhelper.WithQueue(cfg.QueueSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithTimeout(cfg.TimeoutSettings),
exporterhelper.WithShutdown(e.shutdown),
)
diff --git a/exporter/datasetexporter/logs_exporter_stress_test.go b/exporter/datasetexporter/logs_exporter_stress_test.go
index 60384308e380..f023cdb02a99 100644
--- a/exporter/datasetexporter/logs_exporter_stress_test.go
+++ b/exporter/datasetexporter/logs_exporter_stress_test.go
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0
//go:build integration
-// +build integration
package datasetexporter
@@ -21,6 +20,7 @@ import (
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pdata/pcommon"
@@ -82,7 +82,7 @@ func TestConsumeLogsManyLogsShouldSucceed(t *testing.T) {
GroupBy: []string{"attributes.container_id"},
RetryShutdownTimeout: time.Minute,
},
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
}
@@ -107,7 +107,7 @@ func TestConsumeLogsManyLogsShouldSucceed(t *testing.T) {
expectedKeys[key] = 1
}
err = logs.ConsumeLogs(context.Background(), batch)
- assert.Nil(t, err)
+ assert.NoError(t, err)
time.Sleep(time.Duration(float64(maxDelay.Nanoseconds()) * 0.7))
}
@@ -115,7 +115,7 @@ func TestConsumeLogsManyLogsShouldSucceed(t *testing.T) {
time.Sleep(time.Second)
err = logs.Shutdown(context.Background())
- assert.Nil(t, err)
+ assert.NoError(t, err)
lastProcessed := uint64(0)
sameNumber := 0
for {
diff --git a/exporter/datasetexporter/logs_exporter_test.go b/exporter/datasetexporter/logs_exporter_test.go
index 49eb45b47740..7e63516c6378 100644
--- a/exporter/datasetexporter/logs_exporter_test.go
+++ b/exporter/datasetexporter/logs_exporter_test.go
@@ -11,7 +11,9 @@ import (
"io"
"net/http"
"net/http/httptest"
+ "sort"
"strconv"
+ "sync"
"sync/atomic"
"testing"
"time"
@@ -20,6 +22,7 @@ import (
"github.com/scalyr/dataset-go/pkg/api/request"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pdata/pcommon"
@@ -780,12 +783,15 @@ func TestConsumeLogsShouldSucceed(t *testing.T) {
attempt := atomic.Uint64{}
wasSuccessful := atomic.Bool{}
- addRequest := add_events.AddEventsRequest{}
+ addRequests := []add_events.AddEventsRequest{}
+ lock := sync.Mutex{}
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
attempt.Add(1)
cer, err := extract(req)
- addRequest = cer
+ lock.Lock()
+ addRequests = append(addRequests, cer)
+ lock.Unlock()
assert.NoError(t, err, "Error reading request: %v", err)
@@ -804,8 +810,10 @@ func TestConsumeLogsShouldSucceed(t *testing.T) {
config := &Config{
DatasetURL: server.URL,
APIKey: "key-lib",
+ Debug: true,
BufferSettings: BufferSettings{
- MaxLifetime: 500 * time.Millisecond,
+ MaxLifetime: 2 * time.Second,
+ PurgeOlderThan: 10 * time.Second,
GroupBy: []string{"attributes.container_id"},
RetryInitialInterval: time.Second,
RetryMaxInterval: time.Minute,
@@ -831,7 +839,7 @@ func TestConsumeLogsShouldSucceed(t *testing.T) {
ServerHostSettings: ServerHostSettings{
ServerHost: testServerHost,
},
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
}
@@ -874,158 +882,211 @@ func TestConsumeLogsShouldSucceed(t *testing.T) {
assert.NotNil(t, logs)
err = logs.ConsumeLogs(context.Background(), ld)
- assert.Nil(t, err)
+ assert.NoError(t, err)
time.Sleep(time.Second)
err = logs.Shutdown(context.Background())
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
assert.True(t, wasSuccessful.Load())
+ assert.Equal(t, uint64(4), attempt.Load())
+
+ sort.SliceStable(addRequests, func(i, j int) bool {
+ if addRequests[i].Session == addRequests[j].Session {
+ return len(addRequests[i].Events) < len(addRequests[j].Events)
+ }
+ return addRequests[i].Session < addRequests[j].Session
+ })
+
assert.Equal(t,
- add_events.AddEventsRequest{
- AuthParams: request.AuthParams{
- Token: "key-lib",
- },
- AddEventsRequestParams: add_events.AddEventsRequestParams{
- Session: addRequest.Session,
- SessionInfo: addRequest.SessionInfo,
- Events: []*add_events.Event{
- {
- Thread: testLEventReq.Thread,
- Log: testLEventReq.Log,
- Sev: testLEventReq.Sev,
- Ts: testLEventReq.Ts,
- Attrs: map[string]any{
- add_events.AttrOrigServerHost: testServerHost,
- "app": "server",
- "instance_num": float64(1),
- "dropped_attributes_count": float64(1),
- "message": "This is a log message",
- "span_id": "0102040800000000",
- "trace_id": "08040201000000000000000000000000",
- "bundle_key": "d41d8cd98f00b204e9800998ecf8427e",
-
- "R#resource-attr": "resource-attr-val-1",
- },
+ []add_events.AddEventsRequest{
+ {
+ AuthParams: request.AuthParams{
+ Token: "key-lib",
+ },
+ AddEventsRequestParams: add_events.AddEventsRequestParams{
+ Session: addRequests[0].Session,
+ SessionInfo: &add_events.SessionInfo{
+ add_events.AttrServerHost: "serverHostFromAttribute",
+ add_events.AttrSessionKey: "0296b9a57cb379df0f35aaf2d23500d3",
},
- {
- Thread: testLEventReq.Thread,
- Log: testLEventReq.Log,
- Sev: testLEventReq.Sev,
- Ts: testLEventReq.Ts,
- Attrs: map[string]any{
- add_events.AttrOrigServerHost: "serverHostFromAttribute",
- "app": "server",
- "instance_num": float64(1),
- "dropped_attributes_count": float64(1),
- "message": "This is a log message",
- "span_id": "0102040800000000",
- "trace_id": "08040201000000000000000000000000",
- "bundle_key": "d41d8cd98f00b204e9800998ecf8427e",
-
- "R#resource-attr": "resource-attr-val-1",
- "R#serverHost": "serverHostFromResource",
+ Events: []*add_events.Event{
+ {
+ Thread: testLEventReq.Thread,
+ Log: testLEventReq.Log,
+ Sev: testLEventReq.Sev,
+ Ts: testLEventReq.Ts,
+ Attrs: map[string]any{
+ "app": "server",
+ "instance_num": float64(1),
+ "dropped_attributes_count": float64(1),
+ "message": "This is a log message",
+ "span_id": "0102040800000000",
+ "trace_id": "08040201000000000000000000000000",
+
+ "R#resource-attr": "resource-attr-val-1",
+ "R#serverHost": "serverHostFromResource",
+ },
+ ServerHost: "",
},
},
- {
- Thread: testLEventReq.Thread,
- Log: testLEventReq.Log,
- Sev: testLEventReq.Sev,
- Ts: testLEventReq.Ts,
- Attrs: map[string]any{
- add_events.AttrOrigServerHost: "serverHostFromResourceServer",
- "app": "server",
- "instance_num": float64(1),
- "dropped_attributes_count": float64(1),
- "message": "This is a log message",
- "span_id": "0102040800000000",
- "trace_id": "08040201000000000000000000000000",
- "bundle_key": "d41d8cd98f00b204e9800998ecf8427e",
-
- "R#resource-attr": "resource-attr-val-1",
- "R#host.name": "serverHostFromResourceHost",
- "R#serverHost": "serverHostFromResourceServer",
+ Threads: []*add_events.Thread{testLThread},
+ Logs: []*add_events.Log{testLLog},
+ },
+ },
+ {
+ AuthParams: request.AuthParams{
+ Token: "key-lib",
+ },
+ AddEventsRequestParams: add_events.AddEventsRequestParams{
+ Session: addRequests[1].Session,
+ SessionInfo: &add_events.SessionInfo{
+ add_events.AttrServerHost: "serverHostFromResourceHost",
+ add_events.AttrSessionKey: "73b97897d80d89c9a09a3ee6ed178650",
+ },
+ Events: []*add_events.Event{
+ {
+ Thread: testLEventReq.Thread,
+ Log: testLEventReq.Log,
+ Sev: testLEventReq.Sev,
+ Ts: testLEventReq.Ts,
+ Attrs: map[string]any{
+ "app": "server",
+ "instance_num": float64(1),
+ "dropped_attributes_count": float64(1),
+ "message": "This is a log message",
+ "span_id": "0102040800000000",
+ "trace_id": "08040201000000000000000000000000",
+
+ "R#resource-attr": "resource-attr-val-1",
+ "R#host.name": "serverHostFromResourceHost",
+ },
},
},
- {
- Thread: testLEventReq.Thread,
- Log: testLEventReq.Log,
- Sev: testLEventReq.Sev,
- Ts: testLEventReq.Ts,
- Attrs: map[string]any{
- add_events.AttrOrigServerHost: "serverHostFromResourceHost",
- "app": "server",
- "instance_num": float64(1),
- "dropped_attributes_count": float64(1),
- "message": "This is a log message",
- "span_id": "0102040800000000",
- "trace_id": "08040201000000000000000000000000",
- "bundle_key": "d41d8cd98f00b204e9800998ecf8427e",
-
- "R#resource-attr": "resource-attr-val-1",
- "R#host.name": "serverHostFromResourceHost",
+ Threads: []*add_events.Thread{testLThread},
+ Logs: []*add_events.Log{testLLog},
+ },
+ },
+ {
+ AuthParams: request.AuthParams{
+ Token: "key-lib",
+ },
+ AddEventsRequestParams: add_events.AddEventsRequestParams{
+ Session: addRequests[2].Session,
+ SessionInfo: &add_events.SessionInfo{
+ add_events.AttrServerHost: "serverHostFromResourceServer",
+ add_events.AttrSessionKey: "770e22b433d2e9a31fa9a81abf3b9b87",
+ },
+ Events: []*add_events.Event{
+ {
+ Thread: testLEventReq.Thread,
+ Log: testLEventReq.Log,
+ Sev: testLEventReq.Sev,
+ Ts: testLEventReq.Ts,
+ Attrs: map[string]any{
+ "app": "server",
+ "instance_num": float64(1),
+ "dropped_attributes_count": float64(1),
+ "message": "This is a log message",
+ "span_id": "0102040800000000",
+ "trace_id": "08040201000000000000000000000000",
+
+ "R#resource-attr": "resource-attr-val-1",
+ "R#host.name": "serverHostFromResourceHost",
+ "R#serverHost": "serverHostFromResourceServer",
+ },
},
},
- {
- Thread: testLEventReq.Thread,
- Log: testLEventReq.Log,
- Sev: testLEventReq.Sev,
- Ts: testLEventReq.Ts,
- Attrs: map[string]any{
- add_events.AttrOrigServerHost: testServerHost,
- "app": "server",
- "instance_num": float64(1),
- "dropped_attributes_count": float64(1),
- "message": "This is a log message",
- "span_id": "0102040800000000",
- "trace_id": "08040201000000000000000000000000",
- "bundle_key": "d41d8cd98f00b204e9800998ecf8427e",
-
- "string": "stringA",
- "double": 2.0,
- "bool": true,
- "empty": nil,
- "int": float64(3),
- "map#map_empty": nil,
- "map#map_string": "map_stringA",
- "map#map_map#map_map_string": "map_map_stringA",
- "slice#0": "slice_stringA",
- "name": "filled_nameA",
- "span_id_": "filled_span_idA",
-
- "S#string": "stringS",
- "S#double": 2.0,
- "S#bool": true,
- "S#empty": nil,
- "S#int": float64(3),
- "S#map#map_empty": nil,
- "S#map#map_string": "map_stringS",
- "S#map#map_map#map_map_string": "map_map_stringS",
- "S#slice#0": "slice_stringS",
- "S#name": "filled_nameS",
- "S#span_id": "filled_span_idS",
-
- "R#string": "stringR",
- "R#double": 2.0,
- "R#bool": true,
- "R#empty": nil,
- "R#int": float64(3),
- "R#map#map_empty": nil,
- "R#map#map_string": "map_stringR",
- "R#map#map_map#map_map_string": "map_map_stringR",
- "R#slice#0": "slice_stringR",
- "R#name": "filled_nameR",
- "R#span_id": "filled_span_idR",
-
- "R#resource-attr": "resource-attr-val-1",
+ Threads: []*add_events.Thread{testLThread},
+ Logs: []*add_events.Log{testLLog},
+ },
+ },
+ {
+ AuthParams: request.AuthParams{
+ Token: "key-lib",
+ },
+ AddEventsRequestParams: add_events.AddEventsRequestParams{
+ Session: addRequests[3].Session,
+ SessionInfo: &add_events.SessionInfo{
+ add_events.AttrServerHost: "foo",
+ add_events.AttrSessionKey: "caedd419dc354c24a69aac7508890ec1",
+ },
+ Events: []*add_events.Event{
+ {
+ Thread: testLEventReq.Thread,
+ Log: testLEventReq.Log,
+ Sev: testLEventReq.Sev,
+ Ts: testLEventReq.Ts,
+ Attrs: map[string]any{
+ "app": "server",
+ "instance_num": float64(1),
+ "dropped_attributes_count": float64(1),
+ "message": "This is a log message",
+ "span_id": "0102040800000000",
+ "trace_id": "08040201000000000000000000000000",
+
+ "R#resource-attr": "resource-attr-val-1",
+ },
+ },
+ {
+ Thread: testLEventReq.Thread,
+ Log: testLEventReq.Log,
+ Sev: testLEventReq.Sev,
+ Ts: testLEventReq.Ts,
+ Attrs: map[string]any{
+ "app": "server",
+ "instance_num": float64(1),
+ "dropped_attributes_count": float64(1),
+ "message": "This is a log message",
+ "span_id": "0102040800000000",
+ "trace_id": "08040201000000000000000000000000",
+
+ "string": "stringA",
+ "double": 2.0,
+ "bool": true,
+ "empty": nil,
+ "int": float64(3),
+ "map#map_empty": nil,
+ "map#map_string": "map_stringA",
+ "map#map_map#map_map_string": "map_map_stringA",
+ "slice#0": "slice_stringA",
+ "name": "filled_nameA",
+ "span_id_": "filled_span_idA",
+
+ "S#string": "stringS",
+ "S#double": 2.0,
+ "S#bool": true,
+ "S#empty": nil,
+ "S#int": float64(3),
+ "S#map#map_empty": nil,
+ "S#map#map_string": "map_stringS",
+ "S#map#map_map#map_map_string": "map_map_stringS",
+ "S#slice#0": "slice_stringS",
+ "S#name": "filled_nameS",
+ "S#span_id": "filled_span_idS",
+
+ "R#string": "stringR",
+ "R#double": 2.0,
+ "R#bool": true,
+ "R#empty": nil,
+ "R#int": float64(3),
+ "R#map#map_empty": nil,
+ "R#map#map_string": "map_stringR",
+ "R#map#map_map#map_map_string": "map_map_stringR",
+ "R#slice#0": "slice_stringR",
+ "R#name": "filled_nameR",
+ "R#span_id": "filled_span_idR",
+
+ "R#resource-attr": "resource-attr-val-1",
+ },
},
},
+ Threads: []*add_events.Thread{testLThread},
+ Logs: []*add_events.Log{testLLog},
},
- Threads: []*add_events.Thread{testLThread},
- Logs: []*add_events.Log{testLLog},
},
},
- addRequest,
+ addRequests,
)
}
diff --git a/exporter/datasetexporter/metadata.yaml b/exporter/datasetexporter/metadata.yaml
index 98819460e5cc..5ae4c32e1238 100644
--- a/exporter/datasetexporter/metadata.yaml
+++ b/exporter/datasetexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: dataset
+scope_name: otelcol/dataset
status:
class: exporter
@@ -6,4 +7,11 @@ status:
alpha: [logs, traces]
distributions: [contrib]
codeowners:
- active: [atoulme, martin-majlis-s1, zdaratom, tomaz-s1]
+ active: [atoulme, martin-majlis-s1, zdaratom-s1, tomaz-s1]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ config:
+ dataset_url: https://app.scalyr.com
+ api_key: key-minimal
+ skip_lifecycle: true
diff --git a/exporter/datasetexporter/testdata/config.yaml b/exporter/datasetexporter/testdata/config.yaml
index 9ffe4d29a733..1338aec01753 100644
--- a/exporter/datasetexporter/testdata/config.yaml
+++ b/exporter/datasetexporter/testdata/config.yaml
@@ -14,8 +14,10 @@ dataset/lib:
dataset/full:
dataset_url: https://app.scalyr.com
api_key: key-full
+ debug: true
buffer:
max_lifetime: 3456ms
+ purge_older_than: 78s
group_by:
- body.map.kubernetes.pod_id
- body.map.kubernetes.docker_id
@@ -42,7 +44,7 @@ dataset/full:
retry_on_failure:
enabled: true
initial_interval: 11
- randomization_factor: 11.3
+ randomization_factor: 0.113
multiplier: 11.6
max_interval: 12
max_elapsed_time: 13
diff --git a/exporter/datasetexporter/traces_exporter.go b/exporter/datasetexporter/traces_exporter.go
index 5ee1024e591c..613775384206 100644
--- a/exporter/datasetexporter/traces_exporter.go
+++ b/exporter/datasetexporter/traces_exporter.go
@@ -21,9 +21,9 @@ const ServiceNameKey = "service.name"
func createTracesExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Traces, error) {
cfg := castConfig(config)
- e, err := newDatasetExporter("logs", cfg, set)
+ e, err := newDatasetExporter("traces", cfg, set)
if err != nil {
- return nil, fmt.Errorf("cannot get DataSetExpoter: %w", err)
+ return nil, fmt.Errorf("cannot get DataSetExporter: %w", err)
}
return exporterhelper.NewTracesExporter(
@@ -32,7 +32,7 @@ func createTracesExporter(ctx context.Context, set exporter.CreateSettings, conf
config,
e.consumeTraces,
exporterhelper.WithQueue(cfg.QueueSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithTimeout(cfg.TimeoutSettings),
exporterhelper.WithShutdown(e.shutdown),
)
diff --git a/exporter/dynatraceexporter/README.md b/exporter/dynatraceexporter/README.md
index 8abaef4579fc..fa02ea5f4e71 100644
--- a/exporter/dynatraceexporter/README.md
+++ b/exporter/dynatraceexporter/README.md
@@ -21,14 +21,12 @@ More information on using the collector with Dynatrace can be found in the
| Status | |
| ------------- |-----------|
| Stability | [deprecated]: metrics |
-| Distributions | [contrib], [aws], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fdynatrace%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fdynatrace) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fdynatrace%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fdynatrace) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dyladan](https://www.github.com/dyladan), [@arminru](https://www.github.com/arminru), [@evan-bradley](https://www.github.com/evan-bradley) |
[deprecated]: https://github.com/open-telemetry/opentelemetry-collector#deprecated
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
The Dynatrace metrics exporter exports metrics to the [Metrics API v2](https://www.dynatrace.com/support/help/dynatrace-api/environment-api/metric-v2/post-ingest-metrics/)
diff --git a/exporter/dynatraceexporter/config/config.go b/exporter/dynatraceexporter/config/config.go
index c5e58ef09635..5d9df8ac11b3 100644
--- a/exporter/dynatraceexporter/config/config.go
+++ b/exporter/dynatraceexporter/config/config.go
@@ -11,6 +11,7 @@ import (
"github.com/dynatrace-oss/dynatrace-metric-utils-go/metric/apiconstants"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
@@ -18,10 +19,10 @@ import (
// Config defines configuration for the Dynatrace exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"`
+ confighttp.ClientConfig `mapstructure:",squash"`
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
ResourceToTelemetrySettings resourcetotelemetry.Settings `mapstructure:"resource_to_telemetry_conversion"`
// Dynatrace API token with metrics ingest permission
@@ -43,8 +44,8 @@ func (c *Config) Validate() error {
return fmt.Errorf("queue settings has invalid configuration: %w", err)
}
- if c.HTTPClientSettings.Headers == nil {
- c.HTTPClientSettings.Headers = make(map[string]configopaque.String)
+ if c.ClientConfig.Headers == nil {
+ c.ClientConfig.Headers = make(map[string]configopaque.String)
}
c.APIToken = strings.TrimSpace(c.APIToken)
@@ -55,15 +56,15 @@ func (c *Config) Validate() error {
return errors.New("api_token is required if Endpoint is provided")
}
- c.HTTPClientSettings.Headers["Authorization"] = configopaque.String(fmt.Sprintf("Api-Token %s", c.APIToken))
+ c.ClientConfig.Headers["Authorization"] = configopaque.String(fmt.Sprintf("Api-Token %s", c.APIToken))
}
if !(strings.HasPrefix(c.Endpoint, "http://") || strings.HasPrefix(c.Endpoint, "https://")) {
return errors.New("endpoint must start with https:// or http://")
}
- c.HTTPClientSettings.Headers["Content-Type"] = "text/plain; charset=UTF-8"
- c.HTTPClientSettings.Headers["User-Agent"] = "opentelemetry-collector"
+ c.ClientConfig.Headers["Content-Type"] = "text/plain; charset=UTF-8"
+ c.ClientConfig.Headers["User-Agent"] = "opentelemetry-collector"
return nil
}
diff --git a/exporter/dynatraceexporter/config/config_test.go b/exporter/dynatraceexporter/config/config_test.go
index 9da37d10c739..6ac082b9b642 100644
--- a/exporter/dynatraceexporter/config/config_test.go
+++ b/exporter/dynatraceexporter/config/config_test.go
@@ -22,7 +22,7 @@ func TestConfig_Validate(t *testing.T) {
})
t.Run("Valid configuration", func(t *testing.T) {
- c := &Config{HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http://example.com/"}, APIToken: "token"}
+ c := &Config{ClientConfig: confighttp.ClientConfig{Endpoint: "http://example.com/"}, APIToken: "token"}
err := c.Validate()
assert.NoError(t, err)
@@ -30,7 +30,7 @@ func TestConfig_Validate(t *testing.T) {
})
t.Run("Invalid Endpoint", func(t *testing.T) {
- c := &Config{HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "example.com"}}
+ c := &Config{ClientConfig: confighttp.ClientConfig{Endpoint: "example.com"}}
err := c.Validate()
assert.Error(t, err)
})
diff --git a/exporter/dynatraceexporter/config/package_test.go b/exporter/dynatraceexporter/config/package_test.go
new file mode 100644
index 000000000000..cac5be666ad9
--- /dev/null
+++ b/exporter/dynatraceexporter/config/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package config
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/dynatraceexporter/factory.go b/exporter/dynatraceexporter/factory.go
index 9692345c554c..c01baa8ef51e 100644
--- a/exporter/dynatraceexporter/factory.go
+++ b/exporter/dynatraceexporter/factory.go
@@ -8,6 +8,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -28,14 +29,14 @@ func NewFactory() exporter.Factory {
// createDefaultConfig creates the default exporter configuration
func createDefaultConfig() component.Config {
return &dtconfig.Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
ResourceToTelemetrySettings: resourcetotelemetry.Settings{
Enabled: false,
},
- APIToken: "",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ""},
+ APIToken: "",
+ ClientConfig: confighttp.ClientConfig{Endpoint: ""},
Tags: []string{},
DefaultDimensions: make(map[string]string),
@@ -59,7 +60,7 @@ func createMetricsExporter(
cfg,
exp.PushMetricsData,
exporterhelper.WithQueue(cfg.QueueSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithStart(exp.start),
)
if err != nil {
diff --git a/exporter/dynatraceexporter/factory_test.go b/exporter/dynatraceexporter/factory_test.go
index 7cc366b37c03..a4bccad37aed 100644
--- a/exporter/dynatraceexporter/factory_test.go
+++ b/exporter/dynatraceexporter/factory_test.go
@@ -14,6 +14,7 @@ import (
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -28,7 +29,7 @@ func TestCreateDefaultConfig(t *testing.T) {
cfg := factory.CreateDefaultConfig()
assert.Equal(t, &dtconfig.Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
ResourceToTelemetrySettings: resourcetotelemetry.Settings{
Enabled: false,
@@ -55,10 +56,10 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "defaults"),
expected: &dtconfig.Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: apiconstants.GetDefaultOneAgentEndpoint(),
Headers: map[string]configopaque.String{
"Content-Type": "text/plain; charset=UTF-8",
@@ -71,10 +72,10 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "valid"),
expected: &dtconfig.Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://example.com/api/v2/metrics/ingest",
Headers: map[string]configopaque.String{
"Authorization": "Api-Token token",
@@ -94,10 +95,10 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "valid_tags"),
expected: &dtconfig.Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://example.com/api/v2/metrics/ingest",
Headers: map[string]configopaque.String{
"Authorization": "Api-Token token",
diff --git a/exporter/dynatraceexporter/generated_component_test.go b/exporter/dynatraceexporter/generated_component_test.go
new file mode 100644
index 000000000000..cf9af9d2bc5f
--- /dev/null
+++ b/exporter/dynatraceexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package dynatraceexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/dynatraceexporter/go.mod b/exporter/dynatraceexporter/go.mod
index a906a86be4c8..ecaf3758b02e 100644
--- a/exporter/dynatraceexporter/go.mod
+++ b/exporter/dynatraceexporter/go.mod
@@ -1,68 +1,79 @@
// Deprecated: The Dynatrace metrics exporter is deprecated. After the end of 2023, no support, updates, or compatibility with newer OTel versions will be provided/guaranteed. See https://github.com/open-telemetry/opentelemetry-collector-contrib/pull/23992 for more details.
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/dynatraceexporter
-go 1.20
+go 1.21
require (
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/dynatraceexporter/go.sum b/exporter/dynatraceexporter/go.sum
index 616848df2edf..485dc436fc15 100644
--- a/exporter/dynatraceexporter/go.sum
+++ b/exporter/dynatraceexporter/go.sum
@@ -1,84 +1,58 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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/dynatrace-oss/dynatrace-metric-utils-go v0.5.0 h1:wHGPJSXvwKQVf/XfhjUPyrhpcPKWNy8F3ikH+eiwoBg=
github.com/dynatrace-oss/dynatrace-metric-utils-go v0.5.0/go.mod h1:PseHFo8Leko7J4A/TfZ6kkHdkzKBLUta6hRZR/OEbbc=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -88,119 +62,106 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -208,38 +169,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/dynatraceexporter/internal/metadata/generated_status.go b/exporter/dynatraceexporter/internal/metadata/generated_status.go
index c7553b5d7b66..b1e9fa13d455 100644
--- a/exporter/dynatraceexporter/internal/metadata/generated_status.go
+++ b/exporter/dynatraceexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("dynatrace")
)
const (
- Type = "dynatrace"
MetricsStability = component.StabilityLevelDeprecated
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/dynatrace")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/dynatrace")
+}
diff --git a/exporter/dynatraceexporter/internal/serialization/package_test.go b/exporter/dynatraceexporter/internal/serialization/package_test.go
new file mode 100644
index 000000000000..5be5ed5b2865
--- /dev/null
+++ b/exporter/dynatraceexporter/internal/serialization/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package serialization
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/dynatraceexporter/metadata.yaml b/exporter/dynatraceexporter/metadata.yaml
index f7d20149eca5..0c217894827a 100644
--- a/exporter/dynatraceexporter/metadata.yaml
+++ b/exporter/dynatraceexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: dynatrace
+scope_name: otelcol/dynatrace
status:
class: exporter
stability:
deprecated: [metrics]
- distributions: [contrib, aws, observiq]
+ distributions: [contrib]
codeowners:
active: [dyladan, arminru, evan-bradley]
+
+tests:
+ expect_consumer_error: true
diff --git a/exporter/dynatraceexporter/metrics_exporter.go b/exporter/dynatraceexporter/metrics_exporter.go
index a4576778e996..6b4d1a26befa 100644
--- a/exporter/dynatraceexporter/metrics_exporter.go
+++ b/exporter/dynatraceexporter/metrics_exporter.go
@@ -278,8 +278,8 @@ func (e *metricsExporter) sendBatch(ctx context.Context, lines []string) error {
}
// start starts the exporter
-func (e *metricsExporter) start(_ context.Context, host component.Host) (err error) {
- client, err := e.cfg.HTTPClientSettings.ToClient(host, e.settings)
+func (e *metricsExporter) start(ctx context.Context, host component.Host) (err error) {
+ client, err := e.cfg.ClientConfig.ToClientContext(ctx, host, e.settings)
if err != nil {
e.settings.Logger.Error("Failed to construct HTTP client", zap.Error(err))
return fmt.Errorf("start: %w", err)
diff --git a/exporter/dynatraceexporter/metrics_exporter_test.go b/exporter/dynatraceexporter/metrics_exporter_test.go
index be468800c6e8..7aaa66a7dad8 100644
--- a/exporter/dynatraceexporter/metrics_exporter_test.go
+++ b/exporter/dynatraceexporter/metrics_exporter_test.go
@@ -144,10 +144,10 @@ func Test_exporter_PushMetricsData(t *testing.T) {
fields: fields{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- APIToken: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
- Prefix: "prefix",
- DefaultDimensions: map[string]string{},
+ APIToken: "token",
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
+ Prefix: "prefix",
+ DefaultDimensions: map[string]string{},
},
client: ts.Client(),
},
@@ -308,9 +308,9 @@ func Test_SumMetrics(t *testing.T) {
exp := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- APIToken: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
- Prefix: "prefix",
+ APIToken: "token",
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
+ Prefix: "prefix",
},
client: ts.Client(),
prevPts: prevPts,
@@ -351,7 +351,7 @@ func Test_SumMetrics(t *testing.T) {
}
func Test_exporter_PushMetricsData_EmptyPayload(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {
t.Fatal("Server should not be called")
}))
defer ts.Close()
@@ -371,7 +371,7 @@ func Test_exporter_PushMetricsData_EmptyPayload(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
},
client: ts.Client(),
}
@@ -383,7 +383,7 @@ func Test_exporter_PushMetricsData_EmptyPayload(t *testing.T) {
}
func Test_exporter_PushMetricsData_isDisabled(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {
t.Fatal("Server should not be called")
}))
defer ts.Close()
@@ -408,7 +408,7 @@ func Test_exporter_PushMetricsData_isDisabled(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
},
client: ts.Client(),
isDisabled: true,
@@ -421,7 +421,7 @@ func Test_exporter_PushMetricsData_isDisabled(t *testing.T) {
}
func Test_exporter_send_BadRequest(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusBadRequest)
body, _ := json.Marshal(metricsResponse{
Ok: 0,
@@ -434,7 +434,7 @@ func Test_exporter_send_BadRequest(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
},
client: ts.Client(),
}
@@ -450,7 +450,7 @@ func Test_exporter_send_BadRequest(t *testing.T) {
}
func Test_exporter_send_Unauthorized(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusUnauthorized)
_, _ = w.Write([]byte{})
}))
@@ -459,7 +459,7 @@ func Test_exporter_send_Unauthorized(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
},
client: ts.Client(),
}
@@ -475,7 +475,7 @@ func Test_exporter_send_Unauthorized(t *testing.T) {
}
func Test_exporter_send_TooLarge(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusRequestEntityTooLarge)
_, _ = w.Write([]byte{})
}))
@@ -484,7 +484,7 @@ func Test_exporter_send_TooLarge(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
},
client: ts.Client(),
}
@@ -500,7 +500,7 @@ func Test_exporter_send_TooLarge(t *testing.T) {
}
func Test_exporter_send_NotFound(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(404)
_, _ = w.Write([]byte{})
}))
@@ -509,10 +509,10 @@ func Test_exporter_send_NotFound(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- APIToken: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
- Prefix: "prefix",
- DefaultDimensions: map[string]string{},
+ APIToken: "token",
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
+ Prefix: "prefix",
+ DefaultDimensions: map[string]string{},
},
client: ts.Client(),
}
@@ -528,7 +528,7 @@ func Test_exporter_send_NotFound(t *testing.T) {
}
func Test_exporter_send_TooManyRequests(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusTooManyRequests)
_, _ = w.Write([]byte{})
}))
@@ -537,10 +537,10 @@ func Test_exporter_send_TooManyRequests(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- APIToken: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
- Prefix: "prefix",
- DefaultDimensions: map[string]string{},
+ APIToken: "token",
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
+ Prefix: "prefix",
+ DefaultDimensions: map[string]string{},
},
client: ts.Client(),
}
@@ -551,7 +551,7 @@ func Test_exporter_send_TooManyRequests(t *testing.T) {
}
func Test_exporter_send_MiscellaneousErrorCode(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusExpectationFailed)
_, _ = w.Write([]byte{})
}))
@@ -560,10 +560,10 @@ func Test_exporter_send_MiscellaneousErrorCode(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- APIToken: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
- Prefix: "prefix",
- DefaultDimensions: map[string]string{},
+ APIToken: "token",
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
+ Prefix: "prefix",
+ DefaultDimensions: map[string]string{},
},
client: ts.Client(),
}
@@ -577,7 +577,7 @@ func Test_exporter_send_MiscellaneousErrorCode(t *testing.T) {
func Test_exporter_send_chunking(t *testing.T) {
sentChunks := 0
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusBadRequest)
body, _ := json.Marshal(metricsResponse{
Ok: 0,
@@ -591,7 +591,7 @@ func Test_exporter_send_chunking(t *testing.T) {
e := &metricsExporter{
settings: componenttest.NewNopTelemetrySettings(),
cfg: &config.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
},
client: ts.Client(),
}
@@ -617,7 +617,7 @@ func Test_exporter_send_chunking(t *testing.T) {
}
func Test_exporter_PushMetricsData_Error(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(200)
}))
ts.Close()
@@ -657,10 +657,10 @@ func Test_exporter_PushMetricsData_Error(t *testing.T) {
fields: fields{
logger: zap.NewNop(),
cfg: &config.Config{
- APIToken: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ts.URL},
- Prefix: "prefix",
- DefaultDimensions: map[string]string{},
+ APIToken: "token",
+ ClientConfig: confighttp.ClientConfig{Endpoint: ts.URL},
+ Prefix: "prefix",
+ DefaultDimensions: map[string]string{},
},
client: ts.Client(),
},
@@ -685,12 +685,12 @@ func Test_exporter_PushMetricsData_Error(t *testing.T) {
})
}
-func Test_exporter_start_InvalidHTTPClientSettings(t *testing.T) {
+func Test_exporter_start_InvalidClientConfig(t *testing.T) {
cfg := &config.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "localhost:9090",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/non/existent",
},
},
diff --git a/exporter/elasticsearchexporter/README.md b/exporter/elasticsearchexporter/README.md
index 1a5d2e0f02c8..51f038139cac 100644
--- a/exporter/elasticsearchexporter/README.md
+++ b/exporter/elasticsearchexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Felasticsearch%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Felasticsearch) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Felasticsearch%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Felasticsearch) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@JaredTan95](https://www.github.com/JaredTan95) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@JaredTan95](https://www.github.com/JaredTan95), [@ycombinator](https://www.github.com/ycombinator) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter supports sending OpenTelemetry logs to [Elasticsearch](https://www.elastic.co/elasticsearch).
@@ -32,7 +31,7 @@ This exporter supports sending OpenTelemetry logs to [Elasticsearch](https://www
[index](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices.html)
or [datastream](https://www.elastic.co/guide/en/elasticsearch/reference/current/data-streams.html)
name to publish events to. The default value is `logs-generic-default`
-- `logs_dynamic_index` (optional):
+- `logs_dynamic_index` (optional):
takes resource or log record attribute named `elasticsearch.index.prefix` and `elasticsearch.index.suffix`
resulting dynamically prefixed / suffixed indexing based on `logs_index`. (priority: resource attribute > log record attribute)
- `enabled`(default=false): Enable/Disable dynamic index for log records
@@ -44,6 +43,12 @@ This exporter supports sending OpenTelemetry logs to [Elasticsearch](https://www
takes resource or span attribute named `elasticsearch.index.prefix` and `elasticsearch.index.suffix`
resulting dynamically prefixed / suffixed indexing based on `traces_index`. (priority: resource attribute > span attribute)
- `enabled`(default=false): Enable/Disable dynamic index for trace spans
+- `logstash_format` (optional): Logstash format compatibility. Traces or Logs data can be written into an index in logstash format.
+ - `enabled`(default=false): Enable/Disable Logstash format compatibility. When `logstash_format.enabled` is `true`, the index name is composed using `traces/logs_index` or `traces/logs_dynamic_index` as prefix and the date,
+ e.g: If `traces/logs_index` or `traces/logs_dynamic_index` is equals to `otlp-generic-default` your index will become `otlp-generic-default-YYYY.MM.DD`.
+ The last string appended belongs to the date when the data is being generated.
+ - `prefix_separator`(default=`-`): Set a separator between logstash_prefix and date.
+ - `date_format`(default=`%Y.%m.%d`): Time format (based on strftime) to generate the second part of the Index name.
- `pipeline` (optional): Optional [Ingest Node](https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html)
pipeline ID used for processing documents published by the exporter.
- `flush`: Event bulk buffer flush settings
@@ -57,11 +62,14 @@ This exporter supports sending OpenTelemetry logs to [Elasticsearch](https://www
- `max_interval` (default=1m): Max waiting time if a HTTP request failed.
- `mapping`: Events are encoded to JSON. The `mapping` allows users to
configure additional mapping rules.
- - `mode` (default=ecs): The fields naming mode. valid modes are:
+ - `mode` (default=none): The fields naming mode. valid modes are:
- `none`: Use original fields and event structure from the OTLP event.
- `ecs`: Try to map fields defined in the
[OpenTelemetry Semantic Conventions](https://github.com/open-telemetry/semantic-conventions)
- to [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current/index.html).
+ to [Elastic Common Schema (ECS)](https://www.elastic.co/guide/en/ecs/current/index.html). :warning: This mode's behavior is unstable, it is currently undergoing changes
+ - `raw`: Omit the `Attributes.` string prefixed to field names for log and
+ span attributes as well as omit the `Events.` string prefixed to
+ field names for span events.
- `fields` (optional): Configure additional fields mappings.
- `file` (optional): Read additional field mappings from the provided YAML file.
- `dedup` (default=true): Try to find and remove duplicate fields/attributes
diff --git a/exporter/elasticsearchexporter/attribute.go b/exporter/elasticsearchexporter/attribute.go
index 115cd1930f03..c2c187899b77 100644
--- a/exporter/elasticsearchexporter/attribute.go
+++ b/exporter/elasticsearchexporter/attribute.go
@@ -18,12 +18,21 @@ type attrGetter interface {
Attributes() pcommon.Map
}
-// retrieve attribute out of resource and record (span or log, if not found in resource)
-func getFromBothResourceAndAttribute(name string, resource attrGetter, record attrGetter) string {
+// retrieve attribute out of resource, scope, and record (span or log, if not found in resource)
+func getFromAttributes(name string, resource, scope, record attrGetter) string {
var str string
val, exist := resource.Attributes().Get(name)
if !exist {
- val, exist = record.Attributes().Get(name)
+ val, exist = scope.Attributes().Get(name)
+ if !exist {
+ val, exist = record.Attributes().Get(name)
+ if exist {
+ str = val.AsString()
+ }
+ }
+ if exist {
+ str = val.AsString()
+ }
}
if exist {
str = val.AsString()
diff --git a/exporter/elasticsearchexporter/config.go b/exporter/elasticsearchexporter/config.go
index 460d605fe92c..63dfe75dde89 100644
--- a/exporter/elasticsearchexporter/config.go
+++ b/exporter/elasticsearchexporter/config.go
@@ -56,18 +56,25 @@ type Config struct {
// https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html
Pipeline string `mapstructure:"pipeline"`
- HTTPClientSettings `mapstructure:",squash"`
- Discovery DiscoverySettings `mapstructure:"discover"`
- Retry RetrySettings `mapstructure:"retry"`
- Flush FlushSettings `mapstructure:"flush"`
- Mapping MappingsSettings `mapstructure:"mapping"`
+ ClientConfig `mapstructure:",squash"`
+ Discovery DiscoverySettings `mapstructure:"discover"`
+ Retry RetrySettings `mapstructure:"retry"`
+ Flush FlushSettings `mapstructure:"flush"`
+ Mapping MappingsSettings `mapstructure:"mapping"`
+ LogstashFormat LogstashFormatSettings `mapstructure:"logstash_format"`
+}
+
+type LogstashFormatSettings struct {
+ Enabled bool `mapstructure:"enabled"`
+ PrefixSeparator string `mapstructure:"prefix_separator"`
+ DateFormat string `mapstructure:"date_format"`
}
type DynamicIndexSetting struct {
Enabled bool `mapstructure:"enabled"`
}
-type HTTPClientSettings struct {
+type ClientConfig struct {
Authentication AuthenticationSettings `mapstructure:",squash"`
// ReadBufferSize for HTTP client. See http.Transport.ReadBufferSize.
@@ -83,7 +90,7 @@ type HTTPClientSettings struct {
// will be send with each HTTP request.
Headers map[string]string `mapstructure:"headers,omitempty"`
- configtls.TLSClientSetting `mapstructure:"tls,omitempty"`
+ configtls.ClientConfig `mapstructure:"tls,omitempty"`
}
// AuthenticationSettings defines user authentication related settings.
@@ -168,6 +175,7 @@ type MappingMode int
const (
MappingNone MappingMode = iota
MappingECS
+ MappingRaw
)
var (
@@ -181,6 +189,8 @@ func (m MappingMode) String() string {
return ""
case MappingECS:
return "ecs"
+ case MappingRaw:
+ return "raw"
default:
return ""
}
@@ -191,6 +201,7 @@ var mappingModes = func() map[string]MappingMode {
for _, m := range []MappingMode{
MappingNone,
MappingECS,
+ MappingRaw,
} {
table[strings.ToLower(m.String())] = m
}
@@ -224,3 +235,10 @@ func (cfg *Config) Validate() error {
return nil
}
+
+// MappingMode returns the mapping.mode defined in the given cfg
+// object. This method must be called after cfg.Validate() has been
+// called without returning an error.
+func (cfg *Config) MappingMode() MappingMode {
+ return mappingModes[cfg.Mapping.Mode]
+}
diff --git a/exporter/elasticsearchexporter/config_test.go b/exporter/elasticsearchexporter/config_test.go
index bfe9e638e8e6..265d199638de 100644
--- a/exporter/elasticsearchexporter/config_test.go
+++ b/exporter/elasticsearchexporter/config_test.go
@@ -39,7 +39,7 @@ func TestLoad_DeprecatedIndexConfigOption(t *testing.T) {
LogsIndex: "logs-generic-default",
TracesIndex: "traces-generic-default",
Pipeline: "mypipeline",
- HTTPClientSettings: HTTPClientSettings{
+ ClientConfig: ClientConfig{
Authentication: AuthenticationSettings{
User: "elastic",
Password: "search",
@@ -63,10 +63,15 @@ func TestLoad_DeprecatedIndexConfigOption(t *testing.T) {
MaxInterval: 1 * time.Minute,
},
Mapping: MappingsSettings{
- Mode: "ecs",
+ Mode: "none",
Dedup: true,
Dedot: true,
},
+ LogstashFormat: LogstashFormatSettings{
+ Enabled: false,
+ PrefixSeparator: "-",
+ DateFormat: "%Y.%m.%d",
+ },
})
}
@@ -76,6 +81,14 @@ func TestLoadConfig(t *testing.T) {
defaultCfg := createDefaultConfig()
defaultCfg.(*Config).Endpoints = []string{"https://elastic.example.com:9200"}
+ defaultLogstashFormatCfg := createDefaultConfig()
+ defaultLogstashFormatCfg.(*Config).Endpoints = []string{"http://localhost:9200"}
+ defaultLogstashFormatCfg.(*Config).LogstashFormat.Enabled = true
+
+ defaultRawCfg := createDefaultConfig()
+ defaultRawCfg.(*Config).Endpoints = []string{"http://localhost:9200"}
+ defaultRawCfg.(*Config).Mapping.Mode = "raw"
+
tests := []struct {
configFile string
id component.ID
@@ -101,7 +114,7 @@ func TestLoadConfig(t *testing.T) {
LogsIndex: "logs-generic-default",
TracesIndex: "trace_index",
Pipeline: "mypipeline",
- HTTPClientSettings: HTTPClientSettings{
+ ClientConfig: ClientConfig{
Authentication: AuthenticationSettings{
User: "elastic",
Password: "search",
@@ -125,10 +138,15 @@ func TestLoadConfig(t *testing.T) {
MaxInterval: 1 * time.Minute,
},
Mapping: MappingsSettings{
- Mode: "ecs",
+ Mode: "none",
Dedup: true,
Dedot: true,
},
+ LogstashFormat: LogstashFormatSettings{
+ Enabled: false,
+ PrefixSeparator: "-",
+ DateFormat: "%Y.%m.%d",
+ },
},
},
{
@@ -146,7 +164,7 @@ func TestLoadConfig(t *testing.T) {
LogsIndex: "my_log_index",
TracesIndex: "traces-generic-default",
Pipeline: "mypipeline",
- HTTPClientSettings: HTTPClientSettings{
+ ClientConfig: ClientConfig{
Authentication: AuthenticationSettings{
User: "elastic",
Password: "search",
@@ -170,12 +188,27 @@ func TestLoadConfig(t *testing.T) {
MaxInterval: 1 * time.Minute,
},
Mapping: MappingsSettings{
- Mode: "ecs",
+ Mode: "none",
Dedup: true,
Dedot: true,
},
+ LogstashFormat: LogstashFormatSettings{
+ Enabled: false,
+ PrefixSeparator: "-",
+ DateFormat: "%Y.%m.%d",
+ },
},
},
+ {
+ id: component.NewIDWithName(metadata.Type, "logstash_format"),
+ configFile: "config.yaml",
+ expected: defaultLogstashFormatCfg,
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "raw"),
+ configFile: "config.yaml",
+ expected: defaultRawCfg,
+ },
}
for _, tt := range tests {
diff --git a/exporter/elasticsearchexporter/elasticsearch_bulk.go b/exporter/elasticsearchexporter/elasticsearch_bulk.go
index d3c96af69496..9885b70a4127 100644
--- a/exporter/elasticsearchexporter/elasticsearch_bulk.go
+++ b/exporter/elasticsearchexporter/elasticsearch_bulk.go
@@ -65,7 +65,7 @@ func (*clientLogger) ResponseBodyEnabled() bool {
}
func newElasticsearchClient(logger *zap.Logger, config *Config) (*esClientCurrent, error) {
- tlsCfg, err := config.TLSClientSetting.LoadTLSConfig()
+ tlsCfg, err := config.ClientConfig.LoadTLSConfig()
if err != nil {
return nil, err
}
@@ -216,7 +216,7 @@ func pushDocuments(ctx context.Context, logger *zap.Logger, index string, docume
zap.NamedError("reason", err))
default:
- logger.Error(fmt.Sprintf("Drop dcos: failed to index: %#v", resp.Error),
+ logger.Error(fmt.Sprintf("Drop docs: failed to index: %#v", resp.Error),
zap.Int("attempt", attempts),
zap.Int("status", resp.Status))
}
diff --git a/exporter/elasticsearchexporter/factory.go b/exporter/elasticsearchexporter/factory.go
index 1f951700d51b..44bc0e0a29a6 100644
--- a/exporter/elasticsearchexporter/factory.go
+++ b/exporter/elasticsearchexporter/factory.go
@@ -8,6 +8,7 @@ package elasticsearchexporter // import "github.com/open-telemetry/opentelemetry
import (
"context"
"fmt"
+ "runtime"
"time"
"go.opentelemetry.io/collector/component"
@@ -21,6 +22,7 @@ const (
// The value of "type" key in configuration.
defaultLogsIndex = "logs-generic-default"
defaultTracesIndex = "traces-generic-default"
+ userAgentHeaderKey = "User-Agent"
)
// NewFactory creates a factory for Elastic exporter.
@@ -38,7 +40,7 @@ func createDefaultConfig() component.Config {
qs.Enabled = false
return &Config{
QueueSettings: qs,
- HTTPClientSettings: HTTPClientSettings{
+ ClientConfig: ClientConfig{
Timeout: 90 * time.Second,
},
Index: "",
@@ -51,10 +53,15 @@ func createDefaultConfig() component.Config {
MaxInterval: 1 * time.Minute,
},
Mapping: MappingsSettings{
- Mode: "ecs",
+ Mode: "none",
Dedup: true,
Dedot: true,
},
+ LogstashFormat: LogstashFormatSettings{
+ Enabled: false,
+ PrefixSeparator: "-",
+ DateFormat: "%Y.%m.%d",
+ },
}
}
@@ -71,17 +78,19 @@ func createLogsExporter(
set.Logger.Warn("index option are deprecated and replaced with logs_index and traces_index.")
}
- exporter, err := newLogsExporter(set.Logger, cf)
+ setDefaultUserAgentHeader(cf, set.BuildInfo)
+
+ logsExporter, err := newLogsExporter(set.Logger, cf)
if err != nil {
- return nil, fmt.Errorf("cannot configure Elasticsearch logs exporter: %w", err)
+ return nil, fmt.Errorf("cannot configure Elasticsearch logsExporter: %w", err)
}
return exporterhelper.NewLogsExporter(
ctx,
set,
cfg,
- exporter.pushLogsData,
- exporterhelper.WithShutdown(exporter.Shutdown),
+ logsExporter.pushLogsData,
+ exporterhelper.WithShutdown(logsExporter.Shutdown),
exporterhelper.WithQueue(cf.QueueSettings),
)
}
@@ -91,15 +100,29 @@ func createTracesExporter(ctx context.Context,
cfg component.Config) (exporter.Traces, error) {
cf := cfg.(*Config)
- exporter, err := newTracesExporter(set.Logger, cf)
+
+ setDefaultUserAgentHeader(cf, set.BuildInfo)
+
+ tracesExporter, err := newTracesExporter(set.Logger, cf)
if err != nil {
- return nil, fmt.Errorf("cannot configure Elasticsearch traces exporter: %w", err)
+ return nil, fmt.Errorf("cannot configure Elasticsearch tracesExporter: %w", err)
}
return exporterhelper.NewTracesExporter(
ctx,
set,
cfg,
- exporter.pushTraceData,
- exporterhelper.WithShutdown(exporter.Shutdown),
+ tracesExporter.pushTraceData,
+ exporterhelper.WithShutdown(tracesExporter.Shutdown),
exporterhelper.WithQueue(cf.QueueSettings))
}
+
+// set default User-Agent header with BuildInfo if User-Agent is empty
+func setDefaultUserAgentHeader(cf *Config, info component.BuildInfo) {
+ if _, found := cf.Headers[userAgentHeaderKey]; found {
+ return
+ }
+ if cf.Headers == nil {
+ cf.Headers = make(map[string]string)
+ }
+ cf.Headers[userAgentHeaderKey] = fmt.Sprintf("%s/%s (%s/%s)", info.Description, info.Version, runtime.GOOS, runtime.GOARCH)
+}
diff --git a/exporter/elasticsearchexporter/factory_test.go b/exporter/elasticsearchexporter/factory_test.go
index 477aeabd8b3c..86557365b09b 100644
--- a/exporter/elasticsearchexporter/factory_test.go
+++ b/exporter/elasticsearchexporter/factory_test.go
@@ -5,10 +5,12 @@ package elasticsearchexporter
import (
"context"
+ "strings"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/exporter/exportertest"
)
@@ -66,3 +68,24 @@ func TestFactory_CreateLogsAndTracesExporterWithDeprecatedIndexOption(t *testing
require.NotNil(t, tracesExporter)
require.NoError(t, tracesExporter.Shutdown(context.TODO()))
}
+
+func TestSetDefaultUserAgentHeader(t *testing.T) {
+ t.Run("insert default user agent header into empty", func(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ setDefaultUserAgentHeader(cfg, component.BuildInfo{Description: "mock OpenTelemetry Collector", Version: "latest"})
+ assert.Equal(t, len(cfg.Headers), 1)
+ assert.Equal(t, strings.Contains(cfg.Headers[userAgentHeaderKey], "OpenTelemetry Collector"), true)
+ })
+
+ t.Run("ignore user agent header if configured", func(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.Headers = map[string]string{
+ userAgentHeaderKey: "mock user agent header",
+ }
+ setDefaultUserAgentHeader(cfg, component.BuildInfo{Description: "mock OpenTelemetry Collector", Version: "latest"})
+ assert.Equal(t, len(cfg.Headers), 1)
+ assert.Equal(t, cfg.Headers[userAgentHeaderKey], "mock user agent header")
+ })
+}
diff --git a/exporter/elasticsearchexporter/generated_component_test.go b/exporter/elasticsearchexporter/generated_component_test.go
new file mode 100644
index 000000000000..57761a699ae0
--- /dev/null
+++ b/exporter/elasticsearchexporter/generated_component_test.go
@@ -0,0 +1,135 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package elasticsearchexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ require.NoError(t, err)
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/elasticsearchexporter/go.mod b/exporter/elasticsearchexporter/go.mod
index 54943cce4eb0..d223e4850b81 100644
--- a/exporter/elasticsearchexporter/go.mod
+++ b/exporter/elasticsearchexporter/go.mod
@@ -1,57 +1,70 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/elastic/go-elasticsearch/v7 v7.17.10
github.com/elastic/go-structform v0.0.10
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/lestrrat-go/strftime v1.0.6
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
+ github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/elasticsearchexporter/go.sum b/exporter/elasticsearchexporter/go.sum
index f01da52ca6bf..5a605f7281d8 100644
--- a/exporter/elasticsearchexporter/go.sum
+++ b/exporter/elasticsearchexporter/go.sum
@@ -1,13 +1,9 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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=
@@ -15,46 +11,26 @@ github.com/elastic/go-elasticsearch/v7 v7.17.10 h1:TCQ8i4PmIJuBunvBS6bwT2ybzVFxx
github.com/elastic/go-elasticsearch/v7 v7.17.10/go.mod h1:OJ4wdbtDNk5g503kvlHLyErCgQwwzmDtaFC4XyOxXA4=
github.com/elastic/go-structform v0.0.10 h1:oy08o/Ih2hHTkNcRY/1HhaYvIp5z6t8si8gnCJPDo1w=
github.com/elastic/go-structform v0.0.10/go.mod h1:CZWf9aIRYY5SuKSmOhtXScE5uQiLZNqAFnwKR4OrIM4=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -63,15 +39,18 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
+github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
+github.com/lestrrat-go/strftime v1.0.6 h1:CFGsDEt1pOpFNU+TJB0nhz9jl+K0hZSLE205AhTIGQQ=
+github.com/lestrrat-go/strftime v1.0.6/go.mod h1:f7jQKgV5nnJpYgdEasS+/y7EsTb8ykN2z68n3TtcTaw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -79,110 +58,97 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
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/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -190,38 +156,17 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/elasticsearchexporter/internal/metadata/generated_status.go b/exporter/elasticsearchexporter/internal/metadata/generated_status.go
index 68d85c28d943..dae9c61cf4e9 100644
--- a/exporter/elasticsearchexporter/internal/metadata/generated_status.go
+++ b/exporter/elasticsearchexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("elasticsearch")
)
const (
- Type = "elasticsearch"
TracesStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/elasticsearch")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/elasticsearch")
+}
diff --git a/exporter/elasticsearchexporter/internal/objmodel/package_test.go b/exporter/elasticsearchexporter/internal/objmodel/package_test.go
new file mode 100644
index 000000000000..1828b58a7ea3
--- /dev/null
+++ b/exporter/elasticsearchexporter/internal/objmodel/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package objmodel
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/elasticsearchexporter/logs_exporter.go b/exporter/elasticsearchexporter/logs_exporter.go
index 7511988bc2ba..dfc7fd5eee9a 100644
--- a/exporter/elasticsearchexporter/logs_exporter.go
+++ b/exporter/elasticsearchexporter/logs_exporter.go
@@ -9,6 +9,7 @@ import (
"context"
"errors"
"fmt"
+ "time"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/plog"
@@ -18,9 +19,10 @@ import (
type elasticsearchLogsExporter struct {
logger *zap.Logger
- index string
- dynamicIndex bool
- maxAttempts int
+ index string
+ logstashFormat LogstashFormatSettings
+ dynamicIndex bool
+ maxAttempts int
client *esClientCurrent
bulkIndexer esBulkIndexerCurrent
@@ -51,7 +53,11 @@ func newLogsExporter(logger *zap.Logger, cfg *Config) (*elasticsearchLogsExporte
maxAttempts = cfg.Retry.MaxRequests
}
- model := &encodeModel{dedup: cfg.Mapping.Dedup, dedot: cfg.Mapping.Dedot}
+ model := &encodeModel{
+ dedup: cfg.Mapping.Dedup,
+ dedot: cfg.Mapping.Dedot,
+ mode: cfg.MappingMode(),
+ }
indexStr := cfg.LogsIndex
if cfg.Index != "" {
@@ -62,10 +68,11 @@ func newLogsExporter(logger *zap.Logger, cfg *Config) (*elasticsearchLogsExporte
client: client,
bulkIndexer: bulkIndexer,
- index: indexStr,
- dynamicIndex: cfg.LogsDynamicIndex.Enabled,
- maxAttempts: maxAttempts,
- model: model,
+ index: indexStr,
+ dynamicIndex: cfg.LogsDynamicIndex.Enabled,
+ maxAttempts: maxAttempts,
+ model: model,
+ logstashFormat: cfg.LogstashFormat,
}
return esLogsExp, nil
}
@@ -83,8 +90,9 @@ func (e *elasticsearchLogsExporter) pushLogsData(ctx context.Context, ld plog.Lo
resource := rl.Resource()
ills := rl.ScopeLogs()
for j := 0; j < ills.Len(); j++ {
- scope := ills.At(j).Scope()
- logs := ills.At(j).LogRecords()
+ ill := ills.At(j)
+ scope := ill.Scope()
+ logs := ill.LogRecords()
for k := 0; k < logs.Len(); k++ {
if err := e.pushLogRecord(ctx, resource, logs.At(k), scope); err != nil {
if cerr := ctx.Err(); cerr != nil {
@@ -103,12 +111,20 @@ func (e *elasticsearchLogsExporter) pushLogsData(ctx context.Context, ld plog.Lo
func (e *elasticsearchLogsExporter) pushLogRecord(ctx context.Context, resource pcommon.Resource, record plog.LogRecord, scope pcommon.InstrumentationScope) error {
fIndex := e.index
if e.dynamicIndex {
- prefix := getFromBothResourceAndAttribute(indexPrefix, resource, record)
- suffix := getFromBothResourceAndAttribute(indexSuffix, resource, record)
+ prefix := getFromAttributes(indexPrefix, resource, scope, record)
+ suffix := getFromAttributes(indexSuffix, resource, scope, record)
fIndex = fmt.Sprintf("%s%s%s", prefix, fIndex, suffix)
}
+ if e.logstashFormat.Enabled {
+ formattedIndex, err := generateIndexWithLogstashFormat(fIndex, &e.logstashFormat, time.Now())
+ if err != nil {
+ return err
+ }
+ fIndex = formattedIndex
+ }
+
document, err := e.model.encodeLog(resource, record, scope)
if err != nil {
return fmt.Errorf("Failed to encode log event: %w", err)
diff --git a/exporter/elasticsearchexporter/logs_exporter_test.go b/exporter/elasticsearchexporter/logs_exporter_test.go
index 48fa8a06cc0b..51870ee17295 100644
--- a/exporter/elasticsearchexporter/logs_exporter_test.go
+++ b/exporter/elasticsearchexporter/logs_exporter_test.go
@@ -10,6 +10,7 @@ import (
"fmt"
"net/http"
"runtime"
+ "strings"
"sync"
"sync/atomic"
"testing"
@@ -25,18 +26,18 @@ func TestExporter_New(t *testing.T) {
type validate func(*testing.T, *elasticsearchLogsExporter, error)
success := func(t *testing.T, exporter *elasticsearchLogsExporter, err error) {
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, exporter)
}
successWithInternalModel := func(expectedModel *encodeModel) validate {
return func(t *testing.T, exporter *elasticsearchLogsExporter, err error) {
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.EqualValues(t, expectedModel, exporter.model)
}
}
successWithDeprecatedIndexOption := func(index string) validate {
return func(t *testing.T, exporter *elasticsearchLogsExporter, err error) {
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, exporter)
require.EqualValues(t, index, exporter.index)
}
@@ -45,7 +46,7 @@ func TestExporter_New(t *testing.T) {
failWith := func(want error) validate {
return func(t *testing.T, exporter *elasticsearchLogsExporter, err error) {
require.Nil(t, exporter)
- require.NotNil(t, err)
+ require.Error(t, err)
if !errors.Is(err, want) {
t.Fatalf("Expected error '%v', but got '%v'", want, err)
}
@@ -55,7 +56,7 @@ func TestExporter_New(t *testing.T) {
failWithMessage := func(msg string) validate {
return func(t *testing.T, exporter *elasticsearchLogsExporter, err error) {
require.Nil(t, exporter)
- require.NotNil(t, err)
+ require.Error(t, err)
require.Contains(t, err.Error(), msg)
}
}
@@ -121,7 +122,7 @@ func TestExporter_New(t *testing.T) {
cfg.Mapping.Dedot = false
cfg.Mapping.Dedup = true
}),
- want: successWithInternalModel(&encodeModel{dedot: false, dedup: true}),
+ want: successWithInternalModel(&encodeModel{dedot: false, dedup: true, mode: MappingNone}),
},
}
@@ -152,6 +153,7 @@ func TestExporter_PushEvent(t *testing.T) {
if runtime.GOOS == "windows" {
t.Skip("skipping test on Windows, see https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/10178")
}
+
t.Run("publish with success", func(t *testing.T) {
rec := newBulkRecorder()
server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
@@ -166,6 +168,40 @@ func TestExporter_PushEvent(t *testing.T) {
rec.WaitItems(2)
})
+ t.Run("publish with ecs encoding", func(t *testing.T) {
+ rec := newBulkRecorder()
+ server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
+ rec.Record(docs)
+
+ expected := `{"@timestamp":"1970-01-01T00:00:00.000000000Z","application":"myapp","attrKey1":"abc","attrKey2":"def","error":{"stack_trace":"no no no no"},"message":"hello world","service":{"name":"myservice"}}`
+ actual := string(docs[0].Document)
+ assert.Equal(t, expected, actual)
+
+ return itemsAllOK(docs)
+ })
+
+ testConfig := withTestExporterConfig(func(cfg *Config) {
+ cfg.Mapping.Mode = "ecs"
+ })(server.URL)
+ exporter := newTestExporter(t, server.URL, func(cfg *Config) { *cfg = *testConfig })
+ mustSendLogsWithAttributes(t, exporter,
+ // record attrs
+ map[string]string{
+ "application": "myapp",
+ "service.name": "myservice",
+ },
+ // resource attrs
+ map[string]string{
+ "attrKey1": "abc",
+ "attrKey2": "def",
+ "exception.stacktrace": "no no no no",
+ },
+ // record body
+ "hello world",
+ )
+ rec.WaitItems(1)
+ })
+
t.Run("publish with dynamic index", func(t *testing.T) {
rec := newBulkRecorder()
@@ -179,11 +215,11 @@ func TestExporter_PushEvent(t *testing.T) {
rec.Record(docs)
data, err := docs[0].Action.MarshalJSON()
- assert.Nil(t, err)
+ assert.NoError(t, err)
jsonVal := map[string]any{}
err = json.Unmarshal(data, &jsonVal)
- assert.Nil(t, err)
+ assert.NoError(t, err)
create := jsonVal["create"].(map[string]any)
expected := fmt.Sprintf("%s%s%s", prefix, index, suffix)
@@ -205,8 +241,84 @@ func TestExporter_PushEvent(t *testing.T) {
map[string]string{
indexPrefix: prefix,
},
+ "hello world",
+ )
+
+ rec.WaitItems(1)
+ })
+
+ t.Run("publish with logstash index format enabled and dynamic index disabled", func(t *testing.T) {
+ var defaultCfg Config
+ rec := newBulkRecorder()
+ server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
+ rec.Record(docs)
+
+ data, err := docs[0].Action.MarshalJSON()
+ assert.NoError(t, err)
+
+ jsonVal := map[string]any{}
+ err = json.Unmarshal(data, &jsonVal)
+ assert.NoError(t, err)
+
+ create := jsonVal["create"].(map[string]any)
+
+ assert.Equal(t, strings.Contains(create["_index"].(string), defaultCfg.LogsIndex), true)
+
+ return itemsAllOK(docs)
+ })
+
+ exporter := newTestLogsExporter(t, server.URL, func(cfg *Config) {
+ cfg.LogstashFormat.Enabled = true
+ cfg.LogsIndex = "not-used-index"
+ defaultCfg = *cfg
+ })
+
+ mustSendLogsWithAttributes(t, exporter, nil, nil, "")
+
+ rec.WaitItems(1)
+ })
+
+ t.Run("publish with logstash index format enabled and dynamic index enabled", func(t *testing.T) {
+ var (
+ prefix = "resprefix-"
+ suffix = "-attrsuffix"
+ index = "someindex"
)
+ rec := newBulkRecorder()
+ server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
+ rec.Record(docs)
+
+ data, err := docs[0].Action.MarshalJSON()
+ assert.NoError(t, err)
+
+ jsonVal := map[string]any{}
+ err = json.Unmarshal(data, &jsonVal)
+ assert.NoError(t, err)
+
+ create := jsonVal["create"].(map[string]any)
+ expected := fmt.Sprintf("%s%s%s", prefix, index, suffix)
+ assert.Equal(t, strings.Contains(create["_index"].(string), expected), true)
+
+ return itemsAllOK(docs)
+ })
+
+ exporter := newTestLogsExporter(t, server.URL, func(cfg *Config) {
+ cfg.LogsIndex = index
+ cfg.LogsDynamicIndex.Enabled = true
+ cfg.LogstashFormat.Enabled = true
+ })
+
+ mustSendLogsWithAttributes(t, exporter,
+ map[string]string{
+ indexPrefix: "attrprefix-",
+ indexSuffix: suffix,
+ },
+ map[string]string{
+ indexPrefix: prefix,
+ },
+ "",
+ )
rec.WaitItems(1)
})
@@ -282,7 +394,7 @@ func TestExporter_PushEvent(t *testing.T) {
t.Run("do not retry invalid request", func(t *testing.T) {
attempts := &atomic.Int64{}
- server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
+ server := newESTestServer(t, func(_ []itemRequest) ([]itemResponse, error) {
attempts.Add(1)
return nil, &httpTestError{message: "oops", status: http.StatusBadRequest}
})
@@ -401,14 +513,13 @@ func mustSend(t *testing.T, exporter *elasticsearchLogsExporter, contents string
}
// send trace with span & resource attributes
-func mustSendLogsWithAttributes(t *testing.T, exporter *elasticsearchLogsExporter, attrMp map[string]string, resMp map[string]string) {
+func mustSendLogsWithAttributes(t *testing.T, exporter *elasticsearchLogsExporter, attrMp map[string]string, resMp map[string]string, body string) {
logs := newLogsWithAttributeAndResourceMap(attrMp, resMp)
- resLogs := logs.ResourceLogs().At(0)
- logRecords := resLogs.ScopeLogs().At(0).LogRecords().At(0)
-
- scopeLogs := resLogs.ScopeLogs().AppendEmpty()
- scope := scopeLogs.Scope()
+ resSpans := logs.ResourceLogs().At(0)
+ scopeLog := resSpans.ScopeLogs().At(0)
+ logRecords := scopeLog.LogRecords().At(0)
+ logRecords.Body().SetStr(body)
- err := exporter.pushLogRecord(context.TODO(), resLogs.Resource(), logRecords, scope)
+ err := exporter.pushLogRecord(context.TODO(), resSpans.Resource(), logRecords, scopeLog.Scope())
require.NoError(t, err)
}
diff --git a/exporter/elasticsearchexporter/metadata.yaml b/exporter/elasticsearchexporter/metadata.yaml
index 345ac0dbd94b..954e1bc58506 100644
--- a/exporter/elasticsearchexporter/metadata.yaml
+++ b/exporter/elasticsearchexporter/metadata.yaml
@@ -1,9 +1,14 @@
type: elasticsearch
+scope_name: otelcol/elasticsearch
status:
class: exporter
stability:
beta: [traces, logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
- active: [JaredTan95]
+ active: [JaredTan95, ycombinator]
+
+tests:
+ config:
+ endpoints: [http://localhost:9200]
\ No newline at end of file
diff --git a/exporter/elasticsearchexporter/model.go b/exporter/elasticsearchexporter/model.go
index 74737b7d1b32..cccdfa386923 100644
--- a/exporter/elasticsearchexporter/model.go
+++ b/exporter/elasticsearchexporter/model.go
@@ -30,6 +30,7 @@ type mappingModel interface {
type encodeModel struct {
dedup bool
dedot bool
+ mode MappingMode
}
const (
@@ -40,16 +41,72 @@ const (
func (m *encodeModel) encodeLog(resource pcommon.Resource, record plog.LogRecord, scope pcommon.InstrumentationScope) ([]byte, error) {
var document objmodel.Document
- document.AddTimestamp("@timestamp", record.Timestamp()) // We use @timestamp in order to ensure that we can index if the default data stream logs template is used.
- document.AddTraceID("TraceId", record.TraceID())
- document.AddSpanID("SpanId", record.SpanID())
- document.AddInt("TraceFlags", int64(record.Flags()))
- document.AddString("SeverityText", record.SeverityText())
- document.AddInt("SeverityNumber", int64(record.SeverityNumber()))
- document.AddAttribute("Body", record.Body())
- document.AddAttributes("Attributes", record.Attributes())
- document.AddAttributes("Resource", resource.Attributes())
- document.AddAttributes("Scope", scopeToAttributes(scope))
+
+ switch m.mode {
+ case MappingECS:
+ if record.Timestamp() != 0 {
+ document.AddTimestamp("@timestamp", record.Timestamp())
+ } else {
+ document.AddTimestamp("@timestamp", record.ObservedTimestamp())
+ }
+
+ document.AddTraceID("trace.id", record.TraceID())
+ document.AddSpanID("span.id", record.SpanID())
+
+ if n := record.SeverityNumber(); n != plog.SeverityNumberUnspecified {
+ document.AddInt("event.severity", int64(record.SeverityNumber()))
+ }
+
+ document.AddString("log.level", record.SeverityText())
+
+ if record.Body().Type() == pcommon.ValueTypeStr {
+ document.AddAttribute("message", record.Body())
+ }
+
+ fieldMapper := func(k string) string {
+ switch k {
+ case "exception.type":
+ return "error.type"
+ case "exception.message":
+ return "error.message"
+ case "exception.stacktrace":
+ return "error.stack_trace"
+ default:
+ return k
+ }
+ }
+
+ resource.Attributes().Range(func(k string, v pcommon.Value) bool {
+ k = fieldMapper(k)
+ document.AddAttribute(k, v)
+ return true
+ })
+ scope.Attributes().Range(func(k string, v pcommon.Value) bool {
+ k = fieldMapper(k)
+ document.AddAttribute(k, v)
+ return true
+ })
+ record.Attributes().Range(func(k string, v pcommon.Value) bool {
+ k = fieldMapper(k)
+ document.AddAttribute(k, v)
+ return true
+ })
+ default:
+ docTimeStamp := record.Timestamp()
+ if docTimeStamp.AsTime().UnixNano() == 0 {
+ docTimeStamp = record.ObservedTimestamp()
+ }
+ document.AddTimestamp("@timestamp", docTimeStamp) // We use @timestamp in order to ensure that we can index if the default data stream logs template is used.
+ document.AddTraceID("TraceId", record.TraceID())
+ document.AddSpanID("SpanId", record.SpanID())
+ document.AddInt("TraceFlags", int64(record.Flags()))
+ document.AddString("SeverityText", record.SeverityText())
+ document.AddInt("SeverityNumber", int64(record.SeverityNumber()))
+ document.AddAttribute("Body", record.Body())
+ m.encodeAttributes(&document, record.Attributes())
+ document.AddAttributes("Resource", resource.Attributes())
+ document.AddAttributes("Scope", scopeToAttributes(scope))
+ }
if m.dedup {
document.Dedup()
@@ -72,10 +129,11 @@ func (m *encodeModel) encodeSpan(resource pcommon.Resource, span ptrace.Span, sc
document.AddString("Name", span.Name())
document.AddString("Kind", traceutil.SpanKindStr(span.Kind()))
document.AddInt("TraceStatus", int64(span.Status().Code()))
+ document.AddString("TraceStatusDescription", span.Status().Message())
document.AddString("Link", spanLinksToString(span.Links()))
- document.AddAttributes("Attributes", span.Attributes())
+ m.encodeAttributes(&document, span.Attributes())
document.AddAttributes("Resource", resource.Attributes())
- document.AddEvents("Events", span.Events())
+ m.encodeEvents(&document, span.Events())
document.AddInt("Duration", durationAsMicroseconds(span.StartTimestamp().AsTime(), span.EndTimestamp().AsTime())) // unit is microseconds
document.AddAttributes("Scope", scopeToAttributes(scope))
@@ -90,6 +148,22 @@ func (m *encodeModel) encodeSpan(resource pcommon.Resource, span ptrace.Span, sc
return buf.Bytes(), err
}
+func (m *encodeModel) encodeAttributes(document *objmodel.Document, attributes pcommon.Map) {
+ key := "Attributes"
+ if m.mode == MappingRaw {
+ key = ""
+ }
+ document.AddAttributes(key, attributes)
+}
+
+func (m *encodeModel) encodeEvents(document *objmodel.Document, events ptrace.SpanEventSlice) {
+ key := "Events"
+ if m.mode == MappingRaw {
+ key = ""
+ }
+ document.AddEvents(key, events)
+}
+
func spanLinksToString(spanLinkSlice ptrace.SpanLinkSlice) string {
linkArray := make([]map[string]any, 0, spanLinkSlice.Len())
for i := 0; i < spanLinkSlice.Len(); i++ {
diff --git a/exporter/elasticsearchexporter/model_test.go b/exporter/elasticsearchexporter/model_test.go
index 4ee35f74e819..fc6bff486f85 100644
--- a/exporter/elasticsearchexporter/model_test.go
+++ b/exporter/elasticsearchexporter/model_test.go
@@ -4,16 +4,26 @@
package elasticsearchexporter
import (
+ "fmt"
"testing"
"time"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/ptrace"
semconv "go.opentelemetry.io/collector/semconv/v1.18.0"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter/internal/objmodel"
)
-var expectedSpanBody = `{"@timestamp":"2023-04-19T03:04:05.000000006Z","Attributes.service.instance.id":"23","Duration":1000000,"EndTimestamp":"2023-04-19T03:04:06.000000006Z","Events.fooEvent.evnetMockBar":"bar","Events.fooEvent.evnetMockFoo":"foo","Events.fooEvent.time":"2023-04-19T03:04:05.000000006Z","Kind":"SPAN_KIND_CLIENT","Link":"[{\"attribute\":{},\"spanID\":\"\",\"traceID\":\"01020304050607080807060504030200\"}]","Name":"client span","Resource.cloud.platform":"aws_elastic_beanstalk","Resource.cloud.provider":"aws","Resource.deployment.environment":"BETA","Resource.service.instance.id":"23","Resource.service.name":"some-service","Resource.service.version":"env-version-1234","Scope.lib-foo":"lib-bar","Scope.name":"io.opentelemetry.rabbitmq-2.7","Scope.version":"1.30.0-alpha","SpanId":"1920212223242526","TraceId":"01020304050607080807060504030201","TraceStatus":0}`
+var expectedSpanBody = `{"@timestamp":"2023-04-19T03:04:05.000000006Z","Attributes.service.instance.id":"23","Duration":1000000,"EndTimestamp":"2023-04-19T03:04:06.000000006Z","Events.fooEvent.evnetMockBar":"bar","Events.fooEvent.evnetMockFoo":"foo","Events.fooEvent.time":"2023-04-19T03:04:05.000000006Z","Kind":"SPAN_KIND_CLIENT","Link":"[{\"attribute\":{},\"spanID\":\"\",\"traceID\":\"01020304050607080807060504030200\"}]","Name":"client span","Resource.cloud.platform":"aws_elastic_beanstalk","Resource.cloud.provider":"aws","Resource.deployment.environment":"BETA","Resource.service.instance.id":"23","Resource.service.name":"some-service","Resource.service.version":"env-version-1234","Scope.lib-foo":"lib-bar","Scope.name":"io.opentelemetry.rabbitmq-2.7","Scope.version":"1.30.0-alpha","SpanId":"1920212223242526","TraceId":"01020304050607080807060504030201","TraceStatus":2,"TraceStatusDescription":"Test"}`
+
+var expectedLogBody = `{"@timestamp":"2023-04-19T03:04:05.000000006Z","Attributes.log-attr1":"value1","Body":"log-body","Resource.key1":"value1","Scope.name":"","Scope.version":"","SeverityNumber":0,"TraceFlags":0}`
+
+var expectedLogBodyWithEmptyTimestamp = `{"@timestamp":"1970-01-01T00:00:00.000000000Z","Attributes.log-attr1":"value1","Body":"log-body","Resource.key1":"value1","Scope.name":"","Scope.version":"","SeverityNumber":0,"TraceFlags":0}`
+var expectedLogBodyDeDottedWithEmptyTimestamp = `{"@timestamp":"1970-01-01T00:00:00.000000000Z","Attributes":{"log-attr1":"value1"},"Body":"log-body","Resource":{"foo":{"bar":"baz"},"key1":"value1"},"Scope":{"name":"","version":""},"SeverityNumber":0,"TraceFlags":0}`
func TestEncodeSpan(t *testing.T) {
model := &encodeModel{dedup: true, dedot: false}
@@ -23,6 +33,34 @@ func TestEncodeSpan(t *testing.T) {
assert.Equal(t, expectedSpanBody, string(spanByte))
}
+func TestEncodeLog(t *testing.T) {
+ t.Run("empty timestamp with observedTimestamp override", func(t *testing.T) {
+ model := &encodeModel{dedup: true, dedot: false}
+ td := mockResourceLogs()
+ td.ScopeLogs().At(0).LogRecords().At(0).SetObservedTimestamp(pcommon.NewTimestampFromTime(time.Date(2023, 4, 19, 3, 4, 5, 6, time.UTC)))
+ logByte, err := model.encodeLog(td.Resource(), td.ScopeLogs().At(0).LogRecords().At(0), td.ScopeLogs().At(0).Scope())
+ assert.NoError(t, err)
+ assert.Equal(t, expectedLogBody, string(logByte))
+ })
+
+ t.Run("both timestamp and observedTimestamp empty", func(t *testing.T) {
+ model := &encodeModel{dedup: true, dedot: false}
+ td := mockResourceLogs()
+ logByte, err := model.encodeLog(td.Resource(), td.ScopeLogs().At(0).LogRecords().At(0), td.ScopeLogs().At(0).Scope())
+ assert.NoError(t, err)
+ assert.Equal(t, expectedLogBodyWithEmptyTimestamp, string(logByte))
+ })
+
+ t.Run("dedot true", func(t *testing.T) {
+ model := &encodeModel{dedup: true, dedot: true}
+ td := mockResourceLogs()
+ td.Resource().Attributes().PutStr("foo.bar", "baz")
+ logByte, err := model.encodeLog(td.Resource(), td.ScopeLogs().At(0).LogRecords().At(0), td.ScopeLogs().At(0).Scope())
+ require.NoError(t, err)
+ require.Equal(t, expectedLogBodyDeDottedWithEmptyTimestamp, string(logByte))
+ })
+}
+
func mockResourceSpans() ptrace.Traces {
traces := ptrace.NewTraces()
@@ -51,6 +89,8 @@ func mockResourceSpans() ptrace.Traces {
span.SetKind(ptrace.SpanKindClient)
span.SetStartTimestamp(pcommon.NewTimestampFromTime(tStart))
span.SetEndTimestamp(pcommon.NewTimestampFromTime(tEnd))
+ span.Status().SetCode(2)
+ span.Status().SetMessage("Test")
span.Attributes().PutStr("service.instance.id", "23")
span.Links().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 8, 7, 6, 5, 4, 3, 2, 0})
@@ -61,3 +101,119 @@ func mockResourceSpans() ptrace.Traces {
event.Attributes().PutStr("evnetMockBar", "bar")
return traces
}
+
+func mockResourceLogs() plog.ResourceLogs {
+ rl := plog.NewResourceLogs()
+ rl.Resource().Attributes().PutStr("key1", "value1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Attributes().PutStr("log-attr1", "value1")
+ l.Body().SetStr("log-body")
+ return rl
+}
+
+func TestEncodeAttributes(t *testing.T) {
+ t.Parallel()
+
+ attributes := pcommon.NewMap()
+ err := attributes.FromRaw(map[string]any{
+ "s": "baz",
+ "o": map[string]any{
+ "sub_i": 19,
+ },
+ })
+ require.NoError(t, err)
+
+ tests := map[string]struct {
+ mappingMode MappingMode
+ want func() objmodel.Document
+ }{
+ "raw": {
+ mappingMode: MappingRaw,
+ want: func() objmodel.Document {
+ return objmodel.DocumentFromAttributes(attributes)
+ },
+ },
+ "none": {
+ mappingMode: MappingNone,
+ want: func() objmodel.Document {
+ doc := objmodel.Document{}
+ doc.AddAttributes("Attributes", attributes)
+ return doc
+ },
+ },
+ "ecs": {
+ mappingMode: MappingECS,
+ want: func() objmodel.Document {
+ doc := objmodel.Document{}
+ doc.AddAttributes("Attributes", attributes)
+ return doc
+ },
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ m := encodeModel{
+ mode: test.mappingMode,
+ }
+
+ doc := objmodel.Document{}
+ m.encodeAttributes(&doc, attributes)
+ require.Equal(t, test.want(), doc)
+ })
+ }
+}
+
+func TestEncodeEvents(t *testing.T) {
+ t.Parallel()
+
+ events := ptrace.NewSpanEventSlice()
+ events.EnsureCapacity(4)
+ for i := 0; i < 4; i++ {
+ event := events.AppendEmpty()
+ event.SetTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(time.Duration(i) * time.Minute)))
+ event.SetName(fmt.Sprintf("event_%d", i))
+ }
+
+ tests := map[string]struct {
+ mappingMode MappingMode
+ want func() objmodel.Document
+ }{
+ "raw": {
+ mappingMode: MappingRaw,
+ want: func() objmodel.Document {
+ doc := objmodel.Document{}
+ doc.AddEvents("", events)
+ return doc
+ },
+ },
+ "none": {
+ mappingMode: MappingNone,
+ want: func() objmodel.Document {
+ doc := objmodel.Document{}
+ doc.AddEvents("Events", events)
+ return doc
+ },
+ },
+ "ecs": {
+ mappingMode: MappingECS,
+ want: func() objmodel.Document {
+ doc := objmodel.Document{}
+ doc.AddEvents("Events", events)
+ return doc
+ },
+ },
+ }
+
+ for name, test := range tests {
+ t.Run(name, func(t *testing.T) {
+ m := encodeModel{
+ mode: test.mappingMode,
+ }
+
+ doc := objmodel.Document{}
+ m.encodeEvents(&doc, events)
+ require.Equal(t, test.want(), doc)
+ })
+ }
+}
diff --git a/exporter/elasticsearchexporter/package_test.go b/exporter/elasticsearchexporter/package_test.go
new file mode 100644
index 000000000000..da727a30bfa0
--- /dev/null
+++ b/exporter/elasticsearchexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package elasticsearchexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/elasticsearchexporter/testdata/config.yaml b/exporter/elasticsearchexporter/testdata/config.yaml
index 60ba25ebb476..3054df30355c 100644
--- a/exporter/elasticsearchexporter/testdata/config.yaml
+++ b/exporter/elasticsearchexporter/testdata/config.yaml
@@ -40,3 +40,11 @@ elasticsearch/log:
max_requests: 5
sending_queue:
enabled: true
+elasticsearch/logstash_format:
+ endpoints: [http://localhost:9200]
+ logstash_format:
+ enabled: true
+elasticsearch/raw:
+ endpoints: [http://localhost:9200]
+ mapping:
+ mode: raw
diff --git a/exporter/elasticsearchexporter/trace_exporter.go b/exporter/elasticsearchexporter/trace_exporter.go
index ef421951ed4c..4f313f0d5546 100644
--- a/exporter/elasticsearchexporter/trace_exporter.go
+++ b/exporter/elasticsearchexporter/trace_exporter.go
@@ -9,6 +9,7 @@ import (
"context"
"errors"
"fmt"
+ "time"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/ptrace"
@@ -18,9 +19,10 @@ import (
type elasticsearchTracesExporter struct {
logger *zap.Logger
- index string
- dynamicIndex bool
- maxAttempts int
+ index string
+ logstashFormat LogstashFormatSettings
+ dynamicIndex bool
+ maxAttempts int
client *esClientCurrent
bulkIndexer esBulkIndexerCurrent
@@ -47,17 +49,22 @@ func newTracesExporter(logger *zap.Logger, cfg *Config) (*elasticsearchTracesExp
maxAttempts = cfg.Retry.MaxRequests
}
- model := &encodeModel{dedup: cfg.Mapping.Dedup, dedot: cfg.Mapping.Dedot}
+ model := &encodeModel{
+ dedup: cfg.Mapping.Dedup,
+ dedot: cfg.Mapping.Dedot,
+ mode: cfg.MappingMode(),
+ }
return &elasticsearchTracesExporter{
logger: logger,
client: client,
bulkIndexer: bulkIndexer,
- index: cfg.TracesIndex,
- dynamicIndex: cfg.TracesDynamicIndex.Enabled,
- maxAttempts: maxAttempts,
- model: model,
+ index: cfg.TracesIndex,
+ dynamicIndex: cfg.TracesDynamicIndex.Enabled,
+ maxAttempts: maxAttempts,
+ model: model,
+ logstashFormat: cfg.LogstashFormat,
}, nil
}
@@ -76,10 +83,12 @@ func (e *elasticsearchTracesExporter) pushTraceData(
resource := il.Resource()
scopeSpans := il.ScopeSpans()
for j := 0; j < scopeSpans.Len(); j++ {
- scope := scopeSpans.At(j).Scope()
- spans := scopeSpans.At(j).Spans()
+ scopeSpan := scopeSpans.At(j)
+ scope := scopeSpan.Scope()
+ spans := scopeSpan.Spans()
for k := 0; k < spans.Len(); k++ {
- if err := e.pushTraceRecord(ctx, resource, spans.At(k), scope); err != nil {
+ span := spans.At(k)
+ if err := e.pushTraceRecord(ctx, resource, span, scope); err != nil {
if cerr := ctx.Err(); cerr != nil {
return cerr
}
@@ -95,12 +104,20 @@ func (e *elasticsearchTracesExporter) pushTraceData(
func (e *elasticsearchTracesExporter) pushTraceRecord(ctx context.Context, resource pcommon.Resource, span ptrace.Span, scope pcommon.InstrumentationScope) error {
fIndex := e.index
if e.dynamicIndex {
- prefix := getFromBothResourceAndAttribute(indexPrefix, resource, span)
- suffix := getFromBothResourceAndAttribute(indexSuffix, resource, span)
+ prefix := getFromAttributes(indexPrefix, resource, scope, span)
+ suffix := getFromAttributes(indexSuffix, resource, scope, span)
fIndex = fmt.Sprintf("%s%s%s", prefix, fIndex, suffix)
}
+ if e.logstashFormat.Enabled {
+ formattedIndex, err := generateIndexWithLogstashFormat(fIndex, &e.logstashFormat, time.Now())
+ if err != nil {
+ return err
+ }
+ fIndex = formattedIndex
+ }
+
document, err := e.model.encodeSpan(resource, span, scope)
if err != nil {
return fmt.Errorf("Failed to encode trace record: %w", err)
diff --git a/exporter/elasticsearchexporter/traces_exporter_test.go b/exporter/elasticsearchexporter/traces_exporter_test.go
index 7c40be6b4d61..b34354bdb0fb 100644
--- a/exporter/elasticsearchexporter/traces_exporter_test.go
+++ b/exporter/elasticsearchexporter/traces_exporter_test.go
@@ -9,8 +9,8 @@ import (
"errors"
"fmt"
"net/http"
- "os"
"runtime"
+ "strings"
"sync"
"sync/atomic"
"testing"
@@ -26,12 +26,12 @@ func TestTracesExporter_New(t *testing.T) {
type validate func(*testing.T, *elasticsearchTracesExporter, error)
success := func(t *testing.T, exporter *elasticsearchTracesExporter, err error) {
- require.Nil(t, err)
+ require.NoError(t, err)
require.NotNil(t, exporter)
}
successWithInternalModel := func(expectedModel *encodeModel) validate {
return func(t *testing.T, exporter *elasticsearchTracesExporter, err error) {
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.EqualValues(t, expectedModel, exporter.model)
}
}
@@ -39,7 +39,7 @@ func TestTracesExporter_New(t *testing.T) {
failWith := func(want error) validate {
return func(t *testing.T, exporter *elasticsearchTracesExporter, err error) {
require.Nil(t, exporter)
- require.NotNil(t, err)
+ require.Error(t, err)
if !errors.Is(err, want) {
t.Fatalf("Expected error '%v', but got '%v'", want, err)
}
@@ -49,7 +49,7 @@ func TestTracesExporter_New(t *testing.T) {
failWithMessage := func(msg string) validate {
return func(t *testing.T, exporter *elasticsearchTracesExporter, err error) {
require.Nil(t, exporter)
- require.NotNil(t, err)
+ require.Error(t, err)
require.Contains(t, err.Error(), msg)
}
}
@@ -99,7 +99,7 @@ func TestTracesExporter_New(t *testing.T) {
cfg.Mapping.Dedot = false
cfg.Mapping.Dedup = true
}),
- want: successWithInternalModel(&encodeModel{dedot: false, dedup: true}),
+ want: successWithInternalModel(&encodeModel{dedot: false, dedup: true, mode: MappingNone}),
},
}
@@ -110,18 +110,8 @@ func TestTracesExporter_New(t *testing.T) {
env = map[string]string{defaultElasticsearchEnvName: ""}
}
- oldEnv := make(map[string]string, len(env))
- defer func() {
- for k, v := range oldEnv {
- os.Setenv(k, v)
- }
- }()
-
- for k := range env {
- oldEnv[k] = os.Getenv(k)
- }
for k, v := range env {
- os.Setenv(k, v)
+ t.Setenv(k, v)
}
exporter, err := newTracesExporter(zap.NewNop(), test.config)
@@ -168,11 +158,11 @@ func TestExporter_PushTraceRecord(t *testing.T) {
rec.Record(docs)
data, err := docs[0].Action.MarshalJSON()
- assert.Nil(t, err)
+ assert.NoError(t, err)
jsonVal := map[string]any{}
err = json.Unmarshal(data, &jsonVal)
- assert.Nil(t, err)
+ assert.NoError(t, err)
create := jsonVal["create"].(map[string]any)
@@ -200,6 +190,82 @@ func TestExporter_PushTraceRecord(t *testing.T) {
rec.WaitItems(1)
})
+ t.Run("publish with logstash format index", func(t *testing.T) {
+ var defaultCfg Config
+
+ rec := newBulkRecorder()
+ server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
+ rec.Record(docs)
+
+ data, err := docs[0].Action.MarshalJSON()
+ assert.NoError(t, err)
+
+ jsonVal := map[string]any{}
+ err = json.Unmarshal(data, &jsonVal)
+ assert.NoError(t, err)
+
+ create := jsonVal["create"].(map[string]any)
+
+ assert.Equal(t, strings.Contains(create["_index"].(string), defaultCfg.TracesIndex), true)
+
+ return itemsAllOK(docs)
+ })
+
+ exporter := newTestTracesExporter(t, server.URL, func(cfg *Config) {
+ cfg.LogstashFormat.Enabled = true
+ cfg.TracesIndex = "not-used-index"
+ defaultCfg = *cfg
+ })
+
+ mustSendTracesWithAttributes(t, exporter, nil, nil)
+
+ rec.WaitItems(1)
+ })
+
+ t.Run("publish with logstash format index and dynamic index enabled ", func(t *testing.T) {
+ var (
+ prefix = "resprefix-"
+ suffix = "-attrsuffix"
+ index = "someindex"
+ )
+
+ rec := newBulkRecorder()
+ server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
+ rec.Record(docs)
+
+ data, err := docs[0].Action.MarshalJSON()
+ assert.NoError(t, err)
+
+ jsonVal := map[string]any{}
+ err = json.Unmarshal(data, &jsonVal)
+ assert.NoError(t, err)
+
+ create := jsonVal["create"].(map[string]any)
+ expected := fmt.Sprintf("%s%s%s", prefix, index, suffix)
+
+ assert.Equal(t, strings.Contains(create["_index"].(string), expected), true)
+
+ return itemsAllOK(docs)
+ })
+
+ exporter := newTestTracesExporter(t, server.URL, func(cfg *Config) {
+ cfg.TracesIndex = index
+ cfg.TracesDynamicIndex.Enabled = true
+ cfg.LogstashFormat.Enabled = true
+ })
+
+ mustSendTracesWithAttributes(t, exporter,
+ map[string]string{
+ indexPrefix: "attrprefix-",
+ indexSuffix: suffix,
+ },
+ map[string]string{
+ indexPrefix: prefix,
+ },
+ )
+ rec.WaitItems(1)
+ })
+
t.Run("retry http request", func(t *testing.T) {
failures := 0
rec := newBulkRecorder()
@@ -272,7 +338,7 @@ func TestExporter_PushTraceRecord(t *testing.T) {
t.Run("do not retry invalid request", func(t *testing.T) {
attempts := &atomic.Int64{}
- server := newESTestServer(t, func(docs []itemRequest) ([]itemResponse, error) {
+ server := newESTestServer(t, func(_ []itemRequest) ([]itemResponse, error) {
attempts.Add(1)
return nil, &httpTestError{message: "oops", status: http.StatusBadRequest}
})
diff --git a/exporter/elasticsearchexporter/util.go b/exporter/elasticsearchexporter/util.go
new file mode 100644
index 000000000000..e5b398082b3b
--- /dev/null
+++ b/exporter/elasticsearchexporter/util.go
@@ -0,0 +1,28 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package elasticsearchexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/elasticsearchexporter"
+
+import (
+ "bytes"
+ "fmt"
+ "time"
+
+ "github.com/lestrrat-go/strftime"
+)
+
+func generateIndexWithLogstashFormat(index string, conf *LogstashFormatSettings, t time.Time) (string, error) {
+ if conf.Enabled {
+ partIndex := fmt.Sprintf("%s%s", index, conf.PrefixSeparator)
+ var buf bytes.Buffer
+ p, err := strftime.New(fmt.Sprintf("%s%s", partIndex, conf.DateFormat))
+ if err != nil {
+ return partIndex, err
+ }
+ if err = p.Format(&buf, t); err != nil {
+ return partIndex, err
+ }
+ index = buf.String()
+ }
+ return index, nil
+}
diff --git a/exporter/elasticsearchexporter/utils_test.go b/exporter/elasticsearchexporter/utils_test.go
index 3309d9fb9a26..e53fedfbdd89 100644
--- a/exporter/elasticsearchexporter/utils_test.go
+++ b/exporter/elasticsearchexporter/utils_test.go
@@ -15,6 +15,7 @@ import (
"testing"
"time"
+ "github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/ptrace"
@@ -126,7 +127,7 @@ func (r *bulkRecorder) countItems() (count int) {
func newESTestServer(t *testing.T, bulkHandler bulkHandler) *httptest.Server {
mux := http.NewServeMux()
- mux.HandleFunc("/", handleErr(func(w http.ResponseWriter, req *http.Request) error {
+ mux.HandleFunc("/", handleErr(func(w http.ResponseWriter, _ *http.Request) error {
w.Header().Add("X-Elastic-Product", "Elasticsearch")
enc := json.NewEncoder(w)
@@ -251,3 +252,28 @@ func fillResourceAttributeMap(attrs pcommon.Map, mp map[string]string) {
attrs.PutStr(k, v)
}
}
+
+func TestGetSuffixTime(t *testing.T) {
+ defaultCfg := createDefaultConfig().(*Config)
+ defaultCfg.LogstashFormat.Enabled = true
+ testTime := time.Date(2023, 12, 2, 10, 10, 10, 1, time.UTC)
+ index, err := generateIndexWithLogstashFormat(defaultCfg.LogsIndex, &defaultCfg.LogstashFormat, testTime)
+ assert.NoError(t, err)
+ assert.Equal(t, index, "logs-generic-default-2023.12.02")
+
+ defaultCfg.LogsIndex = "logstash"
+ defaultCfg.LogstashFormat.PrefixSeparator = "."
+ otelLogsIndex, err := generateIndexWithLogstashFormat(defaultCfg.LogsIndex, &defaultCfg.LogstashFormat, testTime)
+ assert.NoError(t, err)
+ assert.Equal(t, otelLogsIndex, "logstash.2023.12.02")
+
+ defaultCfg.LogstashFormat.DateFormat = "%Y-%m-%d"
+ newOtelLogsIndex, err := generateIndexWithLogstashFormat(defaultCfg.LogsIndex, &defaultCfg.LogstashFormat, testTime)
+ assert.NoError(t, err)
+ assert.Equal(t, newOtelLogsIndex, "logstash.2023-12-02")
+
+ defaultCfg.LogstashFormat.DateFormat = "%d/%m/%Y"
+ newOtelLogsIndexWithSpecDataFormat, err := generateIndexWithLogstashFormat(defaultCfg.LogsIndex, &defaultCfg.LogstashFormat, testTime)
+ assert.NoError(t, err)
+ assert.Equal(t, newOtelLogsIndexWithSpecDataFormat, "logstash.02/12/2023")
+}
diff --git a/exporter/f5cloudexporter/README.md b/exporter/f5cloudexporter/README.md
deleted file mode 100644
index 63c4d0de2258..000000000000
--- a/exporter/f5cloudexporter/README.md
+++ /dev/null
@@ -1,51 +0,0 @@
-# F5 Cloud Exporter
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq] |
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Ff5cloud%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Ff5cloud) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Ff5cloud%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Ff5cloud) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@gramidt](https://www.github.com/gramidt) |
-
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-
-
-Exports data via HTTP to F5 Cloud.
-
-## Getting Started
-
-The following settings are required:
-
-- `endpoint` (no default): The URL to send data to. See your F5 Cloud account for details.
-- `source` (no default): A unique identifier that is used to distinguish where this data is coming from (e.g. dev_cluster). This is in
- addition to the pipeline attributes and resources.
-- `f5cloud_auth.credential_file` (no default): Path to the credential file used to authenticate this client. See your F5
- Cloud account for details.
-
-The following settings can be optionally configured:
-
-- `f5cloud_auth.audience` (no default): Identifies the recipient that the authentication JWT is intended for. See your F5 Cloud
- account for details.
-
-- `timeout` (default = 30s): HTTP request time limit. For details see https://golang.org/pkg/net/http/#Client
-- `read_buffer_size` (default = 0): ReadBufferSize for HTTP client.
-- `write_buffer_size` (default = 512 * 1024): WriteBufferSize for HTTP client.
-
-Example:
-
-```yaml
-f5cloud:
- endpoint: https://
- source: prod
- f5cloud_auth:
- credential_file: "/etc/creds/key.json"
-```
-
-The full list of settings exposed for this exporter are documented [here](./config.go) with detailed sample
-configurations [here](./testdata/config.yaml).
-
-This exporter also offers proxy support as documented
-[here](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter#proxy-support).
diff --git a/exporter/f5cloudexporter/auth.go b/exporter/f5cloudexporter/auth.go
deleted file mode 100644
index de59939a31ad..000000000000
--- a/exporter/f5cloudexporter/auth.go
+++ /dev/null
@@ -1,61 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package f5cloudexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter"
-
-import (
- "fmt"
- "net/http"
-
- "golang.org/x/oauth2"
-)
-
-const (
- sourceHeader = "X-F5-Source"
-)
-
-type f5CloudAuthRoundTripper struct {
- transport http.RoundTripper
- tokenSource oauth2.TokenSource
- source string
-}
-
-func (rt *f5CloudAuthRoundTripper) RoundTrip(req *http.Request) (*http.Response, error) {
- // Clone request to ensure thread safety
- req2 := req.Clone(req.Context())
-
- // Add authorization header
- tkn, err := rt.tokenSource.Token()
- if err != nil {
- return nil, err
- }
- tkn.SetAuthHeader(req2)
-
- // Add F5 specific headers
- req2.Header.Add(sourceHeader, rt.source)
-
- resp, err := rt.transport.RoundTrip(req2)
- if err != nil {
- return nil, err
- }
-
- return resp, nil
-}
-
-func newF5CloudAuthRoundTripper(ts oauth2.TokenSource, source string, next http.RoundTripper) (http.RoundTripper, error) {
- if ts == nil {
- return nil, fmt.Errorf("no TokenSource exists")
- }
-
- if len(source) == 0 {
- return nil, fmt.Errorf("no source provided")
- }
-
- rt := f5CloudAuthRoundTripper{
- transport: next,
- tokenSource: ts,
- source: source,
- }
-
- return &rt, nil
-}
diff --git a/exporter/f5cloudexporter/auth_test.go b/exporter/f5cloudexporter/auth_test.go
deleted file mode 100644
index 44daca066c01..000000000000
--- a/exporter/f5cloudexporter/auth_test.go
+++ /dev/null
@@ -1,143 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package f5cloudexporter
-
-import (
- "fmt"
- "net/http"
- "net/http/httptest"
- "strings"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
- "golang.org/x/oauth2"
-)
-
-type ErrorRoundTripper struct{}
-
-func (ert *ErrorRoundTripper) RoundTrip(_ *http.Request) (*http.Response, error) {
- return nil, fmt.Errorf("error")
-}
-
-func TestF5CloudAuthRoundTripper_RoundTrip(t *testing.T) {
- validTokenSource := createMockTokenSource()
- source := "tests"
-
- defaultRoundTripper := (http.RoundTripper)(http.DefaultTransport.(*http.Transport).Clone())
- errorRoundTripper := &ErrorRoundTripper{}
-
- tests := []struct {
- name string
- rt http.RoundTripper
- token oauth2.TokenSource
- shouldError bool
- }{
- {
- name: "Test valid token source",
- rt: defaultRoundTripper,
- token: validTokenSource,
- shouldError: false,
- },
- {
- name: "Test invalid token source",
- rt: defaultRoundTripper,
- token: &InvalidTokenSource{},
- shouldError: true,
- },
- {
- name: "Test error in next round tripper",
- rt: errorRoundTripper,
- token: validTokenSource,
- shouldError: true,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- assert.Equal(t, "Bearer test_access_token", r.Header.Get("Authorization"))
- assert.Equal(t, "tests", r.Header.Get(sourceHeader))
- }))
- defer server.Close()
- rt, err := newF5CloudAuthRoundTripper(tt.token, source, tt.rt)
- assert.NoError(t, err)
- req, err := http.NewRequest("POST", server.URL, strings.NewReader(""))
- assert.NoError(t, err)
- res, err := rt.RoundTrip(req)
- if tt.shouldError {
- assert.Nil(t, res)
- assert.Error(t, err)
- return
- }
- assert.NoError(t, err)
- assert.Equal(t, res.StatusCode, 200)
- })
- }
-}
-
-func TestCreateF5CloudAuthRoundTripperWithToken(t *testing.T) {
- defaultRoundTripper := (http.RoundTripper)(http.DefaultTransport.(*http.Transport).Clone())
-
- token := createMockTokenSource()
- source := "test"
-
- tests := []struct {
- name string
- token oauth2.TokenSource
- source string
- rt http.RoundTripper
- shouldError bool
- }{
- {
- name: "success_case",
- token: token,
- source: source,
- rt: defaultRoundTripper,
- shouldError: false,
- },
- {
- name: "no_token_provided_error",
- token: nil,
- source: source,
- rt: defaultRoundTripper,
- shouldError: true,
- },
- {
- name: "no_source_provided_error",
- token: token,
- source: "",
- rt: defaultRoundTripper,
- shouldError: true,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- _, err := newF5CloudAuthRoundTripper(tt.token, tt.source, tt.rt)
- if tt.shouldError {
- assert.Error(t, err)
- return
- }
- assert.NoError(t, err)
- })
- }
-}
-
-func createMockTokenSource() oauth2.TokenSource {
- tkn := &oauth2.Token{
- AccessToken: "test_access_token",
- TokenType: "",
- RefreshToken: "",
- Expiry: time.Time{},
- }
-
- return oauth2.StaticTokenSource(tkn)
-}
-
-type InvalidTokenSource struct{}
-
-func (ts *InvalidTokenSource) Token() (*oauth2.Token, error) {
- return nil, fmt.Errorf("bad TokenSource for testing")
-}
diff --git a/exporter/f5cloudexporter/config.go b/exporter/f5cloudexporter/config.go
deleted file mode 100644
index a8147587a17e..000000000000
--- a/exporter/f5cloudexporter/config.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package f5cloudexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter"
-
-import (
- "fmt"
- "net/url"
- "os"
-
- otlphttp "go.opentelemetry.io/collector/exporter/otlphttpexporter"
-)
-
-// Config defines configuration for F5 Cloud exporter.
-type Config struct {
- // Config represents the OTLP HTTP Exporter configuration.
- otlphttp.Config `mapstructure:",squash"`
-
- // Source represents a unique identifier that is used to distinguish where this data is coming from.
- Source string `mapstructure:"source"`
-
- // AuthConfig represents the F5 Cloud authentication configuration options.
- AuthConfig AuthConfig `mapstructure:"f5cloud_auth"`
-}
-
-func (c *Config) sanitize() error {
- if len(c.Endpoint) == 0 {
- return fmt.Errorf("missing required \"endpoint\" setting")
- }
-
- endpointURL, err := url.Parse(c.Endpoint)
- if err != nil {
- return err
- }
-
- if len(c.Source) == 0 {
- return fmt.Errorf("missing required \"source\" setting")
- }
-
- if len(c.AuthConfig.CredentialFile) == 0 {
- return fmt.Errorf("missing required \"f5cloud_auth.credential_file\" setting")
- }
-
- if _, err := os.Stat(c.AuthConfig.CredentialFile); os.IsNotExist(err) {
- return fmt.Errorf("the provided \"f5cloud_auth.credential_file\" does not exist")
- }
-
- if len(c.AuthConfig.Audience) == 0 {
- c.AuthConfig.Audience = fmt.Sprintf("%s://%s", endpointURL.Scheme, endpointURL.Hostname())
- }
-
- return nil
-}
-
-// AuthConfig defines F5 Cloud authentication configurations for F5CloudAuthRoundTripper
-type AuthConfig struct {
- // CredentialFile is the F5 Cloud credentials for your designated account.
- CredentialFile string `mapstructure:"credential_file"`
-
- // Audience is the F5 Cloud audience for your designated account.
- Audience string `mapstructure:"audience"`
-}
diff --git a/exporter/f5cloudexporter/config_test.go b/exporter/f5cloudexporter/config_test.go
deleted file mode 100644
index 972bf730f115..000000000000
--- a/exporter/f5cloudexporter/config_test.go
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package f5cloudexporter
-
-import (
- "path/filepath"
- "testing"
- "time"
-
- "github.com/cenkalti/backoff/v4"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/config/confighttp"
- "go.opentelemetry.io/collector/config/configopaque"
- "go.opentelemetry.io/collector/confmap/confmaptest"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
- otlphttp "go.opentelemetry.io/collector/exporter/otlphttpexporter"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter/internal/metadata"
-)
-
-func TestLoadConfig(t *testing.T) {
- cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
- require.NoError(t, err)
- factory := NewFactory()
- cfg := factory.CreateDefaultConfig()
-
- sub, err := cm.Sub(component.NewIDWithName(metadata.Type, "allsettings").String())
- require.NoError(t, err)
- require.NoError(t, component.UnmarshalConfig(sub, cfg))
-
- actualCfg := cfg.(*Config)
- expectedCfg := &Config{
- Config: otlphttp.Config{
- RetrySettings: exporterhelper.RetrySettings{
- Enabled: true,
- InitialInterval: 10 * time.Second,
- MaxInterval: 1 * time.Minute,
- MaxElapsedTime: 10 * time.Minute,
- RandomizationFactor: backoff.DefaultRandomizationFactor,
- Multiplier: backoff.DefaultMultiplier,
- },
- QueueSettings: exporterhelper.QueueSettings{
- Enabled: true,
- NumConsumers: 2,
- QueueSize: 10,
- },
- HTTPClientSettings: confighttp.HTTPClientSettings{
- Endpoint: "https://f5cloud",
- ReadBufferSize: 123,
- WriteBufferSize: 345,
- Timeout: time.Second * 10,
- Headers: map[string]configopaque.String{
- "User-Agent": "opentelemetry-collector-contrib {{version}}",
- },
- Compression: "gzip",
- },
- },
- Source: "dev",
- AuthConfig: AuthConfig{
- CredentialFile: "/etc/creds/key.json",
- Audience: "exampleaudience",
- },
- }
- // testing function equality is not supported in Go hence these will be ignored for this test
- expectedCfg.HTTPClientSettings.CustomRoundTripper = nil
- actualCfg.HTTPClientSettings.CustomRoundTripper = nil
- assert.Equal(t, expectedCfg, actualCfg)
-}
-
-func TestConfig_sanitize(t *testing.T) {
- const validEndpoint = "https://validendpoint.local"
- const validSource = "tests"
-
- type fields struct {
- Endpoint string
- Source string
- CredentialFile string
- Audience string
- }
- tests := []struct {
- name string
- fields fields
- errorMessage string
- shouldError bool
- }{
- {
- name: "Test missing endpoint",
- fields: fields{
- Endpoint: "",
- },
- errorMessage: "missing required \"endpoint\" setting",
- shouldError: true,
- },
- {
- name: "Test invalid endpoint",
- fields: fields{
- Endpoint: "this://is:an:invalid:endpoint.com",
- },
- errorMessage: "",
- shouldError: true,
- },
- {
- name: "Test credential file not provided",
- fields: fields{
- Endpoint: validEndpoint,
- Source: validSource,
- CredentialFile: "",
- },
- errorMessage: "missing required \"f5cloud_auth.credential_file\" setting",
- shouldError: true,
- },
- {
- name: "Test non-existent credential file",
- fields: fields{
- Endpoint: validEndpoint,
- Source: validSource,
- CredentialFile: "non-existent cred file",
- },
- errorMessage: "the provided \"f5cloud_auth.credential_file\" does not exist",
- shouldError: true,
- },
- {
- name: "Test missing source",
- fields: fields{
- Endpoint: validEndpoint,
- Source: "",
- },
- errorMessage: "missing required \"source\" setting",
- shouldError: true,
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- factory := NewFactory()
- cfg := factory.CreateDefaultConfig().(*Config)
- cfg.Endpoint = tt.fields.Endpoint
- cfg.Source = tt.fields.Source
- cfg.AuthConfig = AuthConfig{
- CredentialFile: tt.fields.CredentialFile,
- Audience: tt.fields.Audience,
- }
-
- err := cfg.sanitize()
- if (err != nil) != tt.shouldError {
- t.Errorf("sanitize() error = %v, shouldError %v", err, tt.shouldError)
- return
- }
-
- if tt.shouldError {
- assert.Error(t, err)
- if len(tt.errorMessage) != 0 {
- assert.Equal(t, tt.errorMessage, err.Error())
- }
- }
- })
- }
-
- t.Run("Test audience is set from endpoint when not provided", func(t *testing.T) {
- factory := NewFactory()
- cfg := factory.CreateDefaultConfig().(*Config)
- cfg.Endpoint = validEndpoint
- cfg.Source = validSource
- cfg.AuthConfig = AuthConfig{
- CredentialFile: "testdata/empty_credential_file.json",
- Audience: "",
- }
-
- err := cfg.sanitize()
- assert.NoError(t, err)
- assert.Equal(t, validEndpoint, cfg.AuthConfig.Audience)
- })
-
- t.Run("Test audience is not set from endpoint when provided", func(t *testing.T) {
- factory := NewFactory()
- cfg := factory.CreateDefaultConfig().(*Config)
- cfg.Endpoint = validEndpoint
- cfg.Source = validSource
- cfg.AuthConfig = AuthConfig{
- CredentialFile: "testdata/empty_credential_file.json",
- Audience: "tests",
- }
-
- err := cfg.sanitize()
- assert.NoError(t, err)
- assert.Equal(t, "tests", cfg.AuthConfig.Audience)
- })
-}
diff --git a/exporter/f5cloudexporter/doc.go b/exporter/f5cloudexporter/doc.go
deleted file mode 100644
index be24ef8d2294..000000000000
--- a/exporter/f5cloudexporter/doc.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-//go:generate mdatagen metadata.yaml
-
-// Package f5cloudexporter implements an OpenTelemetry Collector exporter that sends trace, metric, and log data to F5 Cloud.
-package f5cloudexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter"
diff --git a/exporter/f5cloudexporter/factory.go b/exporter/f5cloudexporter/factory.go
deleted file mode 100644
index 6aacdacc1f1a..000000000000
--- a/exporter/f5cloudexporter/factory.go
+++ /dev/null
@@ -1,124 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package f5cloudexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter"
-
-import (
- "context"
- "net/http"
- "strings"
-
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/config/configopaque"
- "go.opentelemetry.io/collector/exporter"
- otlphttp "go.opentelemetry.io/collector/exporter/otlphttpexporter"
- "golang.org/x/oauth2"
- "google.golang.org/api/idtoken"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter/internal/metadata"
-)
-
-type TokenSourceGetter func(config *Config) (oauth2.TokenSource, error)
-
-type f5cloudFactory struct {
- exporter.Factory
- getTokenSource TokenSourceGetter
-}
-
-// NewFactory returns a factory of the F5 Cloud exporter that can be registered to the Collector.
-func NewFactory() exporter.Factory {
- return newFactoryWithTokenSourceGetter(getTokenSourceFromConfig)
-}
-
-func newFactoryWithTokenSourceGetter(tsg TokenSourceGetter) exporter.Factory {
- return &f5cloudFactory{Factory: otlphttp.NewFactory(), getTokenSource: tsg}
-}
-
-func (f *f5cloudFactory) Type() component.Type {
- return metadata.Type
-}
-
-func (f *f5cloudFactory) CreateMetricsExporter(
- ctx context.Context,
- params exporter.CreateSettings,
- config component.Config) (exporter.Metrics, error) {
-
- cfg := config.(*Config)
-
- if err := cfg.sanitize(); err != nil {
- return nil, err
- }
-
- fillUserAgent(cfg, params.BuildInfo.Version)
-
- return f.Factory.CreateMetricsExporter(ctx, params, &cfg.Config)
-}
-
-func (f *f5cloudFactory) CreateTracesExporter(
- ctx context.Context,
- params exporter.CreateSettings,
- config component.Config) (exporter.Traces, error) {
-
- cfg := config.(*Config)
-
- if err := cfg.sanitize(); err != nil {
- return nil, err
- }
-
- fillUserAgent(cfg, params.BuildInfo.Version)
-
- return f.Factory.CreateTracesExporter(ctx, params, &cfg.Config)
-}
-
-func (f *f5cloudFactory) CreateLogsExporter(
- ctx context.Context,
- params exporter.CreateSettings,
- config component.Config) (exporter.Logs, error) {
-
- cfg := config.(*Config)
-
- if err := cfg.sanitize(); err != nil {
- return nil, err
- }
-
- fillUserAgent(cfg, params.BuildInfo.Version)
-
- return f.Factory.CreateLogsExporter(ctx, params, &cfg.Config)
-}
-
-func (f *f5cloudFactory) CreateDefaultConfig() component.Config {
- cfg := &Config{
- Config: *f.Factory.CreateDefaultConfig().(*otlphttp.Config),
- AuthConfig: AuthConfig{
- CredentialFile: "",
- Audience: "",
- },
- }
-
- cfg.Headers["User-Agent"] = "opentelemetry-collector-contrib {{version}}"
-
- cfg.HTTPClientSettings.CustomRoundTripper = func(next http.RoundTripper) (http.RoundTripper, error) {
- ts, err := f.getTokenSource(cfg)
- if err != nil {
- return nil, err
- }
-
- return newF5CloudAuthRoundTripper(ts, cfg.Source, next)
- }
-
- return cfg
-}
-
-// getTokenSourceFromConfig gets a TokenSource based on the configuration.
-func getTokenSourceFromConfig(config *Config) (oauth2.TokenSource, error) {
- ts, err := idtoken.NewTokenSource(context.Background(), config.AuthConfig.Audience, idtoken.WithCredentialsFile(config.AuthConfig.CredentialFile))
- if err != nil {
- return nil, err
- }
-
- return ts, nil
-}
-
-func fillUserAgent(cfg *Config, version string) {
- cfg.Headers["User-Agent"] = configopaque.String(strings.ReplaceAll(string(cfg.Headers["User-Agent"]), "{{version}}", version))
-}
diff --git a/exporter/f5cloudexporter/factory_test.go b/exporter/f5cloudexporter/factory_test.go
deleted file mode 100644
index 90717ffdec85..000000000000
--- a/exporter/f5cloudexporter/factory_test.go
+++ /dev/null
@@ -1,161 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package f5cloudexporter
-
-import (
- "context"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/component/componenttest"
- "go.opentelemetry.io/collector/config/configopaque"
- "go.opentelemetry.io/collector/exporter/exportertest"
- "golang.org/x/oauth2"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter/internal/metadata"
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil"
-)
-
-func TestFactory_TestType(t *testing.T) {
- f := NewFactory()
- assert.Equal(t, f.Type(), component.Type(metadata.Type))
-}
-
-func TestFactory_CreateDefaultConfig(t *testing.T) {
- factory := NewFactory()
- cfg := factory.CreateDefaultConfig()
- assert.NotNil(t, cfg, "failed to create default config")
- assert.NoError(t, componenttest.CheckConfigStruct(cfg))
- ocfg, ok := factory.CreateDefaultConfig().(*Config)
- assert.True(t, ok)
- assert.Equal(t, ocfg.HTTPClientSettings.Endpoint, "")
- assert.Equal(t, ocfg.HTTPClientSettings.Timeout, 30*time.Second, "default timeout is 30 seconds")
- assert.Equal(t, ocfg.RetrySettings.Enabled, true, "default retry is enabled")
- assert.Equal(t, ocfg.RetrySettings.MaxElapsedTime, 300*time.Second, "default retry MaxElapsedTime")
- assert.Equal(t, ocfg.RetrySettings.InitialInterval, 5*time.Second, "default retry InitialInterval")
- assert.Equal(t, ocfg.RetrySettings.MaxInterval, 30*time.Second, "default retry MaxInterval")
- assert.Equal(t, ocfg.QueueSettings.Enabled, true, "default sending queue is enabled")
-}
-
-func TestFactory_CreateMetricsExporter(t *testing.T) {
- factory := newFactoryWithTokenSourceGetter(mockTokenSourceGetter)
- cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://" + testutil.GetAvailableLocalAddress(t)
- cfg.Source = "tests"
- cfg.AuthConfig = AuthConfig{
- CredentialFile: "testdata/empty_credential_file.json",
- Audience: "tests",
- }
-
- creationParams := exportertest.NewNopCreateSettings()
- creationParams.BuildInfo = component.BuildInfo{
- Version: "0.0.0",
- }
- oexp, err := factory.CreateMetricsExporter(context.Background(), creationParams, cfg)
- require.Nil(t, err)
- require.NotNil(t, oexp)
-
- require.Equal(t, configopaque.String("opentelemetry-collector-contrib 0.0.0"), cfg.Headers["User-Agent"])
-}
-
-func TestFactory_CreateMetricsExporterInvalidConfig(t *testing.T) {
- factory := newFactoryWithTokenSourceGetter(mockTokenSourceGetter)
- cfg := factory.CreateDefaultConfig().(*Config)
-
- creationParams := exportertest.NewNopCreateSettings()
- oexp, err := factory.CreateMetricsExporter(context.Background(), creationParams, cfg)
- require.Error(t, err)
- require.Nil(t, oexp)
-}
-
-func TestFactory_CreateTracesExporter(t *testing.T) {
- factory := newFactoryWithTokenSourceGetter(mockTokenSourceGetter)
- cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://" + testutil.GetAvailableLocalAddress(t)
- cfg.Source = "tests"
- cfg.AuthConfig = AuthConfig{
- CredentialFile: "testdata/empty_credential_file.json",
- Audience: "tests",
- }
-
- creationParams := exportertest.NewNopCreateSettings()
- creationParams.BuildInfo = component.BuildInfo{
- Version: "0.0.0",
- }
- oexp, err := factory.CreateTracesExporter(context.Background(), creationParams, cfg)
- require.Nil(t, err)
- require.NotNil(t, oexp)
-
- require.Equal(t, configopaque.String("opentelemetry-collector-contrib 0.0.0"), cfg.Headers["User-Agent"])
-}
-
-func Test_Factory_CreateTracesExporterInvalidConfig(t *testing.T) {
- factory := newFactoryWithTokenSourceGetter(mockTokenSourceGetter)
- cfg := factory.CreateDefaultConfig().(*Config)
-
- creationParams := exportertest.NewNopCreateSettings()
- oexp, err := factory.CreateTracesExporter(context.Background(), creationParams, cfg)
- require.Error(t, err)
- require.Nil(t, oexp)
-}
-
-func TestFactory_CreateLogsExporter(t *testing.T) {
- factory := newFactoryWithTokenSourceGetter(mockTokenSourceGetter)
- cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://" + testutil.GetAvailableLocalAddress(t)
- cfg.Source = "tests"
- cfg.AuthConfig = AuthConfig{
- CredentialFile: "testdata/empty_credential_file.json",
- Audience: "tests",
- }
-
- creationParams := exportertest.NewNopCreateSettings()
- creationParams.BuildInfo = component.BuildInfo{
- Version: "0.0.0",
- }
- oexp, err := factory.CreateLogsExporter(context.Background(), creationParams, cfg)
- require.Nil(t, err)
- require.NotNil(t, oexp)
-
- require.Equal(t, configopaque.String("opentelemetry-collector-contrib 0.0.0"), cfg.Headers["User-Agent"])
-}
-
-func TestFactory_CreateLogsExporterInvalidConfig(t *testing.T) {
- factory := newFactoryWithTokenSourceGetter(mockTokenSourceGetter)
- cfg := factory.CreateDefaultConfig().(*Config)
-
- creationParams := exportertest.NewNopCreateSettings()
- oexp, err := factory.CreateLogsExporter(context.Background(), creationParams, cfg)
- require.Error(t, err)
- require.Nil(t, oexp)
-}
-
-func TestFactory_getTokenSourceFromConfig(t *testing.T) {
- factory := newFactoryWithTokenSourceGetter(mockTokenSourceGetter)
- cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://" + testutil.GetAvailableLocalAddress(t)
- cfg.Source = "tests"
- cfg.AuthConfig = AuthConfig{
- CredentialFile: "testdata/empty_credential_file.json",
- Audience: "tests",
- }
-
- ts, err := getTokenSourceFromConfig(cfg)
- assert.Error(t, err)
- assert.Nil(t, ts)
-}
-
-func mockTokenSourceGetter(_ *Config) (oauth2.TokenSource, error) {
- tkn := &oauth2.Token{
- AccessToken: "",
- TokenType: "",
- RefreshToken: "",
- Expiry: time.Time{},
- }
-
- return oauth2.StaticTokenSource(tkn), nil
-}
diff --git a/exporter/f5cloudexporter/go.mod b/exporter/f5cloudexporter/go.mod
deleted file mode 100644
index ffcd4ed6f062..000000000000
--- a/exporter/f5cloudexporter/go.mod
+++ /dev/null
@@ -1,82 +0,0 @@
-module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/f5cloudexporter
-
-go 1.20
-
-require (
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/exporter/otlphttpexporter v0.89.0
- golang.org/x/oauth2 v0.14.0
- google.golang.org/api v0.150.0
-)
-
-require (
- cloud.google.com/go/compute v1.23.1 // indirect
- cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
- github.com/go-logr/stdr v1.2.2 // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/golang/snappy v0.0.4 // indirect
- github.com/google/s2a-go v0.1.7 // indirect
- github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
- github.com/json-iterator/go v1.1.12 // 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/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
- github.com/mitchellh/reflectwalk v1.0.2 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- golang.org/x/text v0.14.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
- gopkg.in/yaml.v3 v3.0.1 // indirect
-)
-
-replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
-
-retract (
- v0.76.2
- v0.76.1
- v0.65.0
-)
diff --git a/exporter/f5cloudexporter/go.sum b/exporter/f5cloudexporter/go.sum
deleted file mode 100644
index 6667d7cad36d..000000000000
--- a/exporter/f5cloudexporter/go.sum
+++ /dev/null
@@ -1,275 +0,0 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0=
-cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
-cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
-cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
-github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
-github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
-github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
-github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
-github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
-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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.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/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
-github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
-github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
-github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/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/service v0.89.0 h1:dZSK++Eu2H/vzWjhVG3yC0P76Xu5xE6qji0dMy0fRTw=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
-go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
-go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/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-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
-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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
-golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
-golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/f5cloudexporter/internal/metadata/generated_status.go b/exporter/f5cloudexporter/internal/metadata/generated_status.go
deleted file mode 100644
index 7b47f7437e60..000000000000
--- a/exporter/f5cloudexporter/internal/metadata/generated_status.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "go.opentelemetry.io/collector/component"
-)
-
-const (
- Type = "f5cloud"
- TracesStability = component.StabilityLevelBeta
- MetricsStability = component.StabilityLevelBeta
- LogsStability = component.StabilityLevelBeta
-)
diff --git a/exporter/f5cloudexporter/metadata.yaml b/exporter/f5cloudexporter/metadata.yaml
deleted file mode 100644
index 1c59a86d4f37..000000000000
--- a/exporter/f5cloudexporter/metadata.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-type: f5cloud
-
-status:
- class: exporter
- stability:
- beta: [traces, metrics, logs]
- distributions: [contrib, observiq]
- codeowners:
- active: [gramidt]
diff --git a/exporter/f5cloudexporter/testdata/config.yaml b/exporter/f5cloudexporter/testdata/config.yaml
deleted file mode 100644
index c89dbf147b7b..000000000000
--- a/exporter/f5cloudexporter/testdata/config.yaml
+++ /dev/null
@@ -1,23 +0,0 @@
-f5cloud:
- endpoint: "https://f5cloud"
- source: "dev"
- f5cloud_auth:
- credential_file: "/etc/creds/key.json"
-f5cloud/allsettings:
- endpoint: "https://f5cloud"
- source: "dev"
- f5cloud_auth:
- credential_file: "/etc/creds/key.json"
- audience: "exampleaudience"
- timeout: 10s
- read_buffer_size: 123
- write_buffer_size: 345
- sending_queue:
- enabled: true
- num_consumers: 2
- queue_size: 10
- retry_on_failure:
- enabled: true
- initial_interval: 10s
- max_interval: 60s
- max_elapsed_time: 10m
diff --git a/exporter/f5cloudexporter/testdata/empty_credential_file.json b/exporter/f5cloudexporter/testdata/empty_credential_file.json
deleted file mode 100644
index 9e26dfeeb6e6..000000000000
--- a/exporter/f5cloudexporter/testdata/empty_credential_file.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
\ No newline at end of file
diff --git a/exporter/fileexporter/README.md b/exporter/fileexporter/README.md
index c5cebb2ac942..fb4a31590eb5 100644
--- a/exporter/fileexporter/README.md
+++ b/exporter/fileexporter/README.md
@@ -4,17 +4,13 @@
| Status | |
| ------------- |-----------|
| Stability | [alpha]: traces, metrics, logs |
-| Distributions | [core], [contrib], [aws], [observiq], [splunk], [sumo] |
+| Distributions | [core], [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Ffile%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Ffile) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Ffile%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Ffile) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atingchen](https://www.github.com/atingchen) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
[core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[splunk]: https://github.com/signalfx/splunk-otel-collector
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
Exporter supports the following features:
@@ -25,9 +21,9 @@ Exporter supports the following features:
+ Support for compressing the telemetry data before exporting.
++ Support for writing into multiple files, where the file path is determined by a resource attribute.
Please note that there is no guarantee that exact field names will remain stable.
-This intended for primarily for debugging Collector without setting up backends.
The official [opentelemetry-collector-contrib container](https://hub.docker.com/r/otel/opentelemetry-collector-contrib/tags#!) does not have a writable filesystem by default since it's built on the `scratch` layer.
As such, you will need to create a writable directory for the path, potentially by mounting writable volumes or creating a custom image.
@@ -47,10 +43,17 @@ The following settings are optional:
- localtime : [default: false (use UTC)] whether or not the timestamps in backup files is formatted according to the host's local time.
- `format`[default: json]: define the data format of encoded telemetry data. The setting can be overridden with `proto`.
+- `encoding`[default: none]: if specified, uses an encoding extension to encode telemetry data. Overrides `format`.
+- `append`[default: `false`] defines whether append to the file (`true`) or truncate (`false`). If `append: true` is set then setting `rotation` or `compression` is currently not supported.
- `compression`[no default]: the compression algorithm used when exporting telemetry data to file. Supported compression algorithms:`zstd`
- `flush_interval`[default: 1s]: `time.Duration` interval between flushes. See [time.ParseDuration](https://pkg.go.dev/time#ParseDuration) for valid formats.
NOTE: a value without unit is in nanoseconds and `flush_interval` is ignored and writes are not buffered if `rotation` is set.
+- `group_by` enables writing to separate files based on a resource attribute.
+ - enabled: [default: false] enables group_by. When group_by is enabled, rotation setting is ignored.
+ - resource_attribute: [default: fileexporter.path_segment]: specifies the name of the resource attribute that contains the path segment of the file to write to. The final path will be the `path` config value, with the `*` replaced with the value of this resource attribute.
+ - max_open_files: [default: 100]: specifies the maximum number of open file descriptors for the output files.
+
## File Rotation
Telemetry data is exported to a single file by default.
`fileexporter` only enables file rotation when the user specifies `rotation:` in the config. However, if specified, related default settings would apply.
@@ -78,6 +81,15 @@ When `format` is json and `compression` is none , telemetry data is written to f
Otherwise, when using `proto` format or any kind of encoding, each encoded object is preceded by 4 bytes (an unsigned 32 bit integer) which represent the number of bytes contained in the encoded object.When we need read the messages back in, we read the size, then read the bytes into a separate buffer, then parse from that buffer.
+## Group by attribute
+
+By specifying `group_by.resource_attribute` in the config, the exporter will determine a filepath for each telemetry record, by substituting the value of the resource attribute into the `path` configuration value.
+
+The final path is guaranteed to start with the prefix part of the `path` config value (the part before the `*` character). For example if `path` is "/data/*.json", and the resource attribute value is "../etc/my_config", then the final path will be sanitized to "/data/etc/my_config.json".
+
+The final path can contain path separators (`/`). The exporter will create missing directories recursively (similarly to `mkdir -p`).
+
+Grouping by attribute currently only supports a **single** **resource** attribute. If you would like to use multiple attributes, please use [Transform processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/transformprocessor) create a routing key. If you would like to use a non-resource level (eg: Log/Metric/DataPoint) attribute, please use [Group by Attributes processor](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/groupbyattrsprocessor) first.
## Example:
diff --git a/exporter/fileexporter/config.go b/exporter/fileexporter/config.go
index 587055a9f274..bdd05dd278b5 100644
--- a/exporter/fileexporter/config.go
+++ b/exporter/fileexporter/config.go
@@ -5,6 +5,8 @@ package fileexporter // import "github.com/open-telemetry/opentelemetry-collecto
import (
"errors"
+ "fmt"
+ "strings"
"time"
"go.opentelemetry.io/collector/component"
@@ -22,7 +24,14 @@ type Config struct {
// Path of the file to write to. Path is relative to current directory.
Path string `mapstructure:"path"`
- // Rotation defines an option about rotation of telemetry files
+ // Mode defines whether the exporter should append to the file.
+ // Options:
+ // - false[default]: truncates the file
+ // - true: appends to the file.
+ Append bool `mapstructure:"append"`
+
+ // Rotation defines an option about rotation of telemetry files. Ignored
+ // when GroupByAttribute is used.
Rotation *Rotation `mapstructure:"rotation"`
// FormatType define the data format of encoded telemetry data
@@ -31,6 +40,10 @@ type Config struct {
// - proto: OTLP binary protobuf bytes.
FormatType string `mapstructure:"format"`
+ // Encoding defines the encoding of the telemetry data.
+ // If specified, it overrides `FormatType` and applies an encoding extension.
+ Encoding *component.ID `mapstructure:"encoding"`
+
// Compression Codec used to export telemetry data
// Supported compression algorithms:`zstd`
Compression string `mapstructure:"compression"`
@@ -38,6 +51,9 @@ type Config struct {
// FlushInterval is the duration between flushes.
// See time.ParseDuration for valid values.
FlushInterval time.Duration `mapstructure:"flush_interval"`
+
+ // GroupBy enables writing to separate files based on a resource attribute.
+ GroupBy *GroupBy `mapstructure:"group_by"`
}
// Rotation an option to rolling log files
@@ -63,6 +79,21 @@ type Rotation struct {
LocalTime bool `mapstructure:"localtime"`
}
+type GroupBy struct {
+ // Enables group_by. When group_by is enabled, rotation setting is ignored. Default is false.
+ Enabled bool `mapstructure:"enabled"`
+
+ // ResourceAttribute specifies the name of the resource attribute that
+ // contains the path segment of the file to write to. The final path will be
+ // the Path config value, with the * replaced with the value of this resource
+ // attribute. Default is "fileexporter.path_segment".
+ ResourceAttribute string `mapstructure:"resource_attribute"`
+
+ // MaxOpenFiles specifies the maximum number of open file descriptors for the output files.
+ // The default is 100.
+ MaxOpenFiles int `mapstructure:"max_open_files"`
+}
+
var _ component.Config = (*Config)(nil)
// Validate checks if the exporter configuration is valid
@@ -70,6 +101,12 @@ func (cfg *Config) Validate() error {
if cfg.Path == "" {
return errors.New("path must be non-empty")
}
+ if cfg.Append && cfg.Compression != "" {
+ return fmt.Errorf("append and compression enabled at the same time is not supported")
+ }
+ if cfg.Append && cfg.Rotation != nil {
+ return fmt.Errorf("append and rotation enabled at the same time is not supported")
+ }
if cfg.FormatType != formatTypeJSON && cfg.FormatType != formatTypeProto {
return errors.New("format type is not supported")
}
@@ -79,6 +116,22 @@ func (cfg *Config) Validate() error {
if cfg.FlushInterval < 0 {
return errors.New("flush_interval must be larger than zero")
}
+
+ if cfg.GroupBy != nil && cfg.GroupBy.Enabled {
+ pathParts := strings.Split(cfg.Path, "*")
+ if len(pathParts) != 2 {
+ return errors.New("path must contain exatcly one * when group_by is enabled")
+ }
+
+ if len(pathParts[0]) == 0 {
+ return errors.New("path must not start with * when group_by is enabled")
+ }
+
+ if cfg.GroupBy.ResourceAttribute == "" {
+ return errors.New("resource_attribute must not be empty when group_by is enabled")
+ }
+ }
+
return nil
}
@@ -88,7 +141,7 @@ func (cfg *Config) Unmarshal(componentParser *confmap.Conf) error {
return errors.New("empty config for file exporter")
}
// first load the config normally
- err := componentParser.Unmarshal(cfg, confmap.WithErrorUnused())
+ err := componentParser.Unmarshal(cfg)
if err != nil {
return err
}
diff --git a/exporter/fileexporter/config_test.go b/exporter/fileexporter/config_test.go
index c2bfdb17822b..2e588047406e 100644
--- a/exporter/fileexporter/config_test.go
+++ b/exporter/fileexporter/config_test.go
@@ -39,6 +39,10 @@ func TestLoadConfig(t *testing.T) {
},
FormatType: formatTypeJSON,
FlushInterval: time.Second,
+ GroupBy: &GroupBy{
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
},
},
{
@@ -54,6 +58,10 @@ func TestLoadConfig(t *testing.T) {
FormatType: formatTypeProto,
Compression: compressionZSTD,
FlushInterval: time.Second,
+ GroupBy: &GroupBy{
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
},
},
{
@@ -65,6 +73,10 @@ func TestLoadConfig(t *testing.T) {
MaxBackups: defaultMaxBackups,
},
FlushInterval: time.Second,
+ GroupBy: &GroupBy{
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
},
},
{
@@ -77,6 +89,10 @@ func TestLoadConfig(t *testing.T) {
},
FormatType: formatTypeJSON,
FlushInterval: time.Second,
+ GroupBy: &GroupBy{
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
},
},
{
@@ -93,6 +109,10 @@ func TestLoadConfig(t *testing.T) {
Path: "./flushed",
FlushInterval: 5,
FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
},
},
{
@@ -101,6 +121,10 @@ func TestLoadConfig(t *testing.T) {
Path: "./flushed",
FlushInterval: 5 * time.Second,
FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
},
},
{
@@ -109,6 +133,10 @@ func TestLoadConfig(t *testing.T) {
Path: "./flushed",
FlushInterval: 500 * time.Millisecond,
FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
},
},
{
@@ -119,6 +147,44 @@ func TestLoadConfig(t *testing.T) {
id: component.NewIDWithName(metadata.Type, ""),
errorMessage: "path must be non-empty",
},
+ {
+ id: component.NewIDWithName(metadata.Type, "group_by"),
+ expected: &Config{
+ Path: "./group_by/*.json",
+ FlushInterval: time.Second,
+ FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ Enabled: true,
+ MaxOpenFiles: 10,
+ ResourceAttribute: "dummy",
+ },
+ },
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "group_by_defaults"),
+ expected: &Config{
+ Path: "./group_by/*.json",
+ FlushInterval: time.Second,
+ FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ Enabled: true,
+ MaxOpenFiles: defaultMaxOpenFiles,
+ ResourceAttribute: defaultResourceAttribute,
+ },
+ },
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "group_by_invalid_path"),
+ errorMessage: "path must contain exatcly one * when group_by is enabled",
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "group_by_invalid_path2"),
+ errorMessage: "path must not start with * when group_by is enabled",
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "group_by_empty_resource_attribute"),
+ errorMessage: "resource_attribute must not be empty when group_by is enabled",
+ },
}
for _, tt := range tests {
diff --git a/exporter/fileexporter/encoding_test.go b/exporter/fileexporter/encoding_test.go
new file mode 100644
index 000000000000..fbcf35415879
--- /dev/null
+++ b/exporter/fileexporter/encoding_test.go
@@ -0,0 +1,120 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package fileexporter
+
+import (
+ "context"
+ "os"
+ "path/filepath"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/extension/extensiontest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension"
+)
+
+type hostWithEncoding struct {
+ encodings map[component.ID]component.Component
+}
+
+func (h hostWithEncoding) GetFactory(_ component.Kind, _ component.Type) component.Factory {
+ panic("unsupported")
+}
+
+func (h hostWithEncoding) GetExtensions() map[component.ID]component.Component {
+ return h.encodings
+}
+
+func (h hostWithEncoding) GetExporters() map[component.DataType]map[component.ID]component.Component {
+ panic("unsupported")
+}
+
+func TestEncoding(t *testing.T) {
+ f := NewFactory()
+ cfg := f.CreateDefaultConfig().(*Config)
+ cfg.Path = filepath.Join(t.TempDir(), "encoding.txt")
+ id := component.MustNewID("otlpjson")
+ cfg.Encoding = &id
+
+ ef := otlpencodingextension.NewFactory()
+ efCfg := ef.CreateDefaultConfig().(*otlpencodingextension.Config)
+ efCfg.Protocol = "otlp_json"
+ ext, err := ef.CreateExtension(context.Background(), extensiontest.NewNopCreateSettings(), efCfg)
+ require.NoError(t, err)
+ require.NoError(t, ext.Start(context.Background(), componenttest.NewNopHost()))
+
+ me, err := f.CreateMetricsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ te, err := f.CreateTracesExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ le, err := f.CreateLogsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := hostWithEncoding{
+ map[component.ID]component.Component{id: ext},
+ }
+ require.NoError(t, me.Start(context.Background(), host))
+ require.NoError(t, te.Start(context.Background(), host))
+ require.NoError(t, le.Start(context.Background(), host))
+ t.Cleanup(func() {
+
+ })
+
+ require.NoError(t, me.ConsumeMetrics(context.Background(), generateMetrics()))
+ require.NoError(t, te.ConsumeTraces(context.Background(), generateTraces()))
+ require.NoError(t, le.ConsumeLogs(context.Background(), generateLogs()))
+
+ require.NoError(t, me.Shutdown(context.Background()))
+ require.NoError(t, te.Shutdown(context.Background()))
+ require.NoError(t, le.Shutdown(context.Background()))
+
+ b, err := os.ReadFile(cfg.Path)
+ require.NoError(t, err)
+ require.Contains(t, string(b), `{"resourceMetrics":`)
+ require.Contains(t, string(b), `{"resourceSpans":`)
+ require.Contains(t, string(b), `{"resourceLogs":`)
+}
+
+func generateLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/fileexporter/factory.go b/exporter/fileexporter/factory.go
index 246a61f5f00f..6c05220697bf 100644
--- a/exporter/fileexporter/factory.go
+++ b/exporter/fileexporter/factory.go
@@ -7,11 +7,16 @@ import (
"context"
"io"
"os"
+ "time"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "go.uber.org/zap"
"gopkg.in/natefinch/lumberjack.v2"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter/internal/metadata"
@@ -28,8 +33,19 @@ const (
// the type of compression codec
compressionZSTD = "zstd"
+
+ defaultMaxOpenFiles = 100
+
+ defaultResourceAttribute = "fileexporter.path_segment"
)
+type FileExporter interface {
+ component.Component
+ consumeTraces(_ context.Context, td ptrace.Traces) error
+ consumeMetrics(_ context.Context, md pmetric.Metrics) error
+ consumeLogs(_ context.Context, ld plog.Logs) error
+}
+
// NewFactory creates a factory for OTLP exporter.
func NewFactory() exporter.Factory {
return exporter.NewFactory(
@@ -44,6 +60,10 @@ func createDefaultConfig() component.Config {
return &Config{
FormatType: formatTypeJSON,
Rotation: &Rotation{MaxBackups: defaultMaxBackups},
+ GroupBy: &GroupBy{
+ ResourceAttribute: defaultResourceAttribute,
+ MaxOpenFiles: defaultMaxOpenFiles,
+ },
}
}
@@ -52,19 +72,12 @@ func createTracesExporter(
set exporter.CreateSettings,
cfg component.Config,
) (exporter.Traces, error) {
- conf := cfg.(*Config)
- writer, err := buildFileWriter(conf)
- if err != nil {
- return nil, err
- }
- fe := exporters.GetOrAdd(cfg, func() component.Component {
- return newFileExporter(conf, writer)
- })
+ fe := getOrCreateFileExporter(cfg, set.Logger)
return exporterhelper.NewTracesExporter(
ctx,
set,
cfg,
- fe.Unwrap().(*fileExporter).consumeTraces,
+ fe.consumeTraces,
exporterhelper.WithStart(fe.Start),
exporterhelper.WithShutdown(fe.Shutdown),
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
@@ -76,19 +89,12 @@ func createMetricsExporter(
set exporter.CreateSettings,
cfg component.Config,
) (exporter.Metrics, error) {
- conf := cfg.(*Config)
- writer, err := buildFileWriter(conf)
- if err != nil {
- return nil, err
- }
- fe := exporters.GetOrAdd(cfg, func() component.Component {
- return newFileExporter(conf, writer)
- })
+ fe := getOrCreateFileExporter(cfg, set.Logger)
return exporterhelper.NewMetricsExporter(
ctx,
set,
cfg,
- fe.Unwrap().(*fileExporter).consumeMetrics,
+ fe.consumeMetrics,
exporterhelper.WithStart(fe.Start),
exporterhelper.WithShutdown(fe.Shutdown),
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
@@ -100,59 +106,80 @@ func createLogsExporter(
set exporter.CreateSettings,
cfg component.Config,
) (exporter.Logs, error) {
- conf := cfg.(*Config)
- writer, err := buildFileWriter(conf)
- if err != nil {
- return nil, err
- }
- fe := exporters.GetOrAdd(cfg, func() component.Component {
- return newFileExporter(conf, writer)
- })
+ fe := getOrCreateFileExporter(cfg, set.Logger)
return exporterhelper.NewLogsExporter(
ctx,
set,
cfg,
- fe.Unwrap().(*fileExporter).consumeLogs,
+ fe.consumeLogs,
exporterhelper.WithStart(fe.Start),
exporterhelper.WithShutdown(fe.Shutdown),
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
)
}
-func newFileExporter(conf *Config, writer io.WriteCloser) *fileExporter {
- return &fileExporter{
- path: conf.Path,
- formatType: conf.FormatType,
- file: writer,
- tracesMarshaler: tracesMarshalers[conf.FormatType],
- metricsMarshaler: metricsMarshalers[conf.FormatType],
- logsMarshaler: logsMarshalers[conf.FormatType],
- exporter: buildExportFunc(conf),
- compression: conf.Compression,
- compressor: buildCompressor(conf.Compression),
- flushInterval: conf.FlushInterval,
+// getOrCreateFileExporter creates a FileExporter and caches it for a particular configuration,
+// or returns the already cached one. Caching is required because the factory is asked trace and
+// metric receivers separately when it gets CreateTracesReceiver() and CreateMetricsReceiver()
+// but they must not create separate objects, they must use one Exporter object per configuration.
+func getOrCreateFileExporter(cfg component.Config, logger *zap.Logger) FileExporter {
+ conf := cfg.(*Config)
+ fe := exporters.GetOrAdd(cfg, func() component.Component {
+ return newFileExporter(conf, logger)
+ })
+
+ c := fe.Unwrap()
+ return c.(FileExporter)
+}
+
+func newFileExporter(conf *Config, logger *zap.Logger) FileExporter {
+ if conf.GroupBy == nil || !conf.GroupBy.Enabled {
+ return &fileExporter{
+ conf: conf,
+ }
+ }
+
+ return &groupingFileExporter{
+ conf: conf,
+ logger: logger,
}
+
}
-func buildFileWriter(cfg *Config) (io.WriteCloser, error) {
- if cfg.Rotation == nil {
- f, err := os.OpenFile(cfg.Path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
+func newFileWriter(path string, shouldAppend bool, rotation *Rotation, flushInterval time.Duration, export exportFunc) (*fileWriter, error) {
+ var wc io.WriteCloser
+ if rotation == nil {
+ fileFlags := os.O_RDWR | os.O_CREATE
+ if shouldAppend {
+ fileFlags |= os.O_APPEND
+ } else {
+ fileFlags |= os.O_TRUNC
+ }
+ f, err := os.OpenFile(path, fileFlags, 0644)
if err != nil {
return nil, err
}
- return newBufferedWriteCloser(f), nil
+ wc = newBufferedWriteCloser(f)
+ } else {
+ wc = &lumberjack.Logger{
+ Filename: path,
+ MaxSize: rotation.MaxMegabytes,
+ MaxAge: rotation.MaxDays,
+ MaxBackups: rotation.MaxBackups,
+ LocalTime: rotation.LocalTime,
+ }
}
- return &lumberjack.Logger{
- Filename: cfg.Path,
- MaxSize: cfg.Rotation.MaxMegabytes,
- MaxAge: cfg.Rotation.MaxDays,
- MaxBackups: cfg.Rotation.MaxBackups,
- LocalTime: cfg.Rotation.LocalTime,
+
+ return &fileWriter{
+ path: path,
+ file: wc,
+ exporter: export,
+ flushInterval: flushInterval,
}, nil
}
// This is the map of already created File exporters for particular configurations.
// We maintain this map because the Factory is asked trace and metric receivers separately
// when it gets CreateTracesReceiver() and CreateMetricsReceiver() but they must not
-// create separate objects, they must use one Receiver object per configuration.
+// create separate objects, they must use one Exporter object per configuration.
var exporters = sharedcomponent.NewSharedComponents()
diff --git a/exporter/fileexporter/factory_test.go b/exporter/fileexporter/factory_test.go
index dfc6712c8a02..950bd4cce82c 100644
--- a/exporter/fileexporter/factory_test.go
+++ b/exporter/fileexporter/factory_test.go
@@ -7,6 +7,7 @@ import (
"context"
"io"
"testing"
+ "time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -25,10 +26,12 @@ func TestCreateMetricsExporterError(t *testing.T) {
cfg := &Config{
FormatType: formatTypeJSON,
}
- _, err := createMetricsExporter(
+ e, err := createMetricsExporter(
context.Background(),
exportertest.NewNopCreateSettings(),
cfg)
+ require.NoError(t, err)
+ err = e.Start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
}
@@ -43,6 +46,7 @@ func TestCreateMetricsExporter(t *testing.T) {
cfg)
assert.NoError(t, err)
require.NotNil(t, exp)
+ assert.NoError(t, exp.Shutdown(context.Background()))
}
func TestCreateTracesExporter(t *testing.T) {
@@ -56,16 +60,19 @@ func TestCreateTracesExporter(t *testing.T) {
cfg)
assert.NoError(t, err)
require.NotNil(t, exp)
+ assert.NoError(t, exp.Shutdown(context.Background()))
}
func TestCreateTracesExporterError(t *testing.T) {
cfg := &Config{
FormatType: formatTypeJSON,
}
- _, err := createTracesExporter(
+ e, err := createTracesExporter(
context.Background(),
exportertest.NewNopCreateSettings(),
cfg)
+ require.NoError(t, err)
+ err = e.Start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
}
@@ -80,20 +87,23 @@ func TestCreateLogsExporter(t *testing.T) {
cfg)
assert.NoError(t, err)
require.NotNil(t, exp)
+ assert.NoError(t, exp.Shutdown(context.Background()))
}
func TestCreateLogsExporterError(t *testing.T) {
cfg := &Config{
FormatType: formatTypeJSON,
}
- _, err := createLogsExporter(
+ e, err := createLogsExporter(
context.Background(),
exportertest.NewNopCreateSettings(),
cfg)
+ require.NoError(t, err)
+ err = e.Start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
}
-func TestBuildFileWriter(t *testing.T) {
+func TestNewFileWriter(t *testing.T) {
type args struct {
cfg *Config
}
@@ -101,17 +111,19 @@ func TestBuildFileWriter(t *testing.T) {
name string
args args
want io.WriteCloser
- validate func(*testing.T, io.WriteCloser)
+ validate func(*testing.T, *fileWriter)
}{
{
name: "single file",
args: args{
cfg: &Config{
- Path: tempFileName(t),
+ Path: tempFileName(t),
+ FlushInterval: 5 * time.Second,
},
},
- validate: func(t *testing.T, closer io.WriteCloser) {
- _, ok := closer.(*bufferedWriteCloser)
+ validate: func(t *testing.T, writer *fileWriter) {
+ assert.Equal(t, 5*time.Second, writer.flushInterval)
+ _, ok := writer.file.(*bufferedWriteCloser)
assert.Equal(t, true, ok)
},
},
@@ -125,10 +137,10 @@ func TestBuildFileWriter(t *testing.T) {
},
},
},
- validate: func(t *testing.T, closer io.WriteCloser) {
- writer, ok := closer.(*lumberjack.Logger)
+ validate: func(t *testing.T, writer *fileWriter) {
+ logger, ok := writer.file.(*lumberjack.Logger)
assert.Equal(t, true, ok)
- assert.Equal(t, defaultMaxBackups, writer.MaxBackups)
+ assert.Equal(t, defaultMaxBackups, logger.MaxBackups)
},
},
{
@@ -144,19 +156,22 @@ func TestBuildFileWriter(t *testing.T) {
},
},
},
- validate: func(t *testing.T, closer io.WriteCloser) {
- writer, ok := closer.(*lumberjack.Logger)
+ validate: func(t *testing.T, writer *fileWriter) {
+ logger, ok := writer.file.(*lumberjack.Logger)
assert.Equal(t, true, ok)
- assert.Equal(t, 3, writer.MaxBackups)
- assert.Equal(t, 30, writer.MaxSize)
- assert.Equal(t, 100, writer.MaxAge)
- assert.Equal(t, true, writer.LocalTime)
+ assert.Equal(t, 3, logger.MaxBackups)
+ assert.Equal(t, 30, logger.MaxSize)
+ assert.Equal(t, 100, logger.MaxAge)
+ assert.Equal(t, true, logger.LocalTime)
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- got, err := buildFileWriter(tt.args.cfg)
+ got, err := newFileWriter(tt.args.cfg.Path, tt.args.cfg.Append, tt.args.cfg.Rotation, tt.args.cfg.FlushInterval, nil)
+ defer func() {
+ assert.NoError(t, got.file.Close())
+ }()
assert.NoError(t, err)
tt.validate(t, got)
})
diff --git a/exporter/fileexporter/file_exporter.go b/exporter/fileexporter/file_exporter.go
index 2765fb3787dd..c7a090f28c6c 100644
--- a/exporter/fileexporter/file_exporter.go
+++ b/exporter/fileexporter/file_exporter.go
@@ -5,10 +5,6 @@ package fileexporter // import "github.com/open-telemetry/opentelemetry-collecto
import (
"context"
- "encoding/binary"
- "io"
- "sync"
- "time"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/pdata/plog"
@@ -16,154 +12,61 @@ import (
"go.opentelemetry.io/collector/pdata/ptrace"
)
-// Marshaler configuration used for marhsaling Protobuf
-var tracesMarshalers = map[string]ptrace.Marshaler{
- formatTypeJSON: &ptrace.JSONMarshaler{},
- formatTypeProto: &ptrace.ProtoMarshaler{},
-}
-var metricsMarshalers = map[string]pmetric.Marshaler{
- formatTypeJSON: &pmetric.JSONMarshaler{},
- formatTypeProto: &pmetric.ProtoMarshaler{},
-}
-var logsMarshalers = map[string]plog.Marshaler{
- formatTypeJSON: &plog.JSONMarshaler{},
- formatTypeProto: &plog.ProtoMarshaler{},
-}
-
-// exportFunc defines how to export encoded telemetry data.
-type exportFunc func(e *fileExporter, buf []byte) error
-
// fileExporter is the implementation of file exporter that writes telemetry data to a file
type fileExporter struct {
- path string
- file io.WriteCloser
- mutex sync.Mutex
-
- tracesMarshaler ptrace.Marshaler
- metricsMarshaler pmetric.Marshaler
- logsMarshaler plog.Marshaler
-
- compression string
- compressor compressFunc
-
- formatType string
- exporter exportFunc
-
- flushInterval time.Duration
- flushTicker *time.Ticker
- stopTicker chan struct{}
+ conf *Config
+ marshaller *marshaller
+ writer *fileWriter
}
func (e *fileExporter) consumeTraces(_ context.Context, td ptrace.Traces) error {
- buf, err := e.tracesMarshaler.MarshalTraces(td)
+ buf, err := e.marshaller.marshalTraces(td)
if err != nil {
return err
}
- buf = e.compressor(buf)
- return e.exporter(e, buf)
+ return e.writer.export(buf)
}
func (e *fileExporter) consumeMetrics(_ context.Context, md pmetric.Metrics) error {
- buf, err := e.metricsMarshaler.MarshalMetrics(md)
+ buf, err := e.marshaller.marshalMetrics(md)
if err != nil {
return err
}
- buf = e.compressor(buf)
- return e.exporter(e, buf)
+ return e.writer.export(buf)
}
func (e *fileExporter) consumeLogs(_ context.Context, ld plog.Logs) error {
- buf, err := e.logsMarshaler.MarshalLogs(ld)
+ buf, err := e.marshaller.marshalLogs(ld)
if err != nil {
return err
}
- buf = e.compressor(buf)
- return e.exporter(e, buf)
+ return e.writer.export(buf)
}
-func exportMessageAsLine(e *fileExporter, buf []byte) error {
- // Ensure only one write operation happens at a time.
- e.mutex.Lock()
- defer e.mutex.Unlock()
- if _, err := e.file.Write(buf); err != nil {
- return err
- }
- if _, err := io.WriteString(e.file, "\n"); err != nil {
+// Start starts the flush timer if set.
+func (e *fileExporter) Start(_ context.Context, host component.Host) error {
+ var err error
+ e.marshaller, err = newMarshaller(e.conf, host)
+ if err != nil {
return err
}
- return nil
-}
+ export := buildExportFunc(e.conf)
-func exportMessageAsBuffer(e *fileExporter, buf []byte) error {
- // Ensure only one write operation happens at a time.
- e.mutex.Lock()
- defer e.mutex.Unlock()
- // write the size of each message before writing the message itself. https://developers.google.com/protocol-buffers/docs/techniques
- // each encoded object is preceded by 4 bytes (an unsigned 32 bit integer)
- data := make([]byte, 4, 4+len(buf))
- binary.BigEndian.PutUint32(data, uint32(len(buf)))
-
- return binary.Write(e.file, binary.BigEndian, append(data, buf...))
-}
-
-// startFlusher starts the flusher.
-// It does not check the flushInterval
-func (e *fileExporter) startFlusher() {
- e.mutex.Lock()
- defer e.mutex.Unlock()
- ff, ok := e.file.(interface{ flush() error })
- if !ok {
- // Just in case.
- return
- }
-
- // Create the stop channel.
- e.stopTicker = make(chan struct{})
- // Start the ticker.
- e.flushTicker = time.NewTicker(e.flushInterval)
- go func() {
- for {
- select {
- case <-e.flushTicker.C:
- e.mutex.Lock()
- ff.flush()
- e.mutex.Unlock()
- case <-e.stopTicker:
- return
- }
- }
- }()
-}
-
-// Start starts the flush timer if set.
-func (e *fileExporter) Start(context.Context, component.Host) error {
- if e.flushInterval > 0 {
- e.startFlusher()
+ e.writer, err = newFileWriter(e.conf.Path, e.conf.Append, e.conf.Rotation, e.conf.FlushInterval, export)
+ if err != nil {
+ return err
}
+ e.writer.start()
return nil
}
// Shutdown stops the exporter and is invoked during shutdown.
// It stops the flush ticker if set.
func (e *fileExporter) Shutdown(context.Context) error {
- e.mutex.Lock()
- defer e.mutex.Unlock()
- // Stop the flush ticker.
- if e.flushTicker != nil {
- e.flushTicker.Stop()
- // Stop the go routine.
- close(e.stopTicker)
- }
- return e.file.Close()
-}
-
-func buildExportFunc(cfg *Config) func(e *fileExporter, buf []byte) error {
- if cfg.FormatType == formatTypeProto {
- return exportMessageAsBuffer
- }
- // if the data format is JSON and needs to be compressed, telemetry data can't be written to file in JSON format.
- if cfg.FormatType == formatTypeJSON && cfg.Compression != "" {
- return exportMessageAsBuffer
+ if e.writer == nil {
+ return nil
}
- return exportMessageAsLine
+ w := e.writer
+ e.writer = nil
+ return w.shutdown()
}
diff --git a/exporter/fileexporter/file_exporter_test.go b/exporter/fileexporter/file_exporter_test.go
index 2b076ec18f23..cefc5747f775 100644
--- a/exporter/fileexporter/file_exporter_test.go
+++ b/exporter/fileexporter/file_exporter_test.go
@@ -10,6 +10,8 @@ import (
"errors"
"io"
"os"
+ "path/filepath"
+ "slices"
"sync"
"testing"
"time"
@@ -21,6 +23,7 @@ import (
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
+ "go.uber.org/zap"
"gopkg.in/natefinch/lumberjack.v2"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
@@ -125,33 +128,25 @@ func TestFileTracesExporter(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
conf := tt.args.conf
- writer, err := buildFileWriter(conf)
- assert.NoError(t, err)
- fe := &fileExporter{
- path: conf.Path,
- formatType: conf.FormatType,
- file: writer,
- tracesMarshaler: tracesMarshalers[conf.FormatType],
- exporter: buildExportFunc(conf),
- compression: conf.Compression,
- compressor: buildCompressor(conf.Compression),
- flushInterval: conf.FlushInterval,
- }
- require.NotNil(t, fe)
+ feI := newFileExporter(conf, zap.NewNop())
+ require.IsType(t, &fileExporter{}, feI)
+ fe := feI.(*fileExporter)
td := testdata.GenerateTracesTwoSpansSameResource()
assert.NoError(t, fe.Start(context.Background(), componenttest.NewNopHost()))
assert.NoError(t, fe.consumeTraces(context.Background(), td))
assert.NoError(t, fe.consumeTraces(context.Background(), td))
- assert.NoError(t, fe.Shutdown(context.Background()))
+ defer func() {
+ assert.NoError(t, fe.Shutdown(context.Background()))
+ }()
- fi, err := os.Open(fe.path)
+ fi, err := os.Open(fe.writer.path)
assert.NoError(t, err)
defer fi.Close()
br := bufio.NewReader(fi)
for {
buf, isEnd, err := func() ([]byte, bool, error) {
- if fe.formatType == formatTypeJSON && fe.compression == "" {
+ if fe.marshaller.formatType == formatTypeJSON && fe.marshaller.compression == "" {
return readJSONMessage(br)
}
return readMessageFromStream(br)
@@ -160,7 +155,7 @@ func TestFileTracesExporter(t *testing.T) {
if isEnd {
break
}
- decoder := buildUnCompressor(fe.compression)
+ decoder := buildUnCompressor(fe.marshaller.compression)
buf, err = decoder(buf)
assert.NoError(t, err)
got, err := tt.args.unmarshaler.UnmarshalTraces(buf)
@@ -174,11 +169,15 @@ func TestFileTracesExporter(t *testing.T) {
func TestFileTracesExporterError(t *testing.T) {
mf := &errorWriter{}
fe := &fileExporter{
- file: mf,
- formatType: formatTypeJSON,
- exporter: exportMessageAsLine,
- tracesMarshaler: tracesMarshalers[formatTypeJSON],
- compressor: noneCompress,
+ marshaller: &marshaller{
+ formatType: formatTypeJSON,
+ tracesMarshaler: tracesMarshalers[formatTypeJSON],
+ compressor: noneCompress,
+ },
+ writer: &fileWriter{
+ file: mf,
+ exporter: exportMessageAsLine,
+ },
}
require.NotNil(t, fe)
@@ -260,17 +259,8 @@ func TestFileMetricsExporter(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
conf := tt.args.conf
- writer, err := buildFileWriter(conf)
- assert.NoError(t, err)
fe := &fileExporter{
- path: conf.Path,
- formatType: conf.FormatType,
- file: writer,
- metricsMarshaler: metricsMarshalers[conf.FormatType],
- exporter: buildExportFunc(conf),
- compression: conf.Compression,
- compressor: buildCompressor(conf.Compression),
- flushInterval: conf.FlushInterval,
+ conf: conf,
}
require.NotNil(t, fe)
@@ -278,16 +268,18 @@ func TestFileMetricsExporter(t *testing.T) {
assert.NoError(t, fe.Start(context.Background(), componenttest.NewNopHost()))
assert.NoError(t, fe.consumeMetrics(context.Background(), md))
assert.NoError(t, fe.consumeMetrics(context.Background(), md))
- assert.NoError(t, fe.Shutdown(context.Background()))
+ defer func() {
+ assert.NoError(t, fe.Shutdown(context.Background()))
+ }()
- fi, err := os.Open(fe.path)
+ fi, err := os.Open(fe.writer.path)
assert.NoError(t, err)
defer fi.Close()
br := bufio.NewReader(fi)
for {
buf, isEnd, err := func() ([]byte, bool, error) {
- if fe.formatType == formatTypeJSON &&
- fe.compression == "" {
+ if fe.marshaller.formatType == formatTypeJSON &&
+ fe.marshaller.compression == "" {
return readJSONMessage(br)
}
return readMessageFromStream(br)
@@ -296,7 +288,7 @@ func TestFileMetricsExporter(t *testing.T) {
if isEnd {
break
}
- decoder := buildUnCompressor(fe.compression)
+ decoder := buildUnCompressor(fe.marshaller.compression)
buf, err = decoder(buf)
assert.NoError(t, err)
got, err := tt.args.unmarshaler.UnmarshalMetrics(buf)
@@ -311,11 +303,15 @@ func TestFileMetricsExporter(t *testing.T) {
func TestFileMetricsExporterError(t *testing.T) {
mf := &errorWriter{}
fe := &fileExporter{
- file: mf,
- formatType: formatTypeJSON,
- exporter: exportMessageAsLine,
- metricsMarshaler: metricsMarshalers[formatTypeJSON],
- compressor: noneCompress,
+ marshaller: &marshaller{
+ formatType: formatTypeJSON,
+ metricsMarshaler: metricsMarshalers[formatTypeJSON],
+ compressor: noneCompress,
+ },
+ writer: &fileWriter{
+ file: mf,
+ exporter: exportMessageAsLine,
+ },
}
require.NotNil(t, fe)
@@ -397,17 +393,8 @@ func TestFileLogsExporter(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
conf := tt.args.conf
- writer, err := buildFileWriter(conf)
- assert.NoError(t, err)
fe := &fileExporter{
- path: conf.Path,
- formatType: conf.FormatType,
- file: writer,
- logsMarshaler: logsMarshalers[conf.FormatType],
- exporter: buildExportFunc(conf),
- compression: conf.Compression,
- compressor: buildCompressor(conf.Compression),
- flushInterval: conf.FlushInterval,
+ conf: conf,
}
require.NotNil(t, fe)
@@ -415,15 +402,17 @@ func TestFileLogsExporter(t *testing.T) {
assert.NoError(t, fe.Start(context.Background(), componenttest.NewNopHost()))
assert.NoError(t, fe.consumeLogs(context.Background(), ld))
assert.NoError(t, fe.consumeLogs(context.Background(), ld))
- assert.NoError(t, fe.Shutdown(context.Background()))
+ defer func() {
+ assert.NoError(t, fe.Shutdown(context.Background()))
+ }()
- fi, err := os.Open(fe.path)
+ fi, err := os.Open(fe.writer.path)
assert.NoError(t, err)
defer fi.Close()
br := bufio.NewReader(fi)
for {
buf, isEnd, err := func() ([]byte, bool, error) {
- if fe.formatType == formatTypeJSON && fe.compression == "" {
+ if fe.marshaller.formatType == formatTypeJSON && fe.marshaller.compression == "" {
return readJSONMessage(br)
}
return readMessageFromStream(br)
@@ -432,7 +421,7 @@ func TestFileLogsExporter(t *testing.T) {
if isEnd {
break
}
- decoder := buildUnCompressor(fe.compression)
+ decoder := buildUnCompressor(fe.marshaller.compression)
buf, err = decoder(buf)
assert.NoError(t, err)
got, err := tt.args.unmarshaler.UnmarshalLogs(buf)
@@ -446,11 +435,15 @@ func TestFileLogsExporter(t *testing.T) {
func TestFileLogsExporterErrors(t *testing.T) {
mf := &errorWriter{}
fe := &fileExporter{
- file: mf,
- formatType: formatTypeJSON,
- exporter: exportMessageAsLine,
- logsMarshaler: logsMarshalers[formatTypeJSON],
- compressor: noneCompress,
+ marshaller: &marshaller{
+ formatType: formatTypeJSON,
+ logsMarshaler: logsMarshalers[formatTypeJSON],
+ compressor: noneCompress,
+ },
+ writer: &fileWriter{
+ file: mf,
+ exporter: exportMessageAsLine,
+ },
}
require.NotNil(t, fe)
@@ -463,14 +456,18 @@ func TestFileLogsExporterErrors(t *testing.T) {
func TestExportMessageAsBuffer(t *testing.T) {
path := tempFileName(t)
fe := &fileExporter{
- path: path,
- formatType: formatTypeProto,
- file: &lumberjack.Logger{
- Filename: path,
- MaxSize: 1,
+ marshaller: &marshaller{
+ formatType: formatTypeProto,
+ logsMarshaler: logsMarshalers[formatTypeProto],
+ },
+ writer: &fileWriter{
+ path: path,
+ file: &lumberjack.Logger{
+ Filename: path,
+ MaxSize: 1,
+ },
+ exporter: exportMessageAsBuffer,
},
- logsMarshaler: logsMarshalers[formatTypeProto],
- exporter: exportMessageAsBuffer,
}
require.NotNil(t, fe)
//
@@ -478,18 +475,13 @@ func TestExportMessageAsBuffer(t *testing.T) {
marshaler := &plog.ProtoMarshaler{}
buf, err := marshaler.MarshalLogs(ld)
assert.NoError(t, err)
- assert.Error(t, exportMessageAsBuffer(fe, buf))
+ assert.Error(t, exportMessageAsBuffer(fe.writer, buf))
assert.NoError(t, fe.Shutdown(context.Background()))
}
// tempFileName provides a temporary file name for testing.
-func tempFileName(t *testing.T) string {
- tmpfile, err := os.CreateTemp("", "*")
- require.NoError(t, err)
- require.NoError(t, tmpfile.Close())
- socket := tmpfile.Name()
- require.NoError(t, os.Remove(socket))
- return socket
+func tempFileName(t testing.TB) string {
+ return filepath.Join(t.TempDir(), "fileexporter_test.tmp")
}
// errorWriter is an io.Writer that will return an error all ways
@@ -625,14 +617,14 @@ func (b *tsBuffer) Bytes() []byte {
}
func safeFileExporterWrite(e *fileExporter, d []byte) (int, error) {
- e.mutex.Lock()
- defer e.mutex.Unlock()
- return e.file.Write(d)
+ e.writer.mutex.Lock()
+ defer e.writer.mutex.Unlock()
+ return e.writer.file.Write(d)
}
func TestFlushing(t *testing.T) {
cfg := &Config{
- Path: "",
+ Path: tempFileName(t),
FlushInterval: time.Second,
}
@@ -642,11 +634,28 @@ func TestFlushing(t *testing.T) {
// Wrap the buffer with the buffered writer closer that implements flush() method.
bwc := newBufferedWriteCloser(buf)
// Create a file exporter with flushing enabled.
- fe := newFileExporter(cfg, bwc)
+ feI := newFileExporter(cfg, zap.NewNop())
+ assert.IsType(t, &fileExporter{}, feI)
+ fe := feI.(*fileExporter)
// Start the flusher.
ctx := context.Background()
- assert.NoError(t, fe.Start(ctx, nil))
+ fe.marshaller = &marshaller{
+ formatType: fe.conf.FormatType,
+ tracesMarshaler: tracesMarshalers[fe.conf.FormatType],
+ metricsMarshaler: metricsMarshalers[fe.conf.FormatType],
+ logsMarshaler: logsMarshalers[fe.conf.FormatType],
+ compression: fe.conf.Compression,
+ compressor: buildCompressor(fe.conf.Compression),
+ }
+ export := buildExportFunc(fe.conf)
+ var err error
+ fe.writer, err = newFileWriter(fe.conf.Path, fe.conf.Append, fe.conf.Rotation, fe.conf.FlushInterval, export)
+ assert.NoError(t, err)
+ err = fe.writer.file.Close()
+ assert.NoError(t, err)
+ fe.writer.file = bwc
+ fe.writer.start()
// Write 10 bytes.
b := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
@@ -666,3 +675,86 @@ func TestFlushing(t *testing.T) {
assert.EqualValues(t, b, bbuf.Bytes())
assert.NoError(t, fe.Shutdown(ctx))
}
+
+func TestAppend(t *testing.T) {
+ cfg := &Config{
+ Path: tempFileName(t),
+ FlushInterval: time.Second,
+ Append: true,
+ }
+
+ // Create a buffer to capture the output.
+ bbuf := &tsBuffer{b: &bytes.Buffer{}}
+ buf := &NopWriteCloser{bbuf}
+ // Wrap the buffer with the buffered writer closer that implements flush() method.
+ bwc := newBufferedWriteCloser(buf)
+ // Create a file exporter with flushing enabled.
+ feI := newFileExporter(cfg, zap.NewNop())
+ assert.IsType(t, &fileExporter{}, feI)
+ fe := feI.(*fileExporter)
+
+ // Start the flusher.
+ ctx := context.Background()
+ fe.marshaller = &marshaller{
+ formatType: fe.conf.FormatType,
+ tracesMarshaler: tracesMarshalers[fe.conf.FormatType],
+ metricsMarshaler: metricsMarshalers[fe.conf.FormatType],
+ logsMarshaler: logsMarshalers[fe.conf.FormatType],
+ compression: fe.conf.Compression,
+ compressor: buildCompressor(fe.conf.Compression),
+ }
+ export := buildExportFunc(fe.conf)
+ var err error
+ fe.writer, err = newFileWriter(fe.conf.Path, fe.conf.Append, fe.conf.Rotation, fe.conf.FlushInterval, export)
+ assert.NoError(t, err)
+ err = fe.writer.file.Close()
+ assert.NoError(t, err)
+ fe.writer.file = bwc
+ fe.writer.start()
+
+ // Write 10 bytes.
+ b1 := []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
+ i, err := safeFileExporterWrite(fe, b1)
+ assert.NoError(t, err)
+ assert.EqualValues(t, len(b1), i, "bytes written")
+
+ // Assert buf contains 0 bytes before flush is called.
+ assert.EqualValues(t, 0, bbuf.Len(), "before flush")
+
+ // Wait 1.5 sec
+ time.Sleep(1500 * time.Millisecond)
+
+ // Assert buf contains 10 bytes after flush is called.
+ assert.EqualValues(t, 10, bbuf.Len(), "after flush")
+ // Compare the content.
+ assert.EqualValues(t, b1, bbuf.Bytes())
+ assert.NoError(t, fe.Shutdown(ctx))
+
+ // Restart the exporter
+ fe.writer, err = newFileWriter(fe.conf.Path, fe.conf.Append, fe.conf.Rotation, fe.conf.FlushInterval, export)
+ assert.NoError(t, err)
+ err = fe.writer.file.Close()
+ assert.NoError(t, err)
+ fe.writer.file = bwc
+ fe.writer.start()
+
+ // Write 10 bytes - again
+ b2 := []byte{11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
+ i, err = safeFileExporterWrite(fe, b2)
+ assert.NoError(t, err)
+ assert.EqualValues(t, len(b2), i, "bytes written")
+
+ // Assert buf contains 10 bytes before flush is called.
+ assert.EqualValues(t, 10, bbuf.Len(), "after restart - before flush")
+
+ // Wait 1.5 sec
+ time.Sleep(1500 * time.Millisecond)
+
+ // Assert buf contains 20 bytes after flush is called.
+ assert.EqualValues(t, 20, bbuf.Len(), "after restart - after flush")
+ // Compare the content.
+ bComplete := slices.Clone(b1)
+ bComplete = append(bComplete, b2...)
+ assert.EqualValues(t, bComplete, bbuf.Bytes())
+ assert.NoError(t, fe.Shutdown(ctx))
+}
diff --git a/exporter/fileexporter/file_writer.go b/exporter/fileexporter/file_writer.go
new file mode 100644
index 000000000000..fc4c34e25425
--- /dev/null
+++ b/exporter/fileexporter/file_writer.go
@@ -0,0 +1,118 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package fileexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter"
+
+import (
+ "encoding/binary"
+ "io"
+ "sync"
+ "time"
+)
+
+// exportFunc defines how to export encoded telemetry data.
+type exportFunc func(e *fileWriter, buf []byte) error
+
+type fileWriter struct {
+ path string
+ file io.WriteCloser
+ mutex sync.Mutex
+
+ exporter exportFunc
+
+ flushInterval time.Duration
+ flushTicker *time.Ticker
+ stopTicker chan struct{}
+}
+
+func exportMessageAsLine(w *fileWriter, buf []byte) error {
+ // Ensure only one write operation happens at a time.
+ w.mutex.Lock()
+ defer w.mutex.Unlock()
+ if _, err := w.file.Write(buf); err != nil {
+ return err
+ }
+ if _, err := io.WriteString(w.file, "\n"); err != nil {
+ return err
+ }
+ return nil
+}
+
+func exportMessageAsBuffer(w *fileWriter, buf []byte) error {
+ // Ensure only one write operation happens at a time.
+ w.mutex.Lock()
+ defer w.mutex.Unlock()
+ // write the size of each message before writing the message itself. https://developers.google.com/protocol-buffers/docs/techniques
+ // each encoded object is preceded by 4 bytes (an unsigned 32 bit integer)
+ data := make([]byte, 4, 4+len(buf))
+ binary.BigEndian.PutUint32(data, uint32(len(buf)))
+
+ return binary.Write(w.file, binary.BigEndian, append(data, buf...))
+}
+
+func (w *fileWriter) export(buf []byte) error {
+ return w.exporter(w, buf)
+}
+
+// startFlusher starts the flusher.
+// It does not check the flushInterval
+func (w *fileWriter) startFlusher() {
+ w.mutex.Lock()
+ defer w.mutex.Unlock()
+ ff, ok := w.file.(interface{ flush() error })
+ if !ok {
+ // Just in case.
+ return
+ }
+
+ // Create the stop channel.
+ w.stopTicker = make(chan struct{})
+ // Start the ticker.
+ w.flushTicker = time.NewTicker(w.flushInterval)
+ go func() {
+ for {
+ select {
+ case <-w.flushTicker.C:
+ w.mutex.Lock()
+ ff.flush()
+ w.mutex.Unlock()
+ case <-w.stopTicker:
+ w.flushTicker.Stop()
+ w.flushTicker = nil
+ return
+ }
+ }
+ }()
+}
+
+// Start starts the flush timer if set.
+func (w *fileWriter) start() {
+ if w.flushInterval > 0 {
+ w.startFlusher()
+ }
+}
+
+// Shutdown stops the exporter and is invoked during shutdown.
+// It stops the flush ticker if set.
+func (w *fileWriter) shutdown() error {
+
+ // Stop the flush ticker.
+ if w.flushTicker != nil {
+ // Stop the go routine.
+ w.mutex.Lock()
+ close(w.stopTicker)
+ w.mutex.Unlock()
+ }
+ return w.file.Close()
+}
+
+func buildExportFunc(cfg *Config) func(w *fileWriter, buf []byte) error {
+ if cfg.FormatType == formatTypeProto {
+ return exportMessageAsBuffer
+ }
+ // if the data format is JSON and needs to be compressed, telemetry data can't be written to file in JSON format.
+ if cfg.FormatType == formatTypeJSON && cfg.Compression != "" {
+ return exportMessageAsBuffer
+ }
+ return exportMessageAsLine
+}
diff --git a/exporter/fileexporter/generated_component_test.go b/exporter/fileexporter/generated_component_test.go
new file mode 100644
index 000000000000..338d3e841ea2
--- /dev/null
+++ b/exporter/fileexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package fileexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/fileexporter/go.mod b/exporter/fileexporter/go.mod
index 43cd15029c64..8f5526529824 100644
--- a/exporter/fileexporter/go.mod
+++ b/exporter/fileexporter/go.mod
@@ -1,53 +1,67 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter
-go 1.20
+go 1.21
require (
- github.com/klauspost/compress v1.17.2
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ github.com/hashicorp/golang-lru/v2 v2.0.7
+ github.com/klauspost/compress v1.17.8
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/extension v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
gopkg.in/natefinch/lumberjack.v2 v2.2.1
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding v0.98.0 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
@@ -66,3 +80,7 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest => ../../pkg/pdatatest
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../pkg/golden
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding/otlpencodingextension => ../../extension/encoding/otlpencodingextension
+
+replace github.com/open-telemetry/opentelemetry-collector-contrib/extension/encoding => ../../extension/encoding
diff --git a/exporter/fileexporter/go.sum b/exporter/fileexporter/go.sum
index 1c3d19632fa0..80cc3f1c823c 100644
--- a/exporter/fileexporter/go.sum
+++ b/exporter/fileexporter/go.sum
@@ -1,73 +1,51 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+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/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -75,103 +53,89 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -179,40 +143,18 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/fileexporter/grouping_file_exporter.go b/exporter/fileexporter/grouping_file_exporter.go
new file mode 100644
index 000000000000..329c61878577
--- /dev/null
+++ b/exporter/fileexporter/grouping_file_exporter.go
@@ -0,0 +1,289 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package fileexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter"
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "os"
+ "path"
+ "strings"
+ "sync"
+
+ "github.com/hashicorp/golang-lru/v2/simplelru"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/consumer/consumererror"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "go.uber.org/zap"
+)
+
+type groupingFileExporter struct {
+ conf *Config
+ logger *zap.Logger
+ marshaller *marshaller
+ pathPrefix string
+ pathSuffix string
+ attribute string
+ maxOpenFiles int
+ newFileWriter func(path string) (*fileWriter, error)
+
+ mutex sync.Mutex
+ writers *simplelru.LRU[string, *fileWriter]
+}
+
+func (e *groupingFileExporter) consumeTraces(ctx context.Context, td ptrace.Traces) error {
+ if td.ResourceSpans().Len() == 0 {
+ return nil
+ }
+
+ groups := make(map[string][]ptrace.ResourceSpans)
+
+ for i := 0; i < td.ResourceSpans().Len(); i++ {
+ rSpans := td.ResourceSpans().At(i)
+ group(e, groups, rSpans.Resource(), rSpans)
+ }
+
+ var errs error
+ for pathSegment, rSpansSlice := range groups {
+ traces := ptrace.NewTraces()
+ for _, rSpans := range rSpansSlice {
+ rSpans.CopyTo(traces.ResourceSpans().AppendEmpty())
+ }
+
+ buf, err := e.marshaller.marshalTraces(traces)
+ if err != nil {
+ errs = errors.Join(errs, err)
+ continue
+ }
+
+ err = e.write(ctx, pathSegment, buf)
+ if err != nil {
+ errs = errors.Join(errs, err)
+ }
+ }
+
+ if errs != nil {
+ return consumererror.NewPermanent(errs)
+ }
+
+ return nil
+}
+
+func (e *groupingFileExporter) consumeMetrics(ctx context.Context, md pmetric.Metrics) error {
+ if md.ResourceMetrics().Len() == 0 {
+ return nil
+ }
+
+ groups := make(map[string][]pmetric.ResourceMetrics)
+
+ for i := 0; i < md.ResourceMetrics().Len(); i++ {
+ rMetrics := md.ResourceMetrics().At(i)
+ group(e, groups, rMetrics.Resource(), rMetrics)
+ }
+
+ var errs error
+ for pathSegment, rMetricsSlice := range groups {
+ metrics := pmetric.NewMetrics()
+ for _, rMetrics := range rMetricsSlice {
+ rMetrics.CopyTo(metrics.ResourceMetrics().AppendEmpty())
+ }
+
+ buf, err := e.marshaller.marshalMetrics(metrics)
+ if err != nil {
+ errs = errors.Join(errs, err)
+ continue
+ }
+
+ err = e.write(ctx, pathSegment, buf)
+ if err != nil {
+ errs = errors.Join(errs, err)
+ }
+ }
+
+ if errs != nil {
+ return consumererror.NewPermanent(errs)
+ }
+
+ return nil
+}
+
+func (e *groupingFileExporter) consumeLogs(ctx context.Context, ld plog.Logs) error {
+ if ld.ResourceLogs().Len() == 0 {
+ return nil
+ }
+
+ groups := make(map[string][]plog.ResourceLogs)
+
+ for i := 0; i < ld.ResourceLogs().Len(); i++ {
+ rLogs := ld.ResourceLogs().At(i)
+ group(e, groups, rLogs.Resource(), rLogs)
+ }
+
+ var errs error
+ for pathSegment, rLogsSlice := range groups {
+ logs := plog.NewLogs()
+ for _, rlogs := range rLogsSlice {
+ rlogs.CopyTo(logs.ResourceLogs().AppendEmpty())
+ }
+
+ buf, err := e.marshaller.marshalLogs(logs)
+ if err != nil {
+ errs = errors.Join(errs, err)
+ continue
+ }
+
+ err = e.write(ctx, pathSegment, buf)
+ if err != nil {
+ errs = errors.Join(errs, err)
+ }
+ }
+
+ if errs != nil {
+ return consumererror.NewPermanent(errs)
+ }
+
+ return nil
+}
+
+func (e *groupingFileExporter) write(_ context.Context, pathSegment string, buf []byte) error {
+ writer, err := e.getWriter(pathSegment)
+ if err != nil {
+ return err
+ }
+
+ err = writer.export(buf)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}
+
+func (e *groupingFileExporter) getWriter(pathSegment string) (*fileWriter, error) {
+ fullPath := e.fullPath(pathSegment)
+
+ e.mutex.Lock()
+ defer e.mutex.Unlock()
+
+ writer, ok := e.writers.Get(fullPath)
+ if ok {
+ return writer, nil
+ }
+
+ err := os.MkdirAll(path.Dir(fullPath), 0755)
+ if err != nil {
+ return nil, err
+ }
+
+ writer, err = e.newFileWriter(fullPath)
+ if err != nil {
+ return nil, err
+ }
+
+ e.writers.Add(fullPath, writer)
+
+ writer.start()
+
+ return writer, nil
+}
+
+func cleanPathPrefix(pathPrefix string) string {
+ cleaned := path.Clean(pathPrefix)
+ if strings.HasSuffix(pathPrefix, "/") && !strings.HasSuffix(cleaned, "/") {
+ return cleaned + "/"
+ }
+
+ return cleaned
+}
+
+func (e *groupingFileExporter) fullPath(pathSegment string) string {
+ if strings.HasPrefix(pathSegment, "./") {
+ pathSegment = pathSegment[1:]
+ } else if strings.HasPrefix(pathSegment, "../") {
+ pathSegment = pathSegment[2:]
+ }
+
+ fullPath := path.Clean(e.pathPrefix + pathSegment + e.pathSuffix)
+ if strings.HasPrefix(fullPath, e.pathPrefix) {
+ return fullPath
+ }
+
+ // avoid path traversal vulnerability
+ return path.Join(e.pathPrefix, path.Join("/", pathSegment+e.pathSuffix))
+}
+
+func (e *groupingFileExporter) onEvict(_ string, writer *fileWriter) {
+ err := writer.shutdown()
+ if err != nil {
+ e.logger.Warn("Failed to close file", zap.Error(err), zap.String("path", writer.path))
+ }
+}
+
+func group[T any](e *groupingFileExporter, groups map[string][]T, resource pcommon.Resource, resourceEntries T) {
+ var pathSegment string
+ v, ok := resource.Attributes().Get(e.attribute)
+ if ok {
+ if v.Type() == pcommon.ValueTypeStr {
+ pathSegment = v.Str()
+ } else {
+ ok = false
+ }
+ }
+
+ if !ok {
+ e.logger.Debug(fmt.Sprintf("Resource does not contain %s attribute, dropping it", e.attribute))
+ return
+ }
+
+ groups[pathSegment] = append(groups[pathSegment], resourceEntries)
+}
+
+// Start initializes and starts the exporter.
+func (e *groupingFileExporter) Start(_ context.Context, host component.Host) error {
+ var err error
+ e.marshaller, err = newMarshaller(e.conf, host)
+ if err != nil {
+ return err
+ }
+ export := buildExportFunc(e.conf)
+
+ pathParts := strings.Split(e.conf.Path, "*")
+
+ e.pathPrefix = cleanPathPrefix(pathParts[0])
+ e.attribute = e.conf.GroupBy.ResourceAttribute
+ e.pathSuffix = pathParts[1]
+ e.maxOpenFiles = e.conf.GroupBy.MaxOpenFiles
+ e.newFileWriter = func(path string) (*fileWriter, error) {
+ return newFileWriter(path, e.conf.Append, nil, e.conf.FlushInterval, export)
+ }
+
+ writers, err := simplelru.NewLRU(e.conf.GroupBy.MaxOpenFiles, e.onEvict)
+ if err != nil {
+ return err
+ }
+
+ e.writers = writers
+
+ return nil
+}
+
+// Shutdown stops the exporter and is invoked during shutdown.
+// It stops flushes and closes all underlying writers.
+func (e *groupingFileExporter) Shutdown(context.Context) error {
+ e.mutex.Lock()
+ defer e.mutex.Unlock()
+
+ if e.writers == nil {
+ return nil
+ }
+
+ e.writers.Purge()
+ e.writers = nil
+
+ return nil
+}
diff --git a/exporter/fileexporter/grouping_file_exporter_test.go b/exporter/fileexporter/grouping_file_exporter_test.go
new file mode 100644
index 000000000000..53f1b06a7382
--- /dev/null
+++ b/exporter/fileexporter/grouping_file_exporter_test.go
@@ -0,0 +1,499 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+package fileexporter
+
+import (
+ "bufio"
+ "bytes"
+ "context"
+ "fmt"
+ "os"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "go.uber.org/zap"
+ "go.uber.org/zap/zaptest/observer"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
+)
+
+type testMarshaller struct {
+ content []byte
+}
+
+func (m *testMarshaller) MarshalTraces(ptrace.Traces) ([]byte, error) {
+ return m.content, nil
+}
+
+func (m *testMarshaller) MarshalLogs(plog.Logs) ([]byte, error) {
+ return m.content, nil
+}
+
+func (m *testMarshaller) MarshalMetrics(pmetric.Metrics) ([]byte, error) {
+ return m.content, nil
+}
+
+type groupingExporterTestCase struct {
+ name string
+ conf *Config
+ traceUnmarshaler ptrace.Unmarshaler
+ logUnmarshaler plog.Unmarshaler
+ metricUnmarshaler pmetric.Unmarshaler
+}
+
+func groupingExporterTestCases() []groupingExporterTestCase {
+ return []groupingExporterTestCase{
+ {
+ name: "json: default configuration",
+ conf: &Config{
+ FormatType: formatTypeJSON,
+ Rotation: &Rotation{MaxBackups: defaultMaxBackups},
+ GroupBy: &GroupBy{
+ Enabled: true,
+ // defaults:
+ ResourceAttribute: defaultResourceAttribute,
+ MaxOpenFiles: defaultMaxOpenFiles,
+ },
+ },
+ traceUnmarshaler: &ptrace.JSONUnmarshaler{},
+ logUnmarshaler: &plog.JSONUnmarshaler{},
+ metricUnmarshaler: &pmetric.JSONUnmarshaler{},
+ },
+ {
+ name: "json: compression configuration",
+ conf: &Config{
+ FormatType: formatTypeJSON,
+ Compression: compressionZSTD,
+ Rotation: &Rotation{MaxBackups: defaultMaxBackups},
+ GroupBy: &GroupBy{
+ Enabled: true,
+ // defaults:
+ ResourceAttribute: defaultResourceAttribute,
+ MaxOpenFiles: defaultMaxOpenFiles,
+ },
+ },
+ traceUnmarshaler: &ptrace.JSONUnmarshaler{},
+ logUnmarshaler: &plog.JSONUnmarshaler{},
+ metricUnmarshaler: &pmetric.JSONUnmarshaler{},
+ },
+ {
+ name: "Proto: default configuration",
+ conf: &Config{
+ FormatType: formatTypeProto,
+ GroupBy: &GroupBy{
+ Enabled: true,
+ // defaults:
+ ResourceAttribute: defaultResourceAttribute,
+ MaxOpenFiles: defaultMaxOpenFiles,
+ },
+ },
+ traceUnmarshaler: &ptrace.ProtoUnmarshaler{},
+ logUnmarshaler: &plog.ProtoUnmarshaler{},
+ metricUnmarshaler: &pmetric.ProtoUnmarshaler{},
+ },
+ {
+ name: "Proto: compression configuration",
+ conf: &Config{
+ FormatType: formatTypeProto,
+ Compression: compressionZSTD,
+ Rotation: &Rotation{MaxBackups: defaultMaxBackups},
+ GroupBy: &GroupBy{
+ Enabled: true,
+ // defaults:
+ ResourceAttribute: defaultResourceAttribute,
+ MaxOpenFiles: defaultMaxOpenFiles,
+ },
+ },
+ traceUnmarshaler: &ptrace.ProtoUnmarshaler{},
+ logUnmarshaler: &plog.ProtoUnmarshaler{},
+ metricUnmarshaler: &pmetric.ProtoUnmarshaler{},
+ },
+ {
+ name: "json: max_open_files=1",
+ conf: &Config{
+ FormatType: formatTypeJSON,
+ Rotation: &Rotation{MaxBackups: defaultMaxBackups},
+ GroupBy: &GroupBy{
+ Enabled: true,
+ MaxOpenFiles: 1,
+ // defaults:
+ ResourceAttribute: defaultResourceAttribute,
+ },
+ },
+ traceUnmarshaler: &ptrace.JSONUnmarshaler{},
+ logUnmarshaler: &plog.JSONUnmarshaler{},
+ metricUnmarshaler: &pmetric.JSONUnmarshaler{},
+ },
+ }
+}
+
+func TestGroupingFileTracesExporter(t *testing.T) {
+ for _, tt := range groupingExporterTestCases() {
+ t.Run(tt.name, func(t *testing.T) {
+ conf := tt.conf
+ tmpDir := t.TempDir()
+ conf.Path = tmpDir + "/*.log"
+ zapCore, logs := observer.New(zap.DebugLevel)
+ feI := newFileExporter(conf, zap.New(zapCore))
+ require.IsType(t, &groupingFileExporter{}, feI)
+ gfe := feI.(*groupingFileExporter)
+
+ testSpans := func() ptrace.Traces {
+ td := testdata.GenerateTracesTwoSpansSameResourceOneDifferent()
+ testdata.GenerateTracesOneSpan().ResourceSpans().At(0).CopyTo(td.ResourceSpans().AppendEmpty())
+ td.ResourceSpans().At(0).Resource().Attributes().PutStr("fileexporter.path_segment", "one")
+ td.ResourceSpans().At(1).Resource().Attributes().PutStr("fileexporter.path_segment", ".././two/two")
+ return td
+ }
+ td := testSpans()
+
+ assert.NoError(t, gfe.Start(context.Background(), componenttest.NewNopHost()))
+ require.NoError(t, gfe.consumeTraces(context.Background(), td))
+ assert.LessOrEqual(t, gfe.writers.Len(), conf.GroupBy.MaxOpenFiles)
+
+ assert.NoError(t, gfe.Shutdown(context.Background()))
+
+ // make sure the exporter did not modify any data
+ assert.Equal(t, testSpans(), td)
+
+ debugLogs := logs.FilterLevelExact(zap.DebugLevel)
+ assert.Equal(t, 1, debugLogs.Len())
+ assert.Equal(t, 0, logs.Len()-debugLogs.Len())
+
+ pathResourceSpans := map[string][]ptrace.ResourceSpans{
+ tmpDir + "/one.log": {td.ResourceSpans().At(0)},
+ tmpDir + "/two/two.log": {td.ResourceSpans().At(1)},
+ }
+
+ for path, wantResourceSpans := range pathResourceSpans {
+ fi, err := os.Open(path)
+ if len(wantResourceSpans) == 0 {
+ assert.Error(t, err)
+ continue
+ }
+ assert.NoError(t, err)
+ br := bufio.NewReader(fi)
+ for {
+ buf, isEnd, err := func() ([]byte, bool, error) {
+ if gfe.marshaller.formatType == formatTypeJSON && gfe.marshaller.compression == "" {
+ return readJSONMessage(br)
+ }
+ return readMessageFromStream(br)
+ }()
+ assert.NoError(t, err)
+ if isEnd {
+ break
+ }
+ decoder := buildUnCompressor(gfe.marshaller.compression)
+ buf, err = decoder(buf)
+ assert.NoError(t, err)
+ got, err := tt.traceUnmarshaler.UnmarshalTraces(buf)
+ assert.NoError(t, err)
+
+ gotResourceSpans := make([]ptrace.ResourceSpans, 0)
+ for i := 0; i < got.ResourceSpans().Len(); i++ {
+ gotResourceSpans = append(gotResourceSpans, got.ResourceSpans().At(i))
+ }
+
+ assert.EqualValues(t, wantResourceSpans, gotResourceSpans)
+ }
+ fi.Close()
+ }
+ })
+ }
+}
+
+func TestGroupingFileLogsExporter(t *testing.T) {
+ for _, tt := range groupingExporterTestCases() {
+ t.Run(tt.name, func(t *testing.T) {
+ conf := tt.conf
+ tmpDir := t.TempDir()
+ conf.Path = tmpDir + "/*.log"
+ zapCore, logs := observer.New(zap.DebugLevel)
+ feI := newFileExporter(conf, zap.New(zapCore))
+ require.IsType(t, &groupingFileExporter{}, feI)
+ gfe := feI.(*groupingFileExporter)
+
+ testLogs := func() plog.Logs {
+ td := testdata.GenerateLogsTwoLogRecordsSameResource()
+ testdata.GenerateLogsOneLogRecord().ResourceLogs().At(0).CopyTo(td.ResourceLogs().AppendEmpty())
+ testdata.GenerateLogsOneLogRecord().ResourceLogs().At(0).CopyTo(td.ResourceLogs().AppendEmpty())
+ td.ResourceLogs().At(0).Resource().Attributes().PutStr("fileexporter.path_segment", "one")
+ td.ResourceLogs().At(1).Resource().Attributes().PutStr("fileexporter.path_segment", ".././two/two")
+ return td
+ }
+ td := testLogs()
+
+ assert.NoError(t, gfe.Start(context.Background(), componenttest.NewNopHost()))
+ require.NoError(t, gfe.consumeLogs(context.Background(), td))
+ assert.LessOrEqual(t, gfe.writers.Len(), conf.GroupBy.MaxOpenFiles)
+
+ assert.NoError(t, gfe.Shutdown(context.Background()))
+
+ // make sure the exporter did not modify any data
+ assert.Equal(t, testLogs(), td)
+
+ debugLogs := logs.FilterLevelExact(zap.DebugLevel)
+ assert.Equal(t, 1, debugLogs.Len())
+ assert.Equal(t, 0, logs.Len()-debugLogs.Len())
+
+ pathResourceLogs := map[string][]plog.ResourceLogs{
+ tmpDir + "/one.log": {td.ResourceLogs().At(0)},
+ tmpDir + "/two/two.log": {td.ResourceLogs().At(1)},
+ }
+
+ for path, wantResourceLogs := range pathResourceLogs {
+ fi, err := os.Open(path)
+ if len(wantResourceLogs) == 0 {
+ assert.Error(t, err)
+ continue
+ }
+ assert.NoError(t, err)
+ br := bufio.NewReader(fi)
+ for {
+ buf, isEnd, err := func() ([]byte, bool, error) {
+ if gfe.marshaller.formatType == formatTypeJSON && gfe.marshaller.compression == "" {
+ return readJSONMessage(br)
+ }
+ return readMessageFromStream(br)
+ }()
+ assert.NoError(t, err)
+ if isEnd {
+ break
+ }
+ decoder := buildUnCompressor(gfe.marshaller.compression)
+ buf, err = decoder(buf)
+ assert.NoError(t, err)
+ got, err := tt.logUnmarshaler.UnmarshalLogs(buf)
+ assert.NoError(t, err)
+
+ gotResourceLogs := make([]plog.ResourceLogs, 0)
+ for i := 0; i < got.ResourceLogs().Len(); i++ {
+ gotResourceLogs = append(gotResourceLogs, got.ResourceLogs().At(i))
+ }
+
+ assert.EqualValues(t, wantResourceLogs, gotResourceLogs)
+ }
+ fi.Close()
+ }
+ })
+ }
+}
+
+func TestGroupingFileMetricsExporter(t *testing.T) {
+ for _, tt := range groupingExporterTestCases() {
+ t.Run(tt.name, func(t *testing.T) {
+ conf := tt.conf
+ tmpDir := t.TempDir()
+ conf.Path = tmpDir + "/*.log"
+
+ zapCore, logs := observer.New(zap.DebugLevel)
+ feI := newFileExporter(conf, zap.New(zapCore))
+ require.IsType(t, &groupingFileExporter{}, feI)
+ gfe := feI.(*groupingFileExporter)
+
+ testMetrics := func() pmetric.Metrics {
+ td := testdata.GenerateMetricsTwoMetrics()
+ testdata.GenerateMetricsOneCounterOneSummaryMetrics().ResourceMetrics().At(0).CopyTo(td.ResourceMetrics().AppendEmpty())
+ testdata.GenerateMetricsOneMetricNoAttributes().ResourceMetrics().At(0).CopyTo(td.ResourceMetrics().AppendEmpty())
+ td.ResourceMetrics().At(0).Resource().Attributes().PutStr("fileexporter.path_segment", "one")
+ td.ResourceMetrics().At(1).Resource().Attributes().PutStr("fileexporter.path_segment", ".././two/two")
+ return td
+ }
+ td := testMetrics()
+
+ assert.NoError(t, gfe.Start(context.Background(), componenttest.NewNopHost()))
+ require.NoError(t, gfe.consumeMetrics(context.Background(), td))
+ assert.LessOrEqual(t, gfe.writers.Len(), conf.GroupBy.MaxOpenFiles)
+
+ assert.NoError(t, gfe.Shutdown(context.Background()))
+
+ // make sure the exporter did not modify any data
+ assert.Equal(t, testMetrics(), td)
+
+ debugLogs := logs.FilterLevelExact(zap.DebugLevel)
+ assert.Equal(t, 1, debugLogs.Len())
+ assert.Equal(t, 0, logs.Len()-debugLogs.Len())
+
+ pathResourceMetrics := map[string][]pmetric.ResourceMetrics{
+ tmpDir + "/one.log": {td.ResourceMetrics().At(0)},
+ tmpDir + "/two/two.log": {td.ResourceMetrics().At(1)},
+ }
+
+ for path, wantResourceMetrics := range pathResourceMetrics {
+ fi, err := os.Open(path)
+ if len(wantResourceMetrics) == 0 {
+ assert.Error(t, err)
+ continue
+ }
+ assert.NoError(t, err)
+ br := bufio.NewReader(fi)
+ for {
+ buf, isEnd, err := func() ([]byte, bool, error) {
+ if gfe.marshaller.formatType == formatTypeJSON && gfe.marshaller.compression == "" {
+ return readJSONMessage(br)
+ }
+ return readMessageFromStream(br)
+ }()
+ assert.NoError(t, err)
+ if isEnd {
+ break
+ }
+ decoder := buildUnCompressor(gfe.marshaller.compression)
+ buf, err = decoder(buf)
+ assert.NoError(t, err)
+ got, err := tt.metricUnmarshaler.UnmarshalMetrics(buf)
+ assert.NoError(t, err)
+
+ gotResourceMetrics := make([]pmetric.ResourceMetrics, 0)
+ for i := 0; i < got.ResourceMetrics().Len(); i++ {
+ gotResourceMetrics = append(gotResourceMetrics, got.ResourceMetrics().At(i))
+ }
+
+ assert.EqualValues(t, wantResourceMetrics, gotResourceMetrics)
+ }
+ fi.Close()
+ }
+ })
+ }
+}
+
+func TestFullPath(t *testing.T) {
+ tests := []struct {
+ prefix string
+ pathSegment string
+ suffix string
+ want string
+ }{
+ // good actor
+ {prefix: "/", pathSegment: "filename", suffix: ".json", want: "/filename.json"},
+ {prefix: "/", pathSegment: "/dir/filename", suffix: ".json", want: "/dir/filename.json"},
+ {prefix: "/dir", pathSegment: "dirsuffix/filename", suffix: ".json", want: "/dirdirsuffix/filename.json"},
+ {prefix: "/dir", pathSegment: "/subdir/filename", suffix: ".json", want: "/dir/subdir/filename.json"},
+ {prefix: "/dir", pathSegment: "./filename", suffix: ".json", want: "/dir/filename.json"},
+ {prefix: "/dir", pathSegment: "/subdir/", suffix: "filename.json", want: "/dir/subdir/filename.json"},
+ {prefix: "/dir/", pathSegment: "subdir", suffix: "/filename.json", want: "/dir/subdir/filename.json"},
+ {prefix: "/dir", pathSegment: "", suffix: "filename.json", want: "/dirfilename.json"},
+ {prefix: "/dir/", pathSegment: "", suffix: "filename.json", want: "/dir/filename.json"},
+ {prefix: "/dir/", pathSegment: "subdir/strangebutok/../", suffix: "filename.json", want: "/dir/subdir/filename.json"},
+ {prefix: "/dir", pathSegment: "dirsuffix/strangebutok/../", suffix: "filename.json", want: "/dirdirsuffix/filename.json"},
+
+ // bad actor
+ {prefix: "/dir", pathSegment: "../etc/attack", suffix: ".json", want: "/dir/etc/attack.json"},
+ {prefix: "/dir", pathSegment: "../etc/attack", suffix: "/filename.json", want: "/dir/etc/attack/filename.json"},
+ {prefix: "/dir", pathSegment: "dirsuffix/../etc/attack", suffix: ".json", want: "/dir/etc/attack.json"},
+ {prefix: "/dir", pathSegment: "dirsuffix/../../etc/attack", suffix: ".json", want: "/dir/etc/attack.json"},
+ {prefix: "/dir", pathSegment: "dirsuffix/../../etc/attack", suffix: ".json", want: "/dir/etc/attack.json"},
+ }
+
+ for _, tc := range tests {
+ t.Run(fmt.Sprintf("%s + %s + %s", tc.prefix, tc.pathSegment, tc.suffix), func(t *testing.T) {
+ e := &groupingFileExporter{
+ pathPrefix: cleanPathPrefix(tc.prefix),
+ pathSuffix: tc.suffix,
+ }
+
+ assert.Equal(t, tc.want, e.fullPath(tc.pathSegment))
+ })
+ }
+}
+
+func BenchmarkExporters(b *testing.B) {
+ tests := []struct {
+ name string
+ conf *Config
+ }{
+ {
+ name: "default",
+ conf: &Config{
+ Path: tempFileName(b),
+ FormatType: formatTypeJSON,
+ },
+ },
+ {
+ name: "grouping, 100 writers",
+ conf: &Config{
+ Path: b.TempDir() + "/*",
+ FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ Enabled: true,
+ MaxOpenFiles: 100,
+ },
+ },
+ },
+ {
+ name: "grouping, 99 writers",
+ conf: &Config{
+ Path: b.TempDir() + "/*",
+ FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ Enabled: true,
+ MaxOpenFiles: 99,
+ },
+ },
+ },
+ {
+ name: "grouping, 1 writer",
+ conf: &Config{
+ Path: b.TempDir() + "/*",
+ FormatType: formatTypeJSON,
+ GroupBy: &GroupBy{
+ Enabled: true,
+ MaxOpenFiles: 1,
+ },
+ },
+ },
+ }
+
+ var traces []ptrace.Traces
+ var logs []plog.Logs
+ for i := 0; i < 100; i++ {
+ td := testdata.GenerateTracesTwoSpansSameResource()
+ td.ResourceSpans().At(0).Resource().Attributes().PutStr("fileexporter.path_segment", fmt.Sprintf("file%d", i))
+ traces = append(traces, td)
+
+ ld := testdata.GenerateLogsTwoLogRecordsSameResource()
+ ld.ResourceLogs().At(0).Resource().Attributes().PutStr("fileexporter.path_segment", fmt.Sprintf("file%d", i))
+ logs = append(logs, ld)
+ }
+ for _, tc := range tests {
+ fe := newFileExporter(tc.conf, zap.NewNop())
+
+ // remove marshaling time from the benchmark
+ tm := &testMarshaller{content: bytes.Repeat([]byte{'a'}, 512)}
+ marshaller := &marshaller{
+ tracesMarshaler: tm,
+ metricsMarshaler: tm,
+ logsMarshaler: tm,
+ compression: "",
+ compressor: noneCompress,
+ formatType: "test",
+ }
+ switch fExp := fe.(type) {
+ case *fileExporter:
+ fExp.marshaller = marshaller
+ case *groupingFileExporter:
+ fExp.marshaller = marshaller
+ }
+
+ require.NoError(b, fe.Start(context.Background(), componenttest.NewNopHost()))
+
+ b.Run(tc.name, func(b *testing.B) {
+ b.ReportAllocs()
+ b.ResetTimer()
+
+ ctx := context.Background()
+ for i := 0; i < b.N; i++ {
+ require.NoError(b, fe.consumeTraces(ctx, traces[i%len(traces)]))
+ require.NoError(b, fe.consumeLogs(ctx, logs[i%len(logs)]))
+ }
+ })
+
+ assert.NoError(b, fe.Shutdown(context.Background()))
+ }
+}
diff --git a/exporter/fileexporter/internal/metadata/generated_status.go b/exporter/fileexporter/internal/metadata/generated_status.go
index 3ca3f1406dd1..aa9a33eaeb7a 100644
--- a/exporter/fileexporter/internal/metadata/generated_status.go
+++ b/exporter/fileexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("file")
)
const (
- Type = "file"
TracesStability = component.StabilityLevelAlpha
MetricsStability = component.StabilityLevelAlpha
LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/file")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/file")
+}
diff --git a/exporter/fileexporter/marshaller.go b/exporter/fileexporter/marshaller.go
new file mode 100644
index 000000000000..e3452b93ee64
--- /dev/null
+++ b/exporter/fileexporter/marshaller.go
@@ -0,0 +1,103 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package fileexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/fileexporter"
+
+import (
+ "errors"
+ "fmt"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+// Marshaler configuration used for marhsaling Protobuf
+var tracesMarshalers = map[string]ptrace.Marshaler{
+ formatTypeJSON: &ptrace.JSONMarshaler{},
+ formatTypeProto: &ptrace.ProtoMarshaler{},
+}
+var metricsMarshalers = map[string]pmetric.Marshaler{
+ formatTypeJSON: &pmetric.JSONMarshaler{},
+ formatTypeProto: &pmetric.ProtoMarshaler{},
+}
+var logsMarshalers = map[string]plog.Marshaler{
+ formatTypeJSON: &plog.JSONMarshaler{},
+ formatTypeProto: &plog.ProtoMarshaler{},
+}
+
+type marshaller struct {
+ tracesMarshaler ptrace.Marshaler
+ metricsMarshaler pmetric.Marshaler
+ logsMarshaler plog.Marshaler
+
+ compression string
+ compressor compressFunc
+
+ formatType string
+}
+
+func newMarshaller(conf *Config, host component.Host) (*marshaller, error) {
+ if conf.Encoding != nil {
+ encoding := host.GetExtensions()[*conf.Encoding]
+ if encoding == nil {
+ return nil, fmt.Errorf("unknown encoding %q", conf.Encoding)
+ }
+ // cast with ok to avoid panics.
+ tm, _ := encoding.(ptrace.Marshaler)
+ pm, _ := encoding.(pmetric.Marshaler)
+ lm, _ := encoding.(plog.Marshaler)
+ return &marshaller{
+ tracesMarshaler: tm,
+ metricsMarshaler: pm,
+ logsMarshaler: lm,
+ compression: conf.Compression,
+ compressor: buildCompressor(conf.Compression),
+ }, nil
+ }
+ return &marshaller{
+ formatType: conf.FormatType,
+ tracesMarshaler: tracesMarshalers[conf.FormatType],
+ metricsMarshaler: metricsMarshalers[conf.FormatType],
+ logsMarshaler: logsMarshalers[conf.FormatType],
+ compression: conf.Compression,
+ compressor: buildCompressor(conf.Compression),
+ }, nil
+}
+
+func (m *marshaller) marshalTraces(td ptrace.Traces) ([]byte, error) {
+ if m.tracesMarshaler == nil {
+ return nil, errors.New("traces are not supported by encoding")
+ }
+ buf, err := m.tracesMarshaler.MarshalTraces(td)
+ if err != nil {
+ return nil, err
+ }
+ buf = m.compressor(buf)
+ return buf, nil
+}
+
+func (m *marshaller) marshalMetrics(md pmetric.Metrics) ([]byte, error) {
+ if m.metricsMarshaler == nil {
+ return nil, errors.New("metrics are not supported by encoding")
+ }
+ buf, err := m.metricsMarshaler.MarshalMetrics(md)
+ if err != nil {
+ return nil, err
+ }
+ buf = m.compressor(buf)
+ return buf, nil
+}
+
+func (m *marshaller) marshalLogs(ld plog.Logs) ([]byte, error) {
+ if m.logsMarshaler == nil {
+ return nil, errors.New("logs are not supported by encoding")
+ }
+ buf, err := m.logsMarshaler.MarshalLogs(ld)
+ if err != nil {
+ return nil, err
+ }
+ buf = m.compressor(buf)
+ return buf, nil
+}
diff --git a/exporter/fileexporter/metadata.yaml b/exporter/fileexporter/metadata.yaml
index 7610d9a67c61..fd61213f8bed 100644
--- a/exporter/fileexporter/metadata.yaml
+++ b/exporter/fileexporter/metadata.yaml
@@ -1,9 +1,15 @@
type: file
+scope_name: otelcol/file
status:
class: exporter
stability:
alpha: [traces, metrics, logs]
- distributions: [core, contrib, observiq, splunk, sumo, aws]
+ distributions: [core, contrib]
codeowners:
active: [atingchen]
+
+tests:
+ config:
+ path: testdata/log.json
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/fileexporter/package_test.go b/exporter/fileexporter/package_test.go
new file mode 100644
index 000000000000..dbd651260316
--- /dev/null
+++ b/exporter/fileexporter/package_test.go
@@ -0,0 +1,16 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package fileexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by the natefinch/lumberjack package.
+// Existing issue for leak: https://github.com/natefinch/lumberjack/issues/56
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("gopkg.in/natefinch/lumberjack%2ev2.(*Logger).millRun"))
+}
diff --git a/exporter/fileexporter/testdata/.gitignore b/exporter/fileexporter/testdata/.gitignore
new file mode 100644
index 000000000000..71aba6f8f5a7
--- /dev/null
+++ b/exporter/fileexporter/testdata/.gitignore
@@ -0,0 +1,2 @@
+# File generated by lifecycle tests
+log.json
\ No newline at end of file
diff --git a/exporter/fileexporter/testdata/config.yaml b/exporter/fileexporter/testdata/config.yaml
index cac55b48ae83..fd7b6445ad4f 100644
--- a/exporter/fileexporter/testdata/config.yaml
+++ b/exporter/fileexporter/testdata/config.yaml
@@ -55,3 +55,31 @@ file/flush_interval_500ms:
file/flush_interval_negative_value:
path: ./flushed
flush_interval: "-1s"
+
+file/group_by:
+ path: ./group_by/*.json
+ group_by:
+ enabled: true
+ resource_attribute: dummy
+ max_open_files: 10
+
+file/group_by_defaults:
+ path: ./group_by/*.json
+ group_by:
+ enabled: true
+
+file/group_by_invalid_path:
+ path: ./group_by_no_star
+ group_by:
+ enabled: true
+
+file/group_by_invalid_path2:
+ path: '*/./group_by'
+ group_by:
+ enabled: true
+
+file/group_by_empty_resource_attribute:
+ path: ./group_by/*.json
+ group_by:
+ enabled: true
+ resource_attribute: ""
diff --git a/exporter/googlecloudexporter/README.md b/exporter/googlecloudexporter/README.md
index ae7aeba91406..78c7b96d9900 100644
--- a/exporter/googlecloudexporter/README.md
+++ b/exporter/googlecloudexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fgooglecloud%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fgooglecloud) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fgooglecloud%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fgooglecloud) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@aabmass](https://www.github.com/aabmass), [@dashpole](https://www.github.com/dashpole), [@jsuereth](https://www.github.com/jsuereth), [@punya](https://www.github.com/punya), [@damemi](https://www.github.com/damemi), [@psx95](https://www.github.com/psx95) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter can be used to send metrics to [Google Cloud Monitoring](https://cloud.google.com/monitoring)
@@ -56,9 +55,9 @@ When running the Collector in a Docker container, a credentials file can be pass
```
docker run \
- --volume ~/service-account-key.json:/etc/otel/key.json \
- --volume $(pwd)/config.yaml:/etc/otel/config.yaml \
- --env GOOGLE_APPLICATION_CREDENTIALS=/etc/otel/key.json \
+ --volume ~/service-account-key.json:/etc/otelcol-contrib/key.json \
+ --volume $(pwd)/config.yaml:/etc/otelcol-contrib/config.yaml \
+ --env GOOGLE_APPLICATION_CREDENTIALS=/etc/otelcol-contrib/key.json \
--expose 4317 \
--expose 55681 \
--rm \
@@ -199,7 +198,6 @@ The following configuration options are supported:
errors (`UNAVAILABLE` or `DEADLINE_EXCEEDED`).
- `trace` (optional): Configuration for sending traces to Cloud Trace.
- `endpoint` (default = cloudtrace.googleapis.com): Endpoint where trace data is going to be sent to.
- - `compression` (optional): Compression format for Metrics gRPC requests. Supported values: [`gzip`]. Defaults to no compression.
- `grpc_pool_size` (optional): Sets the size of the connection pool in the GCP client. Defaults to a single connection.
- `use_insecure` (default = false): If true, disables gRPC client transport security. Only has effect if Endpoint is not "".
- `attribute_mappings` (optional): AttributeMappings determines how to map from OpenTelemetry attribute keys to Google Cloud Trace keys. By default, it changes http and service keys so that they appear more prominently in the UI.
@@ -236,6 +234,34 @@ following proxy environment variables:
If set at Collector start time then exporters, regardless of protocol,
will or will not proxy traffic as defined by these environment variables.
+### Monitored Resources
+
+For metrics and logs, this exporter maps the OpenTelemetry Resource to a Google
+Cloud [Logging](https://cloud.google.com/logging/docs/api/v2/resource-list) or
+[Monitoring](https://cloud.google.com/monitoring/api/resources) Monitored Resource.
+
+The complete mapping logic can be found [here](https://github.com/GoogleCloudPlatform/opentelemetry-operations-go/blob/main/internal/resourcemapping/resourcemapping.go).
+That may be the most helpful reference if you want to map to a specific monitored
+resource.
+
+#### On GCP
+
+If running on GCP, using the GCP resource detector, as shown above, will populate
+the resource attributes required to map to the appropriate monitored resource.
+
+#### Off GCP
+
+If you are not running on GCP, you still need to choose a [GCP zone or
+region](https://cloud.google.com/compute/docs/regions-zones) to send telemetry to
+by setting `cloud.availability_zone` or `cloud.region`. In addition, you should use the detector associated with other cloud providers, if applicable.
+
+If running on Kubernetes, it is recommended to additionally set `k8s.pod.name`,
+`k8s.namespace.name`, and `k8s.container.name` using the `k8sattributes` processor.
+
+If you are getting "duplicate timeseries encountered" errors, it is likely because
+you are missing a required resource attribute, causing a metric from two different
+instances of an application to end up with the same monitored resource.
+
### Preventing metric label collisions
The metrics exporter can add metric labels to timeseries, such as when setting
@@ -275,6 +301,9 @@ processors:
- delete_key(attributes, "instrumentation_version")
```
+**Note** It is not recommended to use these transformations with the googlecloud
+exporter in a logging or trace pipeline.
+
The same method can be used for any resource attributes being filtered to metric
labels, or metric labels which might collide with the GCP monitored resource
used with resource detection.
diff --git a/exporter/googlecloudexporter/factory.go b/exporter/googlecloudexporter/factory.go
index 1ca70a165504..25f681a3bad2 100644
--- a/exporter/googlecloudexporter/factory.go
+++ b/exporter/googlecloudexporter/factory.go
@@ -64,6 +64,7 @@ func createLogsExporter(
params,
cfg,
logsExporter.PushLogs,
+ exporterhelper.WithStart(logsExporter.Start),
exporterhelper.WithShutdown(logsExporter.Shutdown),
// Disable exporterhelper Timeout, since we are using a custom mechanism
// within exporter itself
@@ -86,6 +87,7 @@ func createTracesExporter(
params,
cfg,
tExp.PushTraces,
+ exporterhelper.WithStart(tExp.Start),
exporterhelper.WithShutdown(tExp.Shutdown),
// Disable exporterhelper Timeout, since we are using a custom mechanism
// within exporter itself
@@ -108,6 +110,7 @@ func createMetricsExporter(
params,
cfg,
mExp.PushMetrics,
+ exporterhelper.WithStart(mExp.Start),
exporterhelper.WithShutdown(mExp.Shutdown),
// Disable exporterhelper Timeout, since we are using a custom mechanism
// within exporter itself
diff --git a/exporter/googlecloudexporter/generated_component_test.go b/exporter/googlecloudexporter/generated_component_test.go
new file mode 100644
index 000000000000..f7c2631c048f
--- /dev/null
+++ b/exporter/googlecloudexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package googlecloudexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/googlecloudexporter/go.mod b/exporter/googlecloudexporter/go.mod
index 296eaac7052f..5aba81167f2e 100644
--- a/exporter/googlecloudexporter/go.mod
+++ b/exporter/googlecloudexporter/go.mod
@@ -1,82 +1,96 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudexporter
-go 1.20
+go 1.21
require (
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.44.1-0.20231113185509-337c81d87781
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/featuregate v1.5.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
)
require (
- cloud.google.com/go v0.110.10 // indirect
- cloud.google.com/go/compute v1.23.1 // indirect
+ cloud.google.com/go v0.112.0 // indirect
+ cloud.google.com/go/compute v1.23.3 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
- cloud.google.com/go/logging v1.8.1 // indirect
- cloud.google.com/go/longrunning v0.5.2 // indirect
- cloud.google.com/go/monitoring v1.16.1 // indirect
- cloud.google.com/go/trace v1.10.2 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.20.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.44.0 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ cloud.google.com/go/logging v1.9.0 // indirect
+ cloud.google.com/go/longrunning v0.5.4 // indirect
+ cloud.google.com/go/monitoring v1.17.0 // indirect
+ cloud.google.com/go/trace v1.10.4 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/google/s2a-go v0.1.7 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/tidwall/gjson v1.10.2 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/tidwall/tinylru v1.1.0 // indirect
github.com/tidwall/wal v1.1.7 // indirect
go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.1 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sync v0.5.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/crypto v0.21.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/oauth2 v0.16.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.3.0 // indirect
- google.golang.org/api v0.150.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ google.golang.org/api v0.155.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/googlecloudexporter/go.sum b/exporter/googlecloudexporter/go.sum
index 7261afc871cb..f36b1bf3edec 100644
--- a/exporter/googlecloudexporter/go.sum
+++ b/exporter/googlecloudexporter/go.sum
@@ -1,34 +1,38 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
-cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
-cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0=
-cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
+cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
+cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4=
+cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk=
+cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
-cloud.google.com/go/logging v1.8.1 h1:26skQWPeYhvIasWKm48+Eq7oUqdcdbwsCVwz5Ys0FvU=
-cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI=
-cloud.google.com/go/longrunning v0.5.2 h1:u+oFqfEwwU7F9dIELigxbe0XVnBAo9wqMuQLA50CZ5k=
-cloud.google.com/go/longrunning v0.5.2/go.mod h1:nqo6DQbNV2pXhGDbDMoN2bWz68MjZUzqv2YttZiveCs=
-cloud.google.com/go/monitoring v1.16.1 h1:CTklIuUkS5nCricGojPwdkSgPsCTX2HmYTxFDg+UvpU=
-cloud.google.com/go/monitoring v1.16.1/go.mod h1:6HsxddR+3y9j+o/cMJH6q/KJ/CBTvM/38L/1m7bTRJ4=
-cloud.google.com/go/trace v1.10.2 h1:80Rh4JSqJLfe/xGNrpyO4MQxiFDXcHG1XrsevfmrIRQ=
-cloud.google.com/go/trace v1.10.2/go.mod h1:NPXemMi6MToRFcSxRl2uDnu/qAlAQ3oULUphcHGh1vA=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
+cloud.google.com/go/logging v1.9.0 h1:iEIOXFO9EmSiTjDmfpbRjOxECO7R8C7b8IXUGOj7xZw=
+cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE=
+cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg=
+cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI=
+cloud.google.com/go/monitoring v1.17.0 h1:blrdvF0MkPPivSO041ihul7rFMhXdVp8Uq7F59DKXTU=
+cloud.google.com/go/monitoring v1.17.0/go.mod h1:KwSsX5+8PnXv5NJnICZzW2R8pWTis8ypC4zmdRD63Tw=
+cloud.google.com/go/trace v1.10.4 h1:2qOAuAzNezwW3QN+t41BtkDJOG42HywL73q8x/f6fnM=
+cloud.google.com/go/trace v1.10.4/go.mod h1:Nso99EDIK8Mj5/zmB+iGr9dosS/bzWCJ8wGmE6TXNWY=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.44.1-0.20231113185509-337c81d87781 h1:tI/JgbDUBFpVCgawBboIxIV4OCcXsXSQDx5IvA7rsag=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.44.1-0.20231113185509-337c81d87781/go.mod h1:Y8A+tRfM4DfIY2ODAyzSrxHmaxL3wWERfLy6PAthDpI=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.20.0 h1:uY/4lpbbFG73TgzmJoB7XMyFIheII95hlfH62uC+oS0=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.20.0/go.mod h1:qaUEgkhkSlCNIu9/XD4y19vnbwKskfz2ep6Utf2A57c=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.44.0 h1:ew7SfeajMJ3I4iXA1LERYY62fGCKO4TjVPw5QTPt47k=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.44.0 h1:GjWPDY9PUlNWwTI95L/lktUp35BLtzBoBElH314eafM=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.44.0/go.mod h1:qkFPtMouQjW5ugdHIOthiTbweVHUTqbS0Qsu55KqXks=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0 h1:7jymiL7lvmjgG8hMfvZ6qqA39VuiGEmCmFLd0N0tMKY=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0/go.mod h1:w3gKj9vyvd9n8jh2jpOMVLGy87QqB/AxDek2CoRwpt0=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 h1:xl4IRfBXPZxwu7dIza8n6wdX5zEJpi0boF5dX22MbYE=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0/go.mod h1:P69hhmQh4zwnU5iEdGVowFWg1DiP9x2KsCYBOIaP4us=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0 h1:vaXjFX09ygxNxAiHwByzPBVKltYFVZR8HN4U3TR4vn8=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0/go.mod h1:V28hx+cUCZC9e3qcqszMb+Sbt8cQZtHTiXOmyDzoDOg=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 h1:xlfPHZ5QFvHad9KmrVDoaPpJUT/XluwNDMNHn+k7z/s=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0/go.mod h1:mzI44HpPp75Z8/a1sJP1asdHdu7Wui7t10SZ9EEPPnM=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
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=
@@ -36,15 +40,19 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -53,7 +61,6 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
@@ -63,6 +70,7 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -73,11 +81,13 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.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/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
@@ -92,15 +102,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -110,13 +119,17 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -124,8 +137,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
@@ -138,93 +151,116 @@ github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4=
github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+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.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
-golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
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.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=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ=
+golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o=
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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
-golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -233,32 +269,33 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+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=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
+google.golang.org/api v0.155.0 h1:vBmGhCYs0djJttDNynWo44zosHlPvHmA0XiN2zP2DtA=
+google.golang.org/api v0.155.0/go.mod h1:GI5qK5f40kCpHfPn6+YzGAByIKWv8ujFnmoWm7Igduk=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
-google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
-google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k=
-google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80/go.mod h1:cc8bqMqtv9gMOr0zHg2Vzff5ULhhL2IXP4sbcn32Dro=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
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=
@@ -270,11 +307,11 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/exporter/googlecloudexporter/internal/metadata/generated_status.go b/exporter/googlecloudexporter/internal/metadata/generated_status.go
index b4520b594593..846a6056ec42 100644
--- a/exporter/googlecloudexporter/internal/metadata/generated_status.go
+++ b/exporter/googlecloudexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("googlecloud")
)
const (
- Type = "googlecloud"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/googlecloud")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/googlecloud")
+}
diff --git a/exporter/googlecloudexporter/metadata.yaml b/exporter/googlecloudexporter/metadata.yaml
index 5b551dc0f188..f3c607924728 100644
--- a/exporter/googlecloudexporter/metadata.yaml
+++ b/exporter/googlecloudexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: googlecloud
+scope_name: otelcol/googlecloud
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
active: [aabmass, dashpole, jsuereth, punya, damemi, psx95]
+
+tests:
+ skip_lifecycle: true
diff --git a/exporter/googlecloudexporter/package_test.go b/exporter/googlecloudexporter/package_test.go
new file mode 100644
index 000000000000..78016f9340ae
--- /dev/null
+++ b/exporter/googlecloudexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package googlecloudexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/googlecloudpubsubexporter/README.md b/exporter/googlecloudpubsubexporter/README.md
index 9b061451029b..ef247ff7962e 100644
--- a/exporter/googlecloudpubsubexporter/README.md
+++ b/exporter/googlecloudpubsubexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fgooglecloudpubsub%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fgooglecloudpubsub) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fgooglecloudpubsub%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fgooglecloudpubsub) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@alexvanboxel](https://www.github.com/alexvanboxel) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
> ⚠️ This is a community-provided module. It has been developed and extensively tested at Collibra, but it is not officially supported by GCP.
@@ -28,6 +27,11 @@ The following configuration options are supported:
the smallest timestamp of all the messages.
* `allow_drift` (Optional): The maximum difference the `ce-time` attribute can be set from the system clock. When the
drift is set to 0, the maximum drift from the clock is allowed (only applicable to `earliest`).
+* `endpoint` (Optional): Override the default Pubsub Endpoint, useful when connecting to the PubSub emulator instance
+ or switching between [global and regional service endpoints](https://cloud.google.com/pubsub/docs/reference/service_apis_overview#service_endpoints).
+* `insecure` (Optional): allows performing “insecure” SSL connections and transfers, useful when connecting to a local
+ emulator instance. Only has effect if Endpoint is not ""
+
```yaml
exporters:
googlecloudpubsub:
diff --git a/exporter/googlecloudpubsubexporter/config.go b/exporter/googlecloudpubsubexporter/config.go
index a87ee88872cd..4b2979a7d9b1 100644
--- a/exporter/googlecloudpubsubexporter/config.go
+++ b/exporter/googlecloudpubsubexporter/config.go
@@ -8,6 +8,7 @@ import (
"regexp"
"time"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -17,15 +18,15 @@ type Config struct {
// Timeout for all API calls. If not set, defaults to 12 seconds.
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// Google Cloud Project ID where the Pubsub client will connect to
ProjectID string `mapstructure:"project"`
// User agent that will be used by the Pubsub client to connect to the service
UserAgent string `mapstructure:"user_agent"`
- // Override of the Pubsub endpoint, for testing only
- endpoint string
+ // Override of the Pubsub Endpoint, leave empty for the default endpoint
+ Endpoint string `mapstructure:"endpoint"`
// Only has effect if Endpoint is not ""
- insecure bool
+ Insecure bool `mapstructure:"insecure"`
// The fully qualified resource name of the Pubsub topic
Topic string `mapstructure:"topic"`
diff --git a/exporter/googlecloudpubsubexporter/exporter.go b/exporter/googlecloudpubsubexporter/exporter.go
index 357b915111bc..7a93980d22dc 100644
--- a/exporter/googlecloudpubsubexporter/exporter.go
+++ b/exporter/googlecloudpubsubexporter/exporter.go
@@ -94,16 +94,16 @@ func (ex *pubsubExporter) generateClientOptions() (copts []option.ClientOption)
if ex.userAgent != "" {
copts = append(copts, option.WithUserAgent(ex.userAgent))
}
- if ex.config.endpoint != "" {
- if ex.config.insecure {
+ if ex.config.Endpoint != "" {
+ if ex.config.Insecure {
var dialOpts []grpc.DialOption
if ex.userAgent != "" {
dialOpts = append(dialOpts, grpc.WithUserAgent(ex.userAgent))
}
- conn, _ := grpc.Dial(ex.config.endpoint, append(dialOpts, grpc.WithTransportCredentials(insecure.NewCredentials()))...)
+ conn, _ := grpc.Dial(ex.config.Endpoint, append(dialOpts, grpc.WithTransportCredentials(insecure.NewCredentials()))...)
copts = append(copts, option.WithGRPCConn(conn))
} else {
- copts = append(copts, option.WithEndpoint(ex.config.endpoint))
+ copts = append(copts, option.WithEndpoint(ex.config.Endpoint))
}
}
return copts
diff --git a/exporter/googlecloudpubsubexporter/exporter_test.go b/exporter/googlecloudpubsubexporter/exporter_test.go
index a698f8aeb057..099af678bcfd 100644
--- a/exporter/googlecloudpubsubexporter/exporter_test.go
+++ b/exporter/googlecloudpubsubexporter/exporter_test.go
@@ -31,9 +31,9 @@ func TestGenerateClientOptions(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
exporterConfig := cfg.(*Config)
- exporterConfig.endpoint = srv.Addr
+ exporterConfig.Endpoint = srv.Addr
exporterConfig.UserAgent = "test-user-agent"
- exporterConfig.insecure = true
+ exporterConfig.Insecure = true
exporterConfig.ProjectID = "my-project"
exporterConfig.Topic = "projects/my-project/topics/otlp"
exporterConfig.TimeoutSettings = exporterhelper.TimeoutSettings{
@@ -44,7 +44,7 @@ func TestGenerateClientOptions(t *testing.T) {
options := exporter.generateClientOptions()
assert.Equal(t, option.WithUserAgent("test-user-agent"), options[0])
- exporter.config.insecure = false
+ exporter.config.Insecure = false
options = exporter.generateClientOptions()
assert.Equal(t, option.WithUserAgent("test-user-agent"), options[0])
assert.Equal(t, option.WithEndpoint(srv.Addr), options[1])
@@ -63,8 +63,8 @@ func TestExporterDefaultSettings(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
exporterConfig := cfg.(*Config)
- exporterConfig.endpoint = srv.Addr
- exporterConfig.insecure = true
+ exporterConfig.Endpoint = srv.Addr
+ exporterConfig.Insecure = true
exporterConfig.ProjectID = "my-project"
exporterConfig.Topic = "projects/my-project/topics/otlp"
exporterConfig.TimeoutSettings = exporterhelper.TimeoutSettings{
@@ -91,9 +91,9 @@ func TestExporterCompression(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
exporterConfig := cfg.(*Config)
- exporterConfig.endpoint = srv.Addr
+ exporterConfig.Endpoint = srv.Addr
exporterConfig.UserAgent = "test-user-agent"
- exporterConfig.insecure = true
+ exporterConfig.Insecure = true
exporterConfig.ProjectID = "my-project"
exporterConfig.Topic = "projects/my-project/topics/otlp"
exporterConfig.TimeoutSettings = exporterhelper.TimeoutSettings{
diff --git a/exporter/googlecloudpubsubexporter/factory.go b/exporter/googlecloudpubsubexporter/factory.go
index 1cd69e70cd10..147bb8cf7207 100644
--- a/exporter/googlecloudpubsubexporter/factory.go
+++ b/exporter/googlecloudpubsubexporter/factory.go
@@ -96,7 +96,7 @@ func createTracesExporter(
pubsubExporter.consumeTraces,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithTimeout(pCfg.TimeoutSettings),
- exporterhelper.WithRetry(pCfg.RetrySettings),
+ exporterhelper.WithRetry(pCfg.BackOffConfig),
exporterhelper.WithQueue(pCfg.QueueSettings),
exporterhelper.WithStart(pubsubExporter.start),
exporterhelper.WithShutdown(pubsubExporter.shutdown),
@@ -117,7 +117,7 @@ func createMetricsExporter(
pubsubExporter.consumeMetrics,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithTimeout(pCfg.TimeoutSettings),
- exporterhelper.WithRetry(pCfg.RetrySettings),
+ exporterhelper.WithRetry(pCfg.BackOffConfig),
exporterhelper.WithQueue(pCfg.QueueSettings),
exporterhelper.WithStart(pubsubExporter.start),
exporterhelper.WithShutdown(pubsubExporter.shutdown),
@@ -139,7 +139,7 @@ func createLogsExporter(
pubsubExporter.consumeLogs,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithTimeout(pCfg.TimeoutSettings),
- exporterhelper.WithRetry(pCfg.RetrySettings),
+ exporterhelper.WithRetry(pCfg.BackOffConfig),
exporterhelper.WithQueue(pCfg.QueueSettings),
exporterhelper.WithStart(pubsubExporter.start),
exporterhelper.WithShutdown(pubsubExporter.shutdown),
diff --git a/exporter/googlecloudpubsubexporter/factory_test.go b/exporter/googlecloudpubsubexporter/factory_test.go
index a5c4cdeda2ab..399e17291606 100644
--- a/exporter/googlecloudpubsubexporter/factory_test.go
+++ b/exporter/googlecloudpubsubexporter/factory_test.go
@@ -8,7 +8,6 @@ import (
"testing"
"github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/exporter/exportertest"
@@ -24,14 +23,14 @@ func TestCreateDefaultConfig(t *testing.T) {
func TestType(t *testing.T) {
factory := NewFactory()
- assert.Equal(t, component.Type(metadata.Type), factory.Type())
+ assert.Equal(t, metadata.Type, factory.Type())
}
func TestCreateTracesExporter(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
eCfg := cfg.(*Config)
- eCfg.endpoint = "http://testing.invalid"
+ eCfg.Endpoint = "http://testing.invalid"
te, err := factory.CreateTracesExporter(
context.Background(),
@@ -46,7 +45,7 @@ func TestCreateMetricsExporter(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
eCfg := cfg.(*Config)
- eCfg.endpoint = "http://testing.invalid"
+ eCfg.Endpoint = "http://testing.invalid"
me, err := factory.CreateMetricsExporter(
context.Background(),
@@ -61,7 +60,7 @@ func TestLogsCreateExporter(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
eCfg := cfg.(*Config)
- eCfg.endpoint = "http://testing.invalid"
+ eCfg.Endpoint = "http://testing.invalid"
me, err := factory.CreateLogsExporter(
context.Background(),
@@ -76,7 +75,7 @@ func TestEnsureExporter(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig()
eCfg := cfg.(*Config)
- eCfg.endpoint = "http://testing.invalid"
+ eCfg.Endpoint = "http://testing.invalid"
exporter1 := ensureExporter(exportertest.NewNopCreateSettings(), eCfg)
exporter2 := ensureExporter(exportertest.NewNopCreateSettings(), eCfg)
diff --git a/exporter/googlecloudpubsubexporter/generated_component_test.go b/exporter/googlecloudpubsubexporter/generated_component_test.go
new file mode 100644
index 000000000000..bbe9f0c7a3be
--- /dev/null
+++ b/exporter/googlecloudpubsubexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package googlecloudpubsubexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/googlecloudpubsubexporter/go.mod b/exporter/googlecloudpubsubexporter/go.mod
index 053357e28c90..0629dfbbbb57 100644
--- a/exporter/googlecloudpubsubexporter/go.mod
+++ b/exporter/googlecloudpubsubexporter/go.mod
@@ -1,68 +1,82 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlecloudpubsubexporter
-go 1.20
+go 1.21
require (
- cloud.google.com/go/pubsub v1.33.0
- github.com/google/uuid v1.4.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
- google.golang.org/api v0.150.0
- google.golang.org/grpc v1.59.0
+ cloud.google.com/go/pubsub v1.37.0
+ github.com/google/uuid v1.6.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/zap v1.27.0
+ google.golang.org/api v0.172.0
+ google.golang.org/grpc v1.63.2
)
require (
- cloud.google.com/go v0.110.10 // indirect
- cloud.google.com/go/compute v1.23.1 // indirect
+ cloud.google.com/go v0.112.1 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
- cloud.google.com/go/iam v1.1.3 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ cloud.google.com/go/iam v1.1.6 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/s2a-go v0.1.7 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
- github.com/googleapis/gax-go/v2 v2.12.0 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.3 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.einride.tech/aip v0.66.0 // indirect
go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sync v0.5.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/crypto v0.21.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.3.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/googlecloudpubsubexporter/go.sum b/exporter/googlecloudpubsubexporter/go.sum
index 7647e7db8a19..a51cfe25b1af 100644
--- a/exporter/googlecloudpubsubexporter/go.sum
+++ b/exporter/googlecloudpubsubexporter/go.sum
@@ -1,21 +1,22 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
-cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
-cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0=
-cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78=
+cloud.google.com/go v0.112.1 h1:uJSeirPke5UNZHIb4SxfZklVSiWWVqW4oXlETwZziwM=
+cloud.google.com/go v0.112.1/go.mod h1:+Vbu+Y1UU+I1rjmzeMOb/8RfkKJK2Gyxi1X6jJCZLo4=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
-cloud.google.com/go/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc=
-cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE=
-cloud.google.com/go/pubsub v1.33.0 h1:6SPCPvWav64tj0sVX/+npCBKhUi/UjJehy9op/V3p2g=
-cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
+cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc=
+cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI=
+cloud.google.com/go/pubsub v1.37.0 h1:0uEEfaB1VIJzabPpwpZf44zWAKAme3zwKKxHk7vJQxQ=
+cloud.google.com/go/pubsub v1.37.0/go.mod h1:YQOQr1uiUM092EXwKs56OPT650nwnawc+8/IjoUeGzQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -25,10 +26,15 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -37,7 +43,6 @@ github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
@@ -47,8 +52,9 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
@@ -62,14 +68,12 @@ github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
-github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
-github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-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/googleapis/gax-go/v2 v2.12.3 h1:5/zPPDvw8Q1SuXjrqrZslrqT7dL/uJT2CQii/cLCKqA=
+github.com/googleapis/gax-go/v2 v2.12.3/go.mod h1:AKloxT6GtNbaLm8QTNSidHUVsHYcBHwWRvkNFJUQcS4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -78,15 +82,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -96,13 +99,17 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -110,92 +117,116 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+go.einride.tech/aip v0.66.0 h1:XfV+NQX6L7EOYK11yoHHFtndeaWh3KbD9/cN/6iWEt8=
+go.einride.tech/aip v0.66.0/go.mod h1:qAhMsfT7plxBX+Oy7Huol6YUvZ0ZzdUz26yZsQwfl1M=
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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
-golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
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.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=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
-golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -204,32 +235,33 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+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=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
+google.golang.org/api v0.172.0 h1:/1OcMZGPmW1rX2LCu2CmGUD1KXK1+pfzxotxyRUCCdk=
+google.golang.org/api v0.172.0/go.mod h1:+fJZq6QXWfa9pXhnIzsjx4yI22d4aI9ZpLb58gvXjis=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA=
-google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI=
-google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b h1:CIC2YMXmIhYw6evmhPxBKJ4fmLbOFtXQN/GV3XOZR8k=
-google.golang.org/genproto/googleapis/api v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:IBQ646DjkDkvUIsVq/cc03FUFQ9wbZu7yE396YcL870=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2 h1:rIo7ocm2roD9DcFIX67Ym8icoGCKSARAiPljFhh5suQ=
+google.golang.org/genproto/googleapis/api v0.0.0-20240311132316-a219d84964c2/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -241,13 +273,15 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
+gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/googlecloudpubsubexporter/internal/metadata/generated_status.go b/exporter/googlecloudpubsubexporter/internal/metadata/generated_status.go
index 48d4414d0182..952059865005 100644
--- a/exporter/googlecloudpubsubexporter/internal/metadata/generated_status.go
+++ b/exporter/googlecloudpubsubexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("googlecloudpubsub")
)
const (
- Type = "googlecloudpubsub"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/googlecloudpubsub")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/googlecloudpubsub")
+}
diff --git a/exporter/googlecloudpubsubexporter/metadata.yaml b/exporter/googlecloudpubsubexporter/metadata.yaml
index f38f9ae8a2ad..1768c6ec6d57 100644
--- a/exporter/googlecloudpubsubexporter/metadata.yaml
+++ b/exporter/googlecloudpubsubexporter/metadata.yaml
@@ -1,9 +1,14 @@
type: googlecloudpubsub
+scope_name: otelcol/googlecloudpubsub
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
active: [alexvanboxel]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
diff --git a/exporter/googlemanagedprometheusexporter/README.md b/exporter/googlemanagedprometheusexporter/README.md
index 40f2b5d70458..44d33445853b 100644
--- a/exporter/googlemanagedprometheusexporter/README.md
+++ b/exporter/googlemanagedprometheusexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: metrics |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fgooglemanagedprometheus%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fgooglemanagedprometheus) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fgooglemanagedprometheus%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fgooglemanagedprometheus) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@aabmass](https://www.github.com/aabmass), [@dashpole](https://www.github.com/dashpole), [@jsuereth](https://www.github.com/jsuereth), [@punya](https://www.github.com/punya), [@damemi](https://www.github.com/damemi), [@psx95](https://www.github.com/psx95) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter can be used to send metrics (including trace exemplars) to [Google Cloud Managed Service for Prometheus](https://cloud.google.com/stackdriver/docs/managed-prometheus). It is one of [several supported approaches for sending metrics to Google Cloud Managed Service for Prometheus](https://cloud.google.com/stackdriver/docs/managed-prometheus#gmp-data-collection).
diff --git a/exporter/googlemanagedprometheusexporter/config_test.go b/exporter/googlemanagedprometheusexporter/config_test.go
index deca503ecf01..8e784c25392e 100644
--- a/exporter/googlemanagedprometheusexporter/config_test.go
+++ b/exporter/googlemanagedprometheusexporter/config_test.go
@@ -20,7 +20,7 @@ import (
func TestLoadConfig(t *testing.T) {
factories, err := otelcoltest.NopFactories()
- assert.Nil(t, err)
+ assert.NoError(t, err)
factory := NewFactory()
factories.Exporters[metadata.Type] = factory
diff --git a/exporter/googlemanagedprometheusexporter/factory.go b/exporter/googlemanagedprometheusexporter/factory.go
index 27e254c854b9..548e144b2fab 100644
--- a/exporter/googlemanagedprometheusexporter/factory.go
+++ b/exporter/googlemanagedprometheusexporter/factory.go
@@ -59,6 +59,7 @@ func createMetricsExporter(
params,
cfg,
mExp.PushMetrics,
+ exporterhelper.WithStart(mExp.Start),
exporterhelper.WithShutdown(mExp.Shutdown),
// Disable exporterhelper Timeout, since we are using a custom mechanism
// within exporter itself
diff --git a/exporter/googlemanagedprometheusexporter/generated_component_test.go b/exporter/googlemanagedprometheusexporter/generated_component_test.go
new file mode 100644
index 000000000000..3b2347a22313
--- /dev/null
+++ b/exporter/googlemanagedprometheusexporter/generated_component_test.go
@@ -0,0 +1,87 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package googlemanagedprometheusexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/googlemanagedprometheusexporter/go.mod b/exporter/googlemanagedprometheusexporter/go.mod
index 85443368b934..431c38c94093 100644
--- a/exporter/googlemanagedprometheusexporter/go.mod
+++ b/exporter/googlemanagedprometheusexporter/go.mod
@@ -1,67 +1,68 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/googlemanagedprometheusexporter
-go 1.20
+go 1.21
require (
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/otelcol v0.89.0
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
)
require (
- cloud.google.com/go v0.110.10 // indirect
- cloud.google.com/go/compute v1.23.2 // indirect
+ cloud.google.com/go v0.112.0 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
- cloud.google.com/go/logging v1.8.1 // indirect
- cloud.google.com/go/longrunning v0.5.3 // indirect
- cloud.google.com/go/monitoring v1.16.2 // indirect
- cloud.google.com/go/trace v1.10.3 // indirect
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0 // indirect
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0 // indirect
+ cloud.google.com/go/logging v1.9.0 // indirect
+ cloud.google.com/go/longrunning v0.5.5 // indirect
+ cloud.google.com/go/monitoring v1.18.0 // indirect
+ cloud.google.com/go/trace v1.10.5 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 // indirect
+ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-kit/log v0.2.1 // indirect
- github.com/go-logfmt/logfmt v0.5.1 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/google/s2a-go v0.1.7 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
github.com/googleapis/gax-go/v2 v2.12.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/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/knadh/koanf/v2 v2.1.1 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
@@ -72,55 +73,62 @@ require (
github.com/tidwall/wal v1.1.7 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/confmap v0.89.0 // indirect
- go.opentelemetry.io/collector/connector v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/processor v0.89.0 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/propagators/b3 v1.20.0 // indirect
- go.opentelemetry.io/otel v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/connector v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0 // indirect
+ go.opentelemetry.io/collector/processor v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sync v0.5.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/crypto v0.21.0 // indirect
+ golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/oauth2 v0.17.0 // indirect
+ golang.org/x/sync v0.6.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.3.0 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/api v0.150.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/api v0.162.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/googlemanagedprometheusexporter/go.sum b/exporter/googlemanagedprometheusexporter/go.sum
index 2864e545a673..47de749901ef 100644
--- a/exporter/googlemanagedprometheusexporter/go.sum
+++ b/exporter/googlemanagedprometheusexporter/go.sum
@@ -1,85 +1,40 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
-cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
-cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
-cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
-cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
-cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y=
-cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
-cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
-cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
-cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
-cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
-cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute v1.23.2 h1:nWEMDhgbBkBJjfpVySqU4jgWdc22PLR0o4vEexZHers=
-cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns=
+cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM=
+cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
-cloud.google.com/go/logging v1.8.1 h1:26skQWPeYhvIasWKm48+Eq7oUqdcdbwsCVwz5Ys0FvU=
-cloud.google.com/go/logging v1.8.1/go.mod h1:TJjR+SimHwuC8MZ9cjByQulAMgni+RkXeI3wwctHJEI=
-cloud.google.com/go/longrunning v0.5.3 h1:maKa7O9YTzmVzwdlRKr981U1Ys2auup6rpeMt8y3+RU=
-cloud.google.com/go/longrunning v0.5.3/go.mod h1:y/0ga59EYu58J6SHmmQOvekvND2qODbu8ywBBW7EK7Y=
-cloud.google.com/go/monitoring v1.16.2 h1:gx7BDZcoRqX5DfuJzw9LdhVjEkqCLmDXScdnrmIy9ik=
-cloud.google.com/go/monitoring v1.16.2/go.mod h1:B44KGwi4ZCF8Rk/5n+FWeispDXoKSk9oss2QNlXJBgc=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
-cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
-cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
-cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
-cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-cloud.google.com/go/trace v1.10.3 h1:yiQ2EdegdiZDPwNPoUqGYAMd0wNValT/NRsC1XGyBJ0=
-cloud.google.com/go/trace v1.10.3/go.mod h1:Ke1bgfc73RV3wUFml+uQp7EsDw4dGaETLxB7Iq/r4CY=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
+cloud.google.com/go/logging v1.9.0 h1:iEIOXFO9EmSiTjDmfpbRjOxECO7R8C7b8IXUGOj7xZw=
+cloud.google.com/go/logging v1.9.0/go.mod h1:1Io0vnZv4onoUnsVUQY3HZ3Igb1nBchky0A0y7BBBhE=
+cloud.google.com/go/longrunning v0.5.5 h1:GOE6pZFdSrTb4KAiKnXsJBtlE6mEyaW44oKyMILWnOg=
+cloud.google.com/go/longrunning v0.5.5/go.mod h1:WV2LAxD8/rg5Z1cNW6FJ/ZpX4E4VnDnoTk0yawPBB7s=
+cloud.google.com/go/monitoring v1.18.0 h1:NfkDLQDG2UR3WYZVQE8kwSbUIEyIqJUPl+aOQdFH1T4=
+cloud.google.com/go/monitoring v1.18.0/go.mod h1:c92vVBCeq/OB4Ioyo+NbN2U7tlg5ZH41PZcdvfc+Lcg=
+cloud.google.com/go/trace v1.10.5 h1:0pr4lIKJ5XZFYD9GtxXEWr0KkVeigc3wlGpZco0X1oA=
+cloud.google.com/go/trace v1.10.5/go.mod h1:9hjCV1nGBCtXbAE4YK7OqJ8pmPYSxPA0I67JwRd5s3M=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0 h1:jYuZ3VSmHtR/OE4ZNlhgaWefopMKh8kxHMITQ7hXB0s=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.45.0/go.mod h1:b8EPYWl+yGWfPDP2P1slOiJkimNOQMD34szyZt1G0+s=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0 h1:Kim3EFONcbm78LF3B/EPFegmsKtFYBNcoJ89ubBPblw=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.45.0/go.mod h1:wyhLy43DJk49NlzxNhoqF0ueRjS3oBMJc1bjTmyYxiQ=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0 h1:OEgjQy1rH4Fbn5IpuI9d0uhLl+j6DkDvh9Q2Ucd6GK8=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.21.0/go.mod h1:EUfJ8lb3pjD8VasPPwqIvG2XVCE6DOT8tY5tcwbWA+A=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.45.0 h1:/BF7rO6PYcmFoyJrq6HA3LqQpFSQei9aNuO1fvV3OqU=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0 h1:o/Nf55GfyLwGDaHkVAkRGgBXeExce73L6N9w2PZTB3k=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.45.0/go.mod h1:qkFPtMouQjW5ugdHIOthiTbweVHUTqbS0Qsu55KqXks=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0 h1:7jymiL7lvmjgG8hMfvZ6qqA39VuiGEmCmFLd0N0tMKY=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector v0.46.0/go.mod h1:w3gKj9vyvd9n8jh2jpOMVLGy87QqB/AxDek2CoRwpt0=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0 h1:kitScZTE4xINfkp7W3duwPe18Jp8OPjm14Ybxgjrp3E=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/collector/googlemanagedprometheus v0.46.0/go.mod h1:r+z/vuDdIelQGGJHiVMvNPCW3NiRNpFaeA9OT4L/K/c=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0 h1:xl4IRfBXPZxwu7dIza8n6wdX5zEJpi0boF5dX22MbYE=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.22.0/go.mod h1:P69hhmQh4zwnU5iEdGVowFWg1DiP9x2KsCYBOIaP4us=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0 h1:vaXjFX09ygxNxAiHwByzPBVKltYFVZR8HN4U3TR4vn8=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.46.0/go.mod h1:V28hx+cUCZC9e3qcqszMb+Sbt8cQZtHTiXOmyDzoDOg=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0 h1:xlfPHZ5QFvHad9KmrVDoaPpJUT/XluwNDMNHn+k7z/s=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.46.0/go.mod h1:mzI44HpPp75Z8/a1sJP1asdHdu7Wui7t10SZ9EEPPnM=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -88,228 +43,130 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
-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/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs=
github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU=
github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU=
-github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g=
-github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-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/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
@@ -324,376 +181,212 @@ github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFA
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
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.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/confignet v0.89.0 h1:Ekh+XhXelnnJ9as8IWhdUOfjnDPhz12XMJQ8sWNAbGw=
-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/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/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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-go.opentelemetry.io/collector/extension/zpagesextension v0.89.0 h1:opvHcGANx+dS4HJwGTPtRMd6dZdOmmGn6c3PfW/bihQ=
-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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-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.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
-golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/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=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
+golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
+golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
-golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/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.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
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=
-golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
-golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/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=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
-google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
+google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps=
+google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
-google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
-google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -702,37 +395,16 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
-rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
diff --git a/exporter/googlemanagedprometheusexporter/internal/metadata/generated_status.go b/exporter/googlemanagedprometheusexporter/internal/metadata/generated_status.go
index fe5ab47c090a..a496aa57d873 100644
--- a/exporter/googlemanagedprometheusexporter/internal/metadata/generated_status.go
+++ b/exporter/googlemanagedprometheusexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("googlemanagedprometheus")
)
const (
- Type = "googlemanagedprometheus"
MetricsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/googlemanagedprometheus")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/googlemanagedprometheus")
+}
diff --git a/exporter/googlemanagedprometheusexporter/metadata.yaml b/exporter/googlemanagedprometheusexporter/metadata.yaml
index 6b3d0c326f7e..9193ad05d265 100644
--- a/exporter/googlemanagedprometheusexporter/metadata.yaml
+++ b/exporter/googlemanagedprometheusexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: googlemanagedprometheus
+scope_name: otelcol/googlemanagedprometheus
status:
class: exporter
stability:
beta: [metrics]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
active: [aabmass, dashpole, jsuereth, punya, damemi, psx95]
+
+tests:
+ skip_lifecycle: true
diff --git a/exporter/googlemanagedprometheusexporter/package_test.go b/exporter/googlemanagedprometheusexporter/package_test.go
new file mode 100644
index 000000000000..d62378e469eb
--- /dev/null
+++ b/exporter/googlemanagedprometheusexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package googlemanagedprometheusexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/honeycombmarkerexporter/README.md b/exporter/honeycombmarkerexporter/README.md
index c11819579877..0f036d0b62e2 100644
--- a/exporter/honeycombmarkerexporter/README.md
+++ b/exporter/honeycombmarkerexporter/README.md
@@ -1,42 +1,39 @@
-@@ -0,0 +1,18 @@
# Honeycomb Marker Exporter
+
+| Status | |
+| ------------- |-----------|
+| Stability | [alpha]: logs |
+| Distributions | [contrib] |
+| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fhoneycombmarker%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fhoneycombmarker) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fhoneycombmarker%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fhoneycombmarker) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@TylerHelmuth](https://www.github.com/TylerHelmuth), [@fchikwekwe](https://www.github.com/fchikwekwe) |
-This exporter allows creating markers, via the Honeycomb Markers API, based on the look of incoming telemetry.
+[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
+[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
+
+
+This exporter allows creating [markers](https://docs.honeycomb.io/working-with-your-data/markers/), via the [Honeycomb Markers API](https://docs.honeycomb.io/api/tag/Markers#operation/createMarker), based on the look of incoming telemetry.
The following configuration options are supported:
-* `api_key` (Required): This is the API key (also called Write Key) for your Honeycomb account.
-* `api_url` (Required): You can set the hostname to send marker data to.
-* `markers` (Required): This specifies the exact configuration to create an event marker.
- * `type`: Specifies the marker type. Markers with the same type will appear in the same color in Honeycomb. MarkerType or MarkerColor should be set.
- * `color`: Specifies the marker color. Will only be used if MarkerType is not set.
- * `messagefield`: This is the attribute that will be used as the message. If necessary the value will be converted to a string.
- * `urlfield`: This is the attribute that will be used as the url. If necessary the value will be converted to a string.
- * `rules`: This is a list of OTTL rules that determine when to create an event marker.
- * `resourceconditions`: A list of ottlresource conditions that determine a match
- * `logconditions`: A list of ottllog conditions that determine a match
- Example:
+* `api_key` (Required): This is the API key for your Honeycomb account.
+* `api_url` (Optional): This sets the hostname to send marker data to. If not set, will default to `https://api.honeycomb.io/`
+* `markers` (Required): This is a list of configurations to create an event marker.
+ * `type` (Required): Specifies the marker type.
+ * `rules` (Required): This is a list of [OTTL](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/pkg/ottl) rules that determine when to create an event marker.
+ * `log_conditions` (Required): A list of [OTTL log](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/pkg/ottl/contexts/ottllog) conditions that determine a match. The marker will be created if **ANY** condition matches.
+ * `dataset_slug` (Optional): The dataset in which to create the marker. If not set, will default to `__all__`.
+ * `message_key` (Optional): The key of the attribute whose value will be used as the marker's message. If necessary the value will be converted to a string.
+ * `url_key` (Optional): The key of the attribute whose value will be used as the marker's url. If necessary the value will be converted to a string.
+Example:
```yaml
exporters:
- honeycomb:
- api_key: "my-api-key"
- api_url: "https://api.testhost.io"
+ honeycombmarker:
+ api_key: {{env:HONEYCOMB_API_KEY}}
markers:
- - type: "fooType",
- messagefield: "test message",
- urlfield: "https://api.testhost.io",
- rules:
- - resourceconditions:
- - IsMatch(attributes["test"], ".*")
- - logconditions:
- - body == "test"
- - color: "green",
- messagefield: "another test message",
- urlfield: "https://api.testhost.io",
+ # Creates a new marker anytime the exporter sees a k8s event with a reason of Backoff
+ - type: k8s-backoff-events
rules:
- - resourceconditions:
- - IsMatch(attributes["test"], ".*")
- - logconditions:
- - body == "test"
-```
\ No newline at end of file
+ log_conditions:
+ - IsMap(body) and IsMap(body["object"]) and body["object"]["reason"] == "Backoff"
+```
diff --git a/exporter/honeycombmarkerexporter/config.go b/exporter/honeycombmarkerexporter/config.go
index bc9bf7d2987c..47b739f36120 100644
--- a/exporter/honeycombmarkerexporter/config.go
+++ b/exporter/honeycombmarkerexporter/config.go
@@ -7,7 +7,10 @@ import (
"fmt"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
"go.uber.org/zap"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/filterottl"
@@ -24,58 +27,54 @@ type Config struct {
// Markers is the list of markers to create
Markers []Marker `mapstructure:"markers"`
+
+ confighttp.ClientConfig `mapstructure:",squash"`
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
}
type Marker struct {
- // Type defines the type of Marker. Markers with the same type appear in Honeycomb with the same color
+ // Type defines the type of Marker.
Type string `mapstructure:"type"`
- // Color is the color of the Marker. Will only be used if the Type does not already exist.
- Color string `mapstructure:"color"`
-
- // MessageField is the attribute that will be used as the message.
+ // MessageKey is the attribute that will be used as the message.
// If necessary the value will be converted to a string.
- MessageField string `mapstructure:"message_field"`
+ MessageKey string `mapstructure:"message_key"`
- // URLField is the attribute that will be used as the url.
+ // URLKey is the attribute that will be used as the url.
// If necessary the value will be converted to a string.
- URLField string `mapstructure:"url_field"`
+ URLKey string `mapstructure:"url_key"`
// Rules are the OTTL rules that determine when a piece of telemetry should be turned into a Marker
Rules Rules `mapstructure:"rules"`
+
+ // DatasetSlug is the endpoint that specifies the Honeycomb environment
+ DatasetSlug string `mapstructure:"dataset_slug"`
}
type Rules struct {
- // ResourceConditions is the list of ottlresource conditions that determine a match
- ResourceConditions []string `mapstructure:"resource_conditions"`
-
// LogConditions is the list of ottllog conditions that determine a match
LogConditions []string `mapstructure:"log_conditions"`
}
-var defaultCfg = createDefaultConfig().(*Config)
+var _ component.Config = (*Config)(nil)
func (cfg *Config) Validate() error {
- if cfg == nil {
- cfg = defaultCfg
- }
-
if cfg.APIKey == "" {
return fmt.Errorf("invalid API Key")
}
if len(cfg.Markers) != 0 {
for _, m := range cfg.Markers {
- if len(m.Rules.ResourceConditions) == 0 && len(m.Rules.LogConditions) == 0 {
- return fmt.Errorf("no rules supplied for Marker %v", m)
+ if m.Type == "" {
+ return fmt.Errorf("marker must have a type %v", m)
}
- _, err := filterottl.NewBoolExprForResource(m.Rules.ResourceConditions, filterottl.StandardResourceFuncs(), ottl.PropagateError, component.TelemetrySettings{Logger: zap.NewNop()})
- if err != nil {
- return err
+ if len(m.Rules.LogConditions) == 0 {
+ return fmt.Errorf("marker must have rules %v", m)
}
- _, err = filterottl.NewBoolExprForLog(m.Rules.LogConditions, filterottl.StandardLogFuncs(), ottl.PropagateError, component.TelemetrySettings{Logger: zap.NewNop()})
+ _, err := filterottl.NewBoolExprForLog(m.Rules.LogConditions, filterottl.StandardLogFuncs(), ottl.PropagateError, component.TelemetrySettings{Logger: zap.NewNop()})
if err != nil {
return err
}
diff --git a/exporter/honeycombmarkerexporter/config_test.go b/exporter/honeycombmarkerexporter/config_test.go
index 9fbdc724db56..df0298fb98eb 100644
--- a/exporter/honeycombmarkerexporter/config_test.go
+++ b/exporter/honeycombmarkerexporter/config_test.go
@@ -10,7 +10,9 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter/internal/metadata"
)
@@ -26,19 +28,14 @@ func TestLoadConfig(t *testing.T) {
expected component.Config
}{
{
- id: component.NewIDWithName("honeycomb", ""),
+ id: component.NewIDWithName(metadata.Type, ""),
expected: &Config{
APIKey: "test-apikey",
- APIURL: "https://api.testhost.io",
+ APIURL: "https://api.honeycomb.io",
Markers: []Marker{
{
- Type: "fooType",
- MessageField: "test message",
- URLField: "https://api.testhost.io",
+ Type: "fooType",
Rules: Rules{
- ResourceConditions: []string{
- `IsMatch(attributes["test"], ".*")`,
- },
LogConditions: []string{
`body == "test"`,
},
@@ -48,23 +45,23 @@ func TestLoadConfig(t *testing.T) {
},
},
{
- id: component.NewIDWithName("honeycomb", "color_no_type"),
+ id: component.NewIDWithName(metadata.Type, "all_fields"),
expected: &Config{
- APIKey: "test-apikey",
- APIURL: "https://api.testhost.io",
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ APIKey: "test-apikey",
+ APIURL: "https://api.testhost.io",
Markers: []Marker{
{
- Color: "green",
- MessageField: "test message",
- URLField: "https://api.testhost.io",
+ Type: "fooType",
+ MessageKey: "test message",
+ URLKey: "https://api.testhost.io",
Rules: Rules{
- ResourceConditions: []string{
- `IsMatch(attributes["test"], ".*")`,
- },
LogConditions: []string{
`body == "test"`,
},
},
+ DatasetSlug: "testing",
},
},
},
diff --git a/exporter/honeycombmarkerexporter/factory.go b/exporter/honeycombmarkerexporter/factory.go
index 36e26f4d7e7f..0008f05fe028 100644
--- a/exporter/honeycombmarkerexporter/factory.go
+++ b/exporter/honeycombmarkerexporter/factory.go
@@ -23,9 +23,7 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
- APIKey: "",
- APIURL: "api.honeycomb.io:443",
- Markers: []Marker{},
+ APIURL: "https://api.honeycomb.io",
}
}
@@ -36,12 +34,19 @@ func createLogsExporter(
) (exporter.Logs, error) {
cf := cfg.(*Config)
- exporter := newLogsExporter(set.Logger, cf)
+ logsExp, err := newHoneycombLogsExporter(set, cf)
+ if err != nil {
+ return nil, err
+ }
return exporterhelper.NewLogsExporter(
ctx,
set,
cfg,
- exporter.exportLogs,
+ logsExp.exportMarkers,
+ exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
+ exporterhelper.WithRetry(cf.BackOffConfig),
+ exporterhelper.WithQueue(cf.QueueSettings),
+ exporterhelper.WithStart(logsExp.start),
)
}
diff --git a/exporter/honeycombmarkerexporter/generated_component_test.go b/exporter/honeycombmarkerexporter/generated_component_test.go
new file mode 100644
index 000000000000..688be75d6f16
--- /dev/null
+++ b/exporter/honeycombmarkerexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package honeycombmarkerexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/honeycombmarkerexporter/go.mod b/exporter/honeycombmarkerexporter/go.mod
index 71db80799c9d..370778741495 100644
--- a/exporter/honeycombmarkerexporter/go.mod
+++ b/exporter/honeycombmarkerexporter/go.mod
@@ -1,59 +1,83 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/alecthomas/participle/v2 v2.1.0 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/alecthomas/participle/v2 v2.1.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/felixge/httpsnoop v1.0.4 // indirect
+ github.com/fsnotify/fsnotify v1.7.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gobwas/glob v0.2.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect
github.com/iancoleman/strcase v0.3.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/rs/cors v1.10.1 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/honeycombmarkerexporter/go.sum b/exporter/honeycombmarkerexporter/go.sum
index b95c66eb5230..9aaa3c135f31 100644
--- a/exporter/honeycombmarkerexporter/go.sum
+++ b/exporter/honeycombmarkerexporter/go.sum
@@ -1,83 +1,70 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/alecthomas/assert/v2 v2.3.0 h1:mAsH2wmvjsuvyBvAmCtm7zFsBlb8mIHx5ySLVdDZXL0=
-github.com/alecthomas/participle/v2 v2.1.0 h1:z7dElHRrOEEq45F2TG5cbQihMtNTv8vwldytDj7Wrz4=
-github.com/alecthomas/participle/v2 v2.1.0/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
+github.com/alecthomas/assert/v2 v2.3.0/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
+github.com/alecthomas/participle/v2 v2.1.1 h1:hrjKESvSqGHzRb4yW1ciisFJ4p3MGYih6icjJvbsmV8=
+github.com/alecthomas/participle/v2 v2.1.1/go.mod h1:Y1+hAs8DHPmc3YUFzqllV+eSQ9ljPTk0ZkPMtEdAx2c=
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
+github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
+github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
+github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
+github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
+github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -87,105 +74,108 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
+github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -193,38 +183,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/honeycombmarkerexporter/internal/metadata/generated_status.go b/exporter/honeycombmarkerexporter/internal/metadata/generated_status.go
index e475b1c0f3b6..b4384d4b2340 100644
--- a/exporter/honeycombmarkerexporter/internal/metadata/generated_status.go
+++ b/exporter/honeycombmarkerexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("honeycombmarker")
)
const (
- Type = "honeycombmarker"
- LogsStability = component.StabilityLevelDevelopment
+ LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/honeycombmarker")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/honeycombmarker")
+}
diff --git a/exporter/honeycombmarkerexporter/logs_exporter.go b/exporter/honeycombmarkerexporter/logs_exporter.go
index 3dfe36d5d9bc..297eddbec852 100644
--- a/exporter/honeycombmarkerexporter/logs_exporter.go
+++ b/exporter/honeycombmarkerexporter/logs_exporter.go
@@ -4,25 +4,168 @@
package honeycombmarkerexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/honeycombmarkerexporter"
import (
+ "bytes"
"context"
+ "encoding/json"
+ "fmt"
+ "io"
+ "net/http"
+ "runtime"
+ "strings"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/plog"
- "go.uber.org/zap"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/expr"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/filter/filterottl"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/ottl/contexts/ottllog"
+)
+
+const (
+ defaultDatasetSlug = "__all__"
+ userAgentHeaderKey = "User-Agent"
+ contentType = "Content-Type"
+ honeycombTeam = "X-Honeycomb-Team"
)
+type marker struct {
+ Marker
+ logBoolExpr expr.BoolExpr[ottllog.TransformContext]
+}
+
type honeycombLogsExporter struct {
- logger *zap.Logger
- markers []Marker
+ set component.TelemetrySettings
+ client *http.Client
+ httpClientSettings confighttp.ClientConfig
+ apiURL string
+ apiKey configopaque.String
+ markers []marker
+ userAgentHeader string
}
-func newLogsExporter(logger *zap.Logger, config *Config) *honeycombLogsExporter {
+func newHoneycombLogsExporter(set exporter.CreateSettings, config *Config) (*honeycombLogsExporter, error) {
+ if config == nil {
+ return nil, fmt.Errorf("unable to create honeycombLogsExporter without config")
+ }
+
+ telemetrySettings := set.TelemetrySettings
+ markers := make([]marker, len(config.Markers))
+ for i, m := range config.Markers {
+ matchLogConditions, err := filterottl.NewBoolExprForLog(m.Rules.LogConditions, filterottl.StandardLogFuncs(), ottl.PropagateError, telemetrySettings)
+ if err != nil {
+ return nil, fmt.Errorf("failed to parse log conditions: %w", err)
+ }
+ markers[i] = marker{
+ Marker: m,
+ logBoolExpr: matchLogConditions,
+ }
+ }
logsExp := &honeycombLogsExporter{
- logger: logger,
- markers: config.Markers,
+ set: telemetrySettings,
+ httpClientSettings: config.ClientConfig,
+ apiURL: config.APIURL,
+ apiKey: config.APIKey,
+ markers: markers,
+ userAgentHeader: fmt.Sprintf("%s/%s (%s/%s)", set.BuildInfo.Description, set.BuildInfo.Version, runtime.GOOS, runtime.GOARCH),
+ }
+ return logsExp, nil
+}
+
+func (e *honeycombLogsExporter) exportMarkers(ctx context.Context, ld plog.Logs) error {
+ for i := 0; i < ld.ResourceLogs().Len(); i++ {
+ rlogs := ld.ResourceLogs().At(i)
+ for j := 0; j < rlogs.ScopeLogs().Len(); j++ {
+ slogs := rlogs.ScopeLogs().At(j)
+ logs := slogs.LogRecords()
+ for k := 0; k < logs.Len(); k++ {
+ logRecord := logs.At(k)
+ tCtx := ottllog.NewTransformContext(logRecord, slogs.Scope(), rlogs.Resource())
+ for _, m := range e.markers {
+ match, err := m.logBoolExpr.Eval(ctx, tCtx)
+ if err != nil {
+ return err
+ }
+ if match {
+ err := e.sendMarker(ctx, m, logRecord)
+ if err != nil {
+ return err
+ }
+ }
+ }
+
+ }
+ }
+ }
+ return nil
+}
+
+func (e *honeycombLogsExporter) sendMarker(ctx context.Context, m marker, logRecord plog.LogRecord) error {
+ requestMap := map[string]string{
+ "type": m.Type,
+ }
+
+ messageValue, found := logRecord.Attributes().Get(m.MessageKey)
+ if found {
+ requestMap["message"] = messageValue.AsString()
+ }
+
+ URLValue, found := logRecord.Attributes().Get(m.URLKey)
+ if found {
+ requestMap["url"] = URLValue.AsString()
+ }
+
+ request, err := json.Marshal(requestMap)
+ if err != nil {
+ return err
+ }
+
+ datasetSlug := m.DatasetSlug
+ if datasetSlug == "" {
+ datasetSlug = defaultDatasetSlug
+ }
+
+ url := fmt.Sprintf("%s/1/markers/%s", strings.TrimRight(e.apiURL, "/"), datasetSlug)
+ req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(request))
+ if err != nil {
+ return err
+ }
+
+ req.Header.Set(contentType, "application/json")
+ req.Header.Set(honeycombTeam, string(e.apiKey))
+ req.Header.Set(userAgentHeaderKey, e.userAgentHeader)
+
+ resp, err := e.client.Do(req)
+ if err != nil {
+ return fmt.Errorf("failed to send a request: %w", err)
}
- return logsExp
+
+ defer func() {
+ _ = resp.Body.Close()
+ }()
+
+ if resp.StatusCode < http.StatusOK || resp.StatusCode >= http.StatusBadRequest {
+ b, err := io.ReadAll(resp.Body)
+ if err != nil {
+ return fmt.Errorf("marker creation failed with %s and unable to read response body: %w", resp.Status, err)
+ }
+ return fmt.Errorf("marker creation failed with %s and message: %s", resp.Status, b)
+ }
+
+ return nil
}
-func (e *honeycombLogsExporter) exportLogs(_ context.Context, _ plog.Logs) error {
+func (e *honeycombLogsExporter) start(ctx context.Context, host component.Host) (err error) {
+ client, err := e.httpClientSettings.ToClientContext(ctx, host, e.set)
+
+ if err != nil {
+ return err
+ }
+
+ e.client = client
+
return nil
}
diff --git a/exporter/honeycombmarkerexporter/logs_exporter_test.go b/exporter/honeycombmarkerexporter/logs_exporter_test.go
new file mode 100644
index 000000000000..d3daae01f66b
--- /dev/null
+++ b/exporter/honeycombmarkerexporter/logs_exporter_test.go
@@ -0,0 +1,301 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package honeycombmarkerexporter
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+ "net/http/httptest"
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/plog"
+)
+
+func TestExportMarkers(t *testing.T) {
+ tests := []struct {
+ name string
+ config Config
+ attributeMap map[string]string
+ expectedURL string
+ }{
+ {
+ name: "all fields",
+ config: Config{
+ APIKey: "test-apikey",
+ Markers: []Marker{
+ {
+ Type: "test-type",
+ MessageKey: "message",
+ URLKey: "url",
+ DatasetSlug: "test-dataset",
+ Rules: Rules{
+ LogConditions: []string{
+ `body == "test"`,
+ },
+ },
+ },
+ },
+ },
+ attributeMap: map[string]string{
+ "message": "this is a test message",
+ "url": "https://api.testhost.io",
+ "type": "test-type",
+ },
+ expectedURL: "/1/markers/test-dataset",
+ },
+ {
+ name: "no message key",
+ config: Config{
+ APIKey: "test-apikey",
+ Markers: []Marker{
+ {
+ Type: "test-type",
+ URLKey: "url",
+ DatasetSlug: "test-dataset",
+ Rules: Rules{
+ LogConditions: []string{
+ `body == "test"`,
+ },
+ },
+ },
+ },
+ },
+ attributeMap: map[string]string{
+ "url": "https://api.testhost.io",
+ "type": "test-type",
+ },
+ expectedURL: "/1/markers/test-dataset",
+ },
+ {
+ name: "no url",
+ config: Config{
+ APIKey: "test-apikey",
+ Markers: []Marker{
+ {
+ Type: "test-type",
+ MessageKey: "message",
+ DatasetSlug: "test-dataset",
+ Rules: Rules{
+ LogConditions: []string{
+ `body == "test"`,
+ },
+ },
+ },
+ },
+ },
+ attributeMap: map[string]string{
+ "message": "this is a test message",
+ "type": "test-type",
+ },
+ expectedURL: "/1/markers/test-dataset",
+ },
+ {
+ name: "no dataset_slug",
+ config: Config{
+ APIKey: "test-apikey",
+ Markers: []Marker{
+ {
+ Type: "test-type",
+ Rules: Rules{
+ LogConditions: []string{
+ `body == "test"`,
+ },
+ },
+ },
+ },
+ },
+ attributeMap: map[string]string{
+ "type": "test-type",
+ },
+ expectedURL: "/1/markers/__all__",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ markerServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+ decodedBody := map[string]any{}
+ err := json.NewDecoder(req.Body).Decode(&decodedBody)
+
+ require.NoError(t, err)
+
+ assert.Equal(t, len(tt.attributeMap), len(decodedBody))
+
+ for attr := range tt.attributeMap {
+ assert.Equal(t, tt.attributeMap[attr], decodedBody[attr])
+ }
+ assert.Contains(t, req.URL.Path, tt.expectedURL)
+
+ apiKey := req.Header.Get(honeycombTeam)
+ assert.Equal(t, string(tt.config.APIKey), apiKey)
+
+ userAgent := req.Header.Get(userAgentHeaderKey)
+ assert.NotEmpty(t, userAgent)
+ assert.Equal(t, strings.Contains(userAgent, "OpenTelemetry Collector"), true)
+
+ rw.WriteHeader(http.StatusAccepted)
+ }))
+ defer markerServer.Close()
+
+ config := tt.config
+ config.APIURL = markerServer.URL
+
+ f := NewFactory()
+ exp, err := f.CreateLogsExporter(context.Background(), exportertest.NewNopCreateSettings(), &config)
+ require.NoError(t, err)
+
+ err = exp.Start(context.Background(), componenttest.NewNopHost())
+ assert.NoError(t, err)
+
+ logs := constructLogs(tt.attributeMap)
+ err = exp.ConsumeLogs(context.Background(), logs)
+ assert.NoError(t, err)
+ })
+ }
+}
+
+func constructLogs(attributes map[string]string) plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ sl := rl.ScopeLogs().AppendEmpty()
+ l := sl.LogRecords().AppendEmpty()
+
+ l.Body().SetStr("test")
+ for attr, attrVal := range attributes {
+ l.Attributes().PutStr(attr, attrVal)
+ }
+ return logs
+}
+
+func TestExportMarkers_Error(t *testing.T) {
+ tests := []struct {
+ name string
+ config Config
+ responseCode int
+ errorMessage string
+ }{
+ {
+ name: "unauthorized greater than 400",
+ config: Config{
+ APIKey: "test-apikey",
+ Markers: []Marker{
+ {
+ Type: "test-type",
+ MessageKey: "message",
+ URLKey: "https://api.testhost.io",
+ DatasetSlug: "test-dataset",
+ Rules: Rules{
+ LogConditions: []string{
+ `body == "test"`,
+ },
+ },
+ },
+ },
+ },
+ responseCode: http.StatusUnauthorized,
+ errorMessage: "marker creation failed with 401",
+ },
+ {
+ name: "continue less than 200",
+ config: Config{
+ APIKey: "test-apikey",
+ Markers: []Marker{
+ {
+ Type: "test-type",
+ MessageKey: "message",
+ URLKey: "https://api.testhost.io",
+ DatasetSlug: "test-dataset",
+ Rules: Rules{
+ LogConditions: []string{
+ `body == "test"`,
+ },
+ },
+ },
+ },
+ },
+ responseCode: http.StatusSwitchingProtocols,
+ errorMessage: "marker creation failed with 101",
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ markerServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
+ rw.WriteHeader(tt.responseCode)
+ }))
+ defer markerServer.Close()
+
+ config := tt.config
+ config.APIURL = markerServer.URL
+
+ f := NewFactory()
+ exp, err := f.CreateLogsExporter(context.Background(), exportertest.NewNopCreateSettings(), &config)
+ require.NoError(t, err)
+
+ err = exp.Start(context.Background(), componenttest.NewNopHost())
+ assert.NoError(t, err)
+
+ logs := constructLogs(map[string]string{})
+ err = exp.ConsumeLogs(context.Background(), logs)
+ assert.ErrorContains(t, err, tt.errorMessage)
+ })
+ }
+}
+
+func TestExportMarkers_NoAPICall(t *testing.T) {
+ tests := []struct {
+ name string
+ config Config
+ }{
+ {
+ name: "all fields",
+ config: Config{
+ APIKey: "test-apikey",
+ Markers: []Marker{
+ {
+ Type: "test-type",
+ MessageKey: "message",
+ URLKey: "url",
+ DatasetSlug: "test-dataset",
+ Rules: Rules{
+ LogConditions: []string{
+ `body == "foo"`,
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ markerServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
+ assert.Fail(t, "should not call the markers api")
+ rw.WriteHeader(http.StatusBadRequest) // 400
+ }))
+ defer markerServer.Close()
+
+ config := tt.config
+ config.APIURL = markerServer.URL
+
+ f := NewFactory()
+ exp, err := f.CreateLogsExporter(context.Background(), exportertest.NewNopCreateSettings(), &config)
+ require.NoError(t, err)
+
+ err = exp.Start(context.Background(), componenttest.NewNopHost())
+ assert.NoError(t, err)
+
+ logs := constructLogs(map[string]string{})
+ err = exp.ConsumeLogs(context.Background(), logs)
+ assert.NoError(t, err)
+ })
+ }
+}
diff --git a/exporter/honeycombmarkerexporter/metadata.yaml b/exporter/honeycombmarkerexporter/metadata.yaml
index 51361e199f72..d609671d0fd1 100644
--- a/exporter/honeycombmarkerexporter/metadata.yaml
+++ b/exporter/honeycombmarkerexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: honeycombmarker
+scope_name: otelcol/honeycombmarker
status:
class: exporter
stability:
- development: [logs]
- distributions: []
+ alpha: [logs]
+ distributions: [contrib]
codeowners:
active: [TylerHelmuth, fchikwekwe]
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/honeycombmarkerexporter/package_test.go b/exporter/honeycombmarkerexporter/package_test.go
new file mode 100644
index 000000000000..5682ee1c3253
--- /dev/null
+++ b/exporter/honeycombmarkerexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package honeycombmarkerexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/honeycombmarkerexporter/testdata/config.yaml b/exporter/honeycombmarkerexporter/testdata/config.yaml
index 3ca6508c9ffb..7e348d40ee77 100644
--- a/exporter/honeycombmarkerexporter/testdata/config.yaml
+++ b/exporter/honeycombmarkerexporter/testdata/config.yaml
@@ -1,78 +1,81 @@
-honeycomb:
+honeycombmarker:
api_key: "test-apikey"
- api_url: "https://api.testhost.io"
markers:
- type: "fooType"
- message_field: "test message"
- url_field: "https://api.testhost.io"
rules:
- resource_conditions:
- - IsMatch(attributes["test"], ".*")
log_conditions:
- body == "test"
-
-honeycomb/color_no_type:
+honeycombmarker/all_fields:
api_key: "test-apikey"
api_url: "https://api.testhost.io"
+ sending_queue:
+ enabled: true
+ num_consumers: 10
+ queue_size: 1000
+ retry_on_failure:
+ enabled: true
+ initial_interval: 5000000000
+ randomization_factor: 0.5
+ multiplier: 1.5
+ max_interval: 30000000000
+ max_elapsed_time: 300000000000
markers:
- - color: "green"
- message_field: "test message"
- url_field: "https://api.testhost.io"
+ - type: "fooType"
+ message_key: "test message"
+ url_key: "https://api.testhost.io"
+ dataset_slug: "testing"
rules:
- resource_conditions:
- - IsMatch(attributes["test"], ".*")
log_conditions:
- body == "test"
-honeycomb/bad_syntax_log:
+honeycombmarker/bad_syntax_log:
api_key: "test-apikey"
api_url: "https://api.testhost.io"
markers:
- type: "fooType"
- message_field: "test message"
- url_field: "https://api.testhost.io"
+ message_key: "test message"
+ url_key: "https://api.testhost.io"
+ dataset_slug: "__all__"
rules:
log_conditions:
- body == "test"
- set(attributes["body"], body)
-honeycomb/no_conditions:
+honeycombmarker/no_conditions:
api_key: "test-apikey"
api_url: "https://api.testhost.io"
markers:
- - color: "green"
- message_field: "test message"
- url_field: "https://api.testhost.io"
+ - type: "test-apikey"
+ message_key: "test message"
+ url_key: "https://api.testhost.io"
+ dataset_slug: "__all__"
rules:
-honeycomb/no_api_key:
+honeycombmarker/no_api_key:
api_key: ""
api_url: "https://api.testhost.io"
markers:
- type: "fooType"
- message_field: "test message"
- url_field: "https://api.testhost.io"
+ message_key: "test message"
+ url_key: "https://api.testhost.io"
+ dataset_slug: "__all__"
rules:
- resource_conditions:
- - IsMatch(attributes["test"], ".*")
log_conditions:
- body == "test"
-honeycomb/no_api_url:
+honeycombmarker/no_markers_supplied:
api_key: "test-apikey"
- api_url: ""
+ api_url: "https://api.testhost.io"
markers:
- - type: "fooType"
- message_field: "test message"
- url_field: "https://api.testhost.io"
- rules:
- resource_conditions:
- - IsMatch(attributes["test"], ".*")
- log_conditions:
- - body == "test"
-honeycomb/no_markers_supplied:
+honeycombmarker/no_dataset_slug:
api_key: "test-apikey"
api_url: "https://api.testhost.io"
markers:
+ - type: "fooType"
+ message_key: "test message"
+ url_key: "https://api.testhost.io"
+ rules:
+ log_conditions:
+ - body == "test"
diff --git a/exporter/influxdbexporter/README.md b/exporter/influxdbexporter/README.md
index 8513ca5fa1bc..d0585e781474 100644
--- a/exporter/influxdbexporter/README.md
+++ b/exporter/influxdbexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Finfluxdb%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Finfluxdb) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Finfluxdb%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Finfluxdb) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jacobmarble](https://www.github.com/jacobmarble) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter supports sending tracing, metrics, and logging data to [InfluxDB](https://www.influxdata.com/products/).
diff --git a/exporter/influxdbexporter/config.go b/exporter/influxdbexporter/config.go
index 38885db43dc2..53103640489b 100644
--- a/exporter/influxdbexporter/config.go
+++ b/exporter/influxdbexporter/config.go
@@ -9,6 +9,7 @@ import (
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"golang.org/x/exp/maps"
)
@@ -27,9 +28,9 @@ type V1Compatibility struct {
// Config defines configuration for the InfluxDB exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"`
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ confighttp.ClientConfig `mapstructure:",squash"`
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// Org is the InfluxDB organization name of the destination bucket.
Org string `mapstructure:"org"`
diff --git a/exporter/influxdbexporter/config_test.go b/exporter/influxdbexporter/config_test.go
index 0ad0cb1f1e7b..ea8f355e69b5 100644
--- a/exporter/influxdbexporter/config_test.go
+++ b/exporter/influxdbexporter/config_test.go
@@ -14,6 +14,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -37,7 +38,7 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "override-config"),
expected: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://localhost:8080",
Timeout: 500 * time.Millisecond,
Headers: map[string]configopaque.String{"User-Agent": "OpenTelemetry -> Influx"},
@@ -47,7 +48,7 @@ func TestLoadConfig(t *testing.T) {
NumConsumers: 3,
QueueSize: 10,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 1 * time.Second,
MaxInterval: 3 * time.Second,
diff --git a/exporter/influxdbexporter/factory.go b/exporter/influxdbexporter/factory.go
index 7a2de86bb70e..2f8eb08c11f2 100644
--- a/exporter/influxdbexporter/factory.go
+++ b/exporter/influxdbexporter/factory.go
@@ -15,6 +15,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -34,14 +35,14 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 5 * time.Second,
Headers: map[string]configopaque.String{
"User-Agent": "OpenTelemetry -> Influx",
},
},
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
MetricsSchema: common.MetricsSchemaTelegrafPrometheusV1.String(),
SpanDimensions: otel2influx.DefaultOtelTracesToLineProtocolConfig().SpanDimensions,
LogRecordDimensions: otel2influx.DefaultOtelLogsToLineProtocolConfig().LogRecordDimensions,
@@ -81,7 +82,7 @@ func createTraceExporter(
cfg,
exp.WriteTraces,
exporterhelper.WithQueue(cfg.QueueSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithStart(writer.Start),
)
}
@@ -116,7 +117,7 @@ func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, con
cfg,
exp.WriteMetrics,
exporterhelper.WithQueue(cfg.QueueSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithStart(writer.Start),
)
}
@@ -146,7 +147,7 @@ func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config
cfg,
exp.WriteLogs,
exporterhelper.WithQueue(cfg.QueueSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithStart(writer.Start),
)
}
diff --git a/exporter/influxdbexporter/generated_component_test.go b/exporter/influxdbexporter/generated_component_test.go
new file mode 100644
index 000000000000..03b0dcab5a4f
--- /dev/null
+++ b/exporter/influxdbexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package influxdbexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/influxdbexporter/go.mod b/exporter/influxdbexporter/go.mod
index 8dd2428c396a..3e02bc788b3a 100644
--- a/exporter/influxdbexporter/go.mod
+++ b/exporter/influxdbexporter/go.mod
@@ -1,69 +1,81 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/influxdbexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/influxdata/influxdb-observability/common v0.5.8
github.com/influxdata/influxdb-observability/otel2influx v0.5.8
github.com/influxdata/line-protocol/v2 v2.2.1
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.uber.org/zap v1.26.0
- golang.org/x/exp v0.0.0-20230711023510-fffb14384f22
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+ golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/frankban/quicktest v1.14.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/pdata v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/influxdbexporter/go.sum b/exporter/influxdbexporter/go.sum
index 308e06fc2cec..cc0459734863 100644
--- a/exporter/influxdbexporter/go.sum
+++ b/exporter/influxdbexporter/go.sum
@@ -1,21 +1,13 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.11.0/go.mod h1:K+q6oSqb0W0Ininfk863uOk1lMy69l/P6txr3mVT54s=
@@ -25,45 +17,28 @@ github.com/frankban/quicktest v1.14.0 h1:+cqqvzZV87b4adx/5ayVOaYZ2CrvM4ejQvUdBzP
github.com/frankban/quicktest v1.14.0/go.mod h1:NeW+ay9A/U67EYXNFA1nPE8e/tnQv/09mUdL/ijj8og=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/influxdata/influxdb-observability/common v0.5.8 h1:nyk4dqnKbPGIyr1vAs6oEsFQEHWi5jkSQ7PtP4v//lc=
@@ -81,27 +56,25 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
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=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -112,123 +85,111 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM=
+golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -236,42 +197,20 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
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-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/influxdbexporter/internal/metadata/generated_status.go b/exporter/influxdbexporter/internal/metadata/generated_status.go
index 05e0acae4912..a445c22df30c 100644
--- a/exporter/influxdbexporter/internal/metadata/generated_status.go
+++ b/exporter/influxdbexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("influxdb")
)
const (
- Type = "influxdb"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/influxdb")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/influxdb")
+}
diff --git a/exporter/influxdbexporter/metadata.yaml b/exporter/influxdbexporter/metadata.yaml
index 4d4363dff036..639b820cf2f6 100644
--- a/exporter/influxdbexporter/metadata.yaml
+++ b/exporter/influxdbexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: influxdb
+scope_name: otelcol/influxdb
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, observiq]
+ distributions: [contrib]
codeowners:
active: [jacobmarble]
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/influxdbexporter/package_test.go b/exporter/influxdbexporter/package_test.go
new file mode 100644
index 000000000000..310587aed448
--- /dev/null
+++ b/exporter/influxdbexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package influxdbexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/influxdbexporter/writer.go b/exporter/influxdbexporter/writer.go
index 5bd9df809d95..6899ea200b63 100644
--- a/exporter/influxdbexporter/writer.go
+++ b/exporter/influxdbexporter/writer.go
@@ -30,7 +30,7 @@ type influxHTTPWriter struct {
encoderPool sync.Pool
httpClient *http.Client
- httpClientSettings confighttp.HTTPClientSettings
+ httpClientSettings confighttp.ClientConfig
telemetrySettings component.TelemetrySettings
writeURL string
payloadMaxLines int
@@ -54,7 +54,7 @@ func newInfluxHTTPWriter(logger common.Logger, config *Config, telemetrySettings
return e
},
},
- httpClientSettings: config.HTTPClientSettings,
+ httpClientSettings: config.ClientConfig,
telemetrySettings: telemetrySettings,
writeURL: writeURL,
payloadMaxLines: config.PayloadMaxLines,
@@ -64,7 +64,7 @@ func newInfluxHTTPWriter(logger common.Logger, config *Config, telemetrySettings
}
func composeWriteURL(config *Config) (string, error) {
- writeURL, err := url.Parse(config.HTTPClientSettings.Endpoint)
+ writeURL, err := url.Parse(config.ClientConfig.Endpoint)
if err != nil {
return "", err
}
@@ -88,16 +88,22 @@ func composeWriteURL(config *Config) (string, error) {
queryValues.Set("db", config.V1Compatibility.DB)
if config.V1Compatibility.Username != "" && config.V1Compatibility.Password != "" {
- var basicAuth []byte
- base64.StdEncoding.Encode(basicAuth, []byte(config.V1Compatibility.Username+":"+string(config.V1Compatibility.Password)))
- config.HTTPClientSettings.Headers["Authorization"] = configopaque.String("Basic " + string(basicAuth))
+ basicAuth := base64.StdEncoding.EncodeToString(
+ []byte(config.V1Compatibility.Username + ":" + string(config.V1Compatibility.Password)))
+ if config.ClientConfig.Headers == nil {
+ config.ClientConfig.Headers = make(map[string]configopaque.String, 1)
+ }
+ config.ClientConfig.Headers["Authorization"] = configopaque.String("Basic " + basicAuth)
}
} else {
queryValues.Set("org", config.Org)
queryValues.Set("bucket", config.Bucket)
if config.Token != "" {
- config.HTTPClientSettings.Headers["Authorization"] = "Token " + config.Token
+ if config.ClientConfig.Headers == nil {
+ config.ClientConfig.Headers = make(map[string]configopaque.String, 1)
+ }
+ config.ClientConfig.Headers["Authorization"] = "Token " + config.Token
}
}
@@ -107,8 +113,8 @@ func composeWriteURL(config *Config) (string, error) {
}
// Start implements component.StartFunc
-func (w *influxHTTPWriter) Start(_ context.Context, host component.Host) error {
- httpClient, err := w.httpClientSettings.ToClient(host, w.telemetrySettings)
+func (w *influxHTTPWriter) Start(ctx context.Context, host component.Host) error {
+ httpClient, err := w.httpClientSettings.ToClientContext(ctx, host, w.telemetrySettings)
if err != nil {
return err
}
diff --git a/exporter/influxdbexporter/writer_test.go b/exporter/influxdbexporter/writer_test.go
index 2cb240a25602..ed882ca9be71 100644
--- a/exporter/influxdbexporter/writer_test.go
+++ b/exporter/influxdbexporter/writer_test.go
@@ -107,7 +107,7 @@ func Test_influxHTTPWriterBatch_maxPayload(t *testing.T) {
t.Run(testCase.name, func(t *testing.T) {
var httpRequests []*http.Request
- mockHTTPService := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ mockHTTPService := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {
httpRequests = append(httpRequests, r)
}))
t.Cleanup(mockHTTPService.Close)
@@ -149,7 +149,7 @@ func Test_influxHTTPWriterBatch_maxPayload(t *testing.T) {
func Test_influxHTTPWriterBatch_EnqueuePoint_emptyTagValue(t *testing.T) {
var recordedRequest *http.Request
var recordedRequestBody []byte
- noopHTTPServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ noopHTTPServer := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {
if assert.Nil(t, recordedRequest) {
recordedRequest = r
recordedRequestBody, _ = io.ReadAll(r.Body)
@@ -162,7 +162,7 @@ func Test_influxHTTPWriterBatch_EnqueuePoint_emptyTagValue(t *testing.T) {
influxWriter, err := newInfluxHTTPWriter(
new(common.NoopLogger),
&Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: noopHTTPServer.URL,
},
},
@@ -186,3 +186,24 @@ func Test_influxHTTPWriterBatch_EnqueuePoint_emptyTagValue(t *testing.T) {
assert.Equal(t, "m,k=v f=1i 1000000002000", strings.TrimSpace(string(recordedRequestBody)))
}
}
+
+func Test_composeWriteURL_doesNotPanic(t *testing.T) {
+ assert.NotPanics(t, func() {
+ cfg := &Config{}
+ _, err := composeWriteURL(cfg)
+ assert.NoError(t, err)
+ })
+
+ assert.NotPanics(t, func() {
+ cfg := &Config{
+ V1Compatibility: V1Compatibility{
+ Enabled: true,
+ DB: "my-db",
+ Username: "my-username",
+ Password: "my-password",
+ },
+ }
+ _, err := composeWriteURL(cfg)
+ assert.NoError(t, err)
+ })
+}
diff --git a/exporter/instanaexporter/README.md b/exporter/instanaexporter/README.md
index fffe9350736f..90b19a8e2cb9 100644
--- a/exporter/instanaexporter/README.md
+++ b/exporter/instanaexporter/README.md
@@ -3,12 +3,12 @@
| Status | |
| ------------- |-----------|
-| Stability | [alpha]: traces |
+| Stability | [deprecated]: traces |
| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Finstana%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Finstana) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Finstana%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Finstana) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jpkrohling](https://www.github.com/jpkrohling), [@hickeyma](https://www.github.com/hickeyma) |
-[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
+[deprecated]: https://github.com/open-telemetry/opentelemetry-collector#deprecated
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
diff --git a/exporter/instanaexporter/config.go b/exporter/instanaexporter/config.go
index fa95e685c8e4..7a7c6c95aba0 100644
--- a/exporter/instanaexporter/config.go
+++ b/exporter/instanaexporter/config.go
@@ -19,7 +19,7 @@ type Config struct {
AgentKey configopaque.String `mapstructure:"agent_key"`
- confighttp.HTTPClientSettings `mapstructure:",squash"`
+ confighttp.ClientConfig `mapstructure:",squash"`
}
var _ component.Config = (*Config)(nil)
diff --git a/exporter/instanaexporter/config_test.go b/exporter/instanaexporter/config_test.go
index fb1ca4f2278f..68074ccb8a2c 100644
--- a/exporter/instanaexporter/config_test.go
+++ b/exporter/instanaexporter/config_test.go
@@ -28,9 +28,9 @@ func TestConfigValidate(t *testing.T) {
})
t.Run("Valid configuration with ca_file", func(t *testing.T) {
- c := &Config{Endpoint: "https://example.com/", AgentKey: "key1", HTTPClientSettings: confighttp.HTTPClientSettings{
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ c := &Config{Endpoint: "https://example.com/", AgentKey: "key1", ClientConfig: confighttp.ClientConfig{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "ca.crt",
},
},
diff --git a/exporter/instanaexporter/exporter.go b/exporter/instanaexporter/exporter.go
index 0cfc0127b17c..75f37441d094 100644
--- a/exporter/instanaexporter/exporter.go
+++ b/exporter/instanaexporter/exporter.go
@@ -29,8 +29,8 @@ type instanaExporter struct {
userAgent string
}
-func (e *instanaExporter) start(_ context.Context, host component.Host) error {
- client, err := e.config.HTTPClientSettings.ToClient(host, e.settings)
+func (e *instanaExporter) start(ctx context.Context, host component.Host) error {
+ client, err := e.config.ClientConfig.ToClientContext(ctx, host, e.settings)
if err != nil {
return err
}
diff --git a/exporter/instanaexporter/exporter_test.go b/exporter/instanaexporter/exporter_test.go
index 83b299ae4283..bc6b76c1057d 100644
--- a/exporter/instanaexporter/exporter_test.go
+++ b/exporter/instanaexporter/exporter_test.go
@@ -21,15 +21,15 @@ import (
)
func TestPushConvertedTraces(t *testing.T) {
- traceServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+ traceServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
rw.WriteHeader(http.StatusAccepted)
}))
defer traceServer.Close()
cfg := Config{
- AgentKey: "key11",
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: traceServer.URL},
- Endpoint: traceServer.URL,
+ AgentKey: "key11",
+ ClientConfig: confighttp.ClientConfig{Endpoint: traceServer.URL},
+ Endpoint: traceServer.URL,
}
instanaExporter := newInstanaExporter(&cfg, exportertest.NewNopCreateSettings())
@@ -55,7 +55,7 @@ func TestSelfSignedBackend(t *testing.T) {
var err error
caFile := "testdata/ca.crt"
handler := http.NewServeMux()
- handler.HandleFunc("/bundle", func(w http.ResponseWriter, r *http.Request) {
+ handler.HandleFunc("/bundle", func(w http.ResponseWriter, _ *http.Request) {
_, err = io.WriteString(w, "Hello from CA self signed server")
if err != nil {
@@ -82,10 +82,10 @@ func TestSelfSignedBackend(t *testing.T) {
cfg := Config{
AgentKey: "key11",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: server.URL,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: caFile,
},
},
@@ -108,10 +108,10 @@ func TestSelfSignedBackend(t *testing.T) {
func TestSelfSignedBackendCAFileNotFound(t *testing.T) {
cfg := Config{
AgentKey: "key11",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "ca_file_not_found.pem",
},
},
diff --git a/exporter/instanaexporter/factory.go b/exporter/instanaexporter/factory.go
index 05fe8c60fbf5..df2749f014dd 100644
--- a/exporter/instanaexporter/factory.go
+++ b/exporter/instanaexporter/factory.go
@@ -12,6 +12,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -31,7 +32,7 @@ func NewFactory() exporter.Factory {
// createDefaultConfig creates the default exporter configuration
func createDefaultConfig() component.Config {
return &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
@@ -57,7 +58,7 @@ func createTracesExporter(ctx context.Context, set exporter.CreateSettings, conf
exporterhelper.WithStart(instanaExporter.start),
// Disable Timeout/RetryOnFailure and SendingQueue
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(exporterhelper.RetrySettings{Enabled: false}),
+ exporterhelper.WithRetry(configretry.BackOffConfig{Enabled: false}),
exporterhelper.WithQueue(exporterhelper.QueueSettings{Enabled: false}),
exporterhelper.WithShutdown(func(context.Context) error {
cancel()
diff --git a/exporter/instanaexporter/factory_test.go b/exporter/instanaexporter/factory_test.go
index dd3a8ea197c4..2829f93112e9 100644
--- a/exporter/instanaexporter/factory_test.go
+++ b/exporter/instanaexporter/factory_test.go
@@ -26,7 +26,7 @@ func TestCreateDefaultConfig(t *testing.T) {
cfg := factory.CreateDefaultConfig()
assert.Equal(t, &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
@@ -53,7 +53,7 @@ func TestLoadConfig(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://example.com/api/",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
@@ -74,13 +74,13 @@ func TestLoadConfig(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://example.com/api/",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
WriteBufferSize: 512 * 1024,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "ca.crt",
},
},
@@ -100,7 +100,7 @@ func TestLoadConfig(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://example.com/api/",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
diff --git a/exporter/instanaexporter/generated_component_test.go b/exporter/instanaexporter/generated_component_test.go
new file mode 100644
index 000000000000..6de7f21420ad
--- /dev/null
+++ b/exporter/instanaexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package instanaexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/instanaexporter/go.mod b/exporter/instanaexporter/go.mod
index a9a629efe273..851f4a2f66fc 100644
--- a/exporter/instanaexporter/go.mod
+++ b/exporter/instanaexporter/go.mod
@@ -1,66 +1,77 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/instanaexporter
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/instanaexporter/go.sum b/exporter/instanaexporter/go.sum
index dadc64deca8e..b2e1179f017a 100644
--- a/exporter/instanaexporter/go.sum
+++ b/exporter/instanaexporter/go.sum
@@ -1,82 +1,56 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -86,121 +60,108 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -208,38 +169,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/instanaexporter/internal/converter/model/package_test.go b/exporter/instanaexporter/internal/converter/model/package_test.go
new file mode 100644
index 000000000000..078a3432d433
--- /dev/null
+++ b/exporter/instanaexporter/internal/converter/model/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package model
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/instanaexporter/internal/converter/package_test.go b/exporter/instanaexporter/internal/converter/package_test.go
new file mode 100644
index 000000000000..dd30fae768ab
--- /dev/null
+++ b/exporter/instanaexporter/internal/converter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package converter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/instanaexporter/internal/metadata/generated_status.go b/exporter/instanaexporter/internal/metadata/generated_status.go
index 35003719e88e..b47133ad2c8e 100644
--- a/exporter/instanaexporter/internal/metadata/generated_status.go
+++ b/exporter/instanaexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("instana")
)
const (
- Type = "instana"
- TracesStability = component.StabilityLevelAlpha
+ TracesStability = component.StabilityLevelDeprecated
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/instana")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/instana")
+}
diff --git a/exporter/instanaexporter/metadata.yaml b/exporter/instanaexporter/metadata.yaml
index 572e8b9d9d62..95f3c88dd5f0 100644
--- a/exporter/instanaexporter/metadata.yaml
+++ b/exporter/instanaexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: instana
+scope_name: otelcol/instana
status:
class: exporter
stability:
- alpha: [traces]
+ deprecated: [traces]
distributions: [contrib]
codeowners:
active: [jpkrohling, hickeyma]
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/instanaexporter/package_test.go b/exporter/instanaexporter/package_test.go
new file mode 100644
index 000000000000..613af54e9fa2
--- /dev/null
+++ b/exporter/instanaexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package instanaexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/kafkaexporter/README.md b/exporter/kafkaexporter/README.md
index d916a4246327..4788c7831b21 100644
--- a/exporter/kafkaexporter/README.md
+++ b/exporter/kafkaexporter/README.md
@@ -4,16 +4,13 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [aws], [observiq], [splunk], [sumo] |
+| Distributions | [core], [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fkafka%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fkafka) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fkafka%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fkafka) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@pavolloffay](https://www.github.com/pavolloffay), [@MovieStoreGuy](https://www.github.com/MovieStoreGuy) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
+[core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[splunk]: https://github.com/signalfx/splunk-otel-collector
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
Kafka exporter exports logs, metrics, and traces to Kafka. This exporter uses a synchronous producer
@@ -26,6 +23,7 @@ The following settings are required:
The following settings can be optionally configured:
- `brokers` (default = localhost:9092): The list of kafka brokers.
- `resolve_canonical_bootstrap_servers_only` (default = false): Whether to resolve then reverse-lookup broker IPs during startup.
+- `client_id` (default = "sarama"): The client ID to configure the Sarama Kafka client with. The client ID will be used for all produce requests.
- `topic` (default = otlp_spans for traces, otlp_metrics for metrics, otlp_logs for logs): The name of the kafka topic to export to.
- `encoding` (default = otlp_proto): The encoding of the traces sent to kafka. All available encodings:
- `otlp_proto`: payload is Protobuf serialized from `ExportTraceServiceRequest` if set as a traces exporter or `ExportMetricsServiceRequest` for metrics or `ExportLogsServiceRequest` for logs.
@@ -37,6 +35,7 @@ The following settings can be optionally configured:
- `zipkin_json`: the payload is serialized to Zipkin v2 JSON Span.
- The following encodings are valid *only* for **logs**.
- `raw`: if the log record body is a byte array, it is sent as is. Otherwise, it is serialized to JSON. Resource and record attributes are discarded.
+- `partition_traces_by_id` (default = false): configures the exporter to include the trace ID as the message key in trace messages sent to kafka. *Please note:* this setting does not have any effect on Jaeger encoding exporters since Jaeger exporters include trace ID as the message key by default.
- `auth`
- `plain_text`
- `username`: The username to use.
diff --git a/exporter/kafkaexporter/config.go b/exporter/kafkaexporter/config.go
index 186441f33d7c..daa387bfb91f 100644
--- a/exporter/kafkaexporter/config.go
+++ b/exporter/kafkaexporter/config.go
@@ -9,6 +9,7 @@ import (
"github.com/IBM/sarama"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka"
@@ -18,7 +19,7 @@ import (
type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// The list of kafka brokers (default localhost:9092)
Brokers []string `mapstructure:"brokers"`
@@ -32,12 +33,21 @@ type Config struct {
// Kafka protocol version
ProtocolVersion string `mapstructure:"protocol_version"`
+ // ClientID to configure the Kafka client with. This can be leveraged by
+ // Kafka to enforce ACLs, throttling quotas, and more.
+ ClientID string `mapstructure:"client_id"`
+
// The name of the kafka topic to export to (default otlp_spans for traces, otlp_metrics for metrics)
Topic string `mapstructure:"topic"`
// Encoding of messages (default "otlp_proto")
Encoding string `mapstructure:"encoding"`
+ // PartitionTracesByID sets the message key of outgoing trace messages to the trace ID.
+ // Please note: does not have any effect on Jaeger encoding exporters since Jaeger exporters include
+ // trace ID as the message key by default.
+ PartitionTracesByID bool `mapstructure:"partition_traces_by_id"`
+
// Metadata is the namespace for metadata management properties used by the
// Client, and shared by the Producer/Consumer.
Metadata Metadata `mapstructure:"metadata"`
diff --git a/exporter/kafkaexporter/config_test.go b/exporter/kafkaexporter/config_test.go
index ac080ae9ee9d..ba1dfd7bef91 100644
--- a/exporter/kafkaexporter/config_test.go
+++ b/exporter/kafkaexporter/config_test.go
@@ -14,6 +14,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -34,14 +35,14 @@ func TestLoadConfig(t *testing.T) {
}{
{
id: component.NewIDWithName(metadata.Type, ""),
- option: func(conf *Config) {
+ option: func(_ *Config) {
// intentionally left blank so we use default config
},
expected: &Config{
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -54,9 +55,11 @@ func TestLoadConfig(t *testing.T) {
NumConsumers: 2,
QueueSize: 10,
},
- Topic: "spans",
- Encoding: "otlp_proto",
- Brokers: []string{"foo:123", "bar:456"},
+ Topic: "spans",
+ Encoding: "otlp_proto",
+ PartitionTracesByID: true,
+ Brokers: []string{"foo:123", "bar:456"},
+ ClientID: "test_client_id",
Authentication: kafka.Authentication{
PlainText: &kafka.PlainTextConfig{
Username: "jdoe",
@@ -93,7 +96,7 @@ func TestLoadConfig(t *testing.T) {
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -106,9 +109,11 @@ func TestLoadConfig(t *testing.T) {
NumConsumers: 2,
QueueSize: 10,
},
- Topic: "spans",
- Encoding: "otlp_proto",
- Brokers: []string{"foo:123", "bar:456"},
+ Topic: "spans",
+ Encoding: "otlp_proto",
+ PartitionTracesByID: true,
+ Brokers: []string{"foo:123", "bar:456"},
+ ClientID: "test_client_id",
Authentication: kafka.Authentication{
PlainText: &kafka.PlainTextConfig{
Username: "jdoe",
@@ -144,7 +149,7 @@ func TestLoadConfig(t *testing.T) {
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -159,7 +164,9 @@ func TestLoadConfig(t *testing.T) {
},
Topic: "spans",
Encoding: "otlp_proto",
+ PartitionTracesByID: true,
Brokers: []string{"foo:123", "bar:456"},
+ ClientID: "test_client_id",
ResolveCanonicalBootstrapServersOnly: true,
Authentication: kafka.Authentication{
PlainText: &kafka.PlainTextConfig{
diff --git a/exporter/kafkaexporter/factory.go b/exporter/kafkaexporter/factory.go
index 37f0bc074be8..e822b0a005f4 100644
--- a/exporter/kafkaexporter/factory.go
+++ b/exporter/kafkaexporter/factory.go
@@ -9,6 +9,7 @@ import (
"github.com/IBM/sarama"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -22,6 +23,7 @@ const (
defaultLogsTopic = "otlp_logs"
defaultEncoding = "otlp_proto"
defaultBroker = "localhost:9092"
+ defaultClientID = "sarama"
// default from sarama.NewConfig()
defaultMetadataRetryMax = 3
// default from sarama.NewConfig()
@@ -90,9 +92,10 @@ func NewFactory(options ...FactoryOption) exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
Brokers: []string{defaultBroker},
+ ClientID: defaultClientID,
// using an empty topic to track when it has not been set by user, default is based on traces or metrics.
Topic: "",
Encoding: defaultEncoding,
@@ -143,8 +146,9 @@ func (f *kafkaExporterFactory) createTracesExporter(
// Disable exporterhelper Timeout, because we cannot pass a Context to the Producer,
// and will rely on the sarama Producer Timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
+ exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.Close))
}
@@ -173,8 +177,9 @@ func (f *kafkaExporterFactory) createMetricsExporter(
// Disable exporterhelper Timeout, because we cannot pass a Context to the Producer,
// and will rely on the sarama Producer Timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
+ exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.Close))
}
@@ -203,7 +208,8 @@ func (f *kafkaExporterFactory) createLogsExporter(
// Disable exporterhelper Timeout, because we cannot pass a Context to the Producer,
// and will rely on the sarama Producer Timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
+ exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.Close))
}
diff --git a/exporter/kafkaexporter/factory_test.go b/exporter/kafkaexporter/factory_test.go
index 74f11af33836..6760029478df 100644
--- a/exporter/kafkaexporter/factory_test.go
+++ b/exporter/kafkaexporter/factory_test.go
@@ -11,6 +11,7 @@ import (
"github.com/IBM/sarama"
"github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pdata/plog"
@@ -58,6 +59,7 @@ func TestCreateDefaultConfig(t *testing.T) {
assert.NoError(t, componenttest.CheckConfigStruct(cfg))
assert.Equal(t, []string{defaultBroker}, cfg.Brokers)
assert.Equal(t, "", cfg.Topic)
+ assert.Equal(t, "sarama", cfg.ClientID)
}
func TestCreateMetricExporter(t *testing.T) {
@@ -123,13 +125,16 @@ func TestCreateMetricExporter(t *testing.T) {
exportertest.NewNopCreateSettings(),
tc.conf,
)
+ require.NoError(t, err)
+ assert.NotNil(t, exporter, "Must return valid exporter")
+ err = exporter.Start(context.Background(), componenttest.NewNopHost())
if tc.err != nil {
assert.ErrorAs(t, err, &tc.err, "Must match the expected error")
- assert.Nil(t, exporter, "Must return nil value for invalid exporter")
return
}
assert.NoError(t, err, "Must not error")
assert.NotNil(t, exporter, "Must return valid exporter when no error is returned")
+ assert.NoError(t, exporter.Shutdown(context.Background()))
})
}
}
@@ -197,13 +202,16 @@ func TestCreateLogExporter(t *testing.T) {
exportertest.NewNopCreateSettings(),
tc.conf,
)
+ require.NoError(t, err)
+ assert.NotNil(t, exporter, "Must return valid exporter")
+ err = exporter.Start(context.Background(), componenttest.NewNopHost())
if tc.err != nil {
assert.ErrorAs(t, err, &tc.err, "Must match the expected error")
- assert.Nil(t, exporter, "Must return nil value for invalid exporter")
return
}
assert.NoError(t, err, "Must not error")
assert.NotNil(t, exporter, "Must return valid exporter when no error is returned")
+ assert.NoError(t, exporter.Shutdown(context.Background()))
})
}
}
@@ -271,13 +279,16 @@ func TestCreateTraceExporter(t *testing.T) {
exportertest.NewNopCreateSettings(),
tc.conf,
)
+ require.NoError(t, err)
+ assert.NotNil(t, exporter, "Must return valid exporter")
+ err = exporter.Start(context.Background(), componenttest.NewNopHost())
if tc.err != nil {
assert.ErrorAs(t, err, &tc.err, "Must match the expected error")
- assert.Nil(t, exporter, "Must return nil value for invalid exporter")
return
}
assert.NoError(t, err, "Must not error")
assert.NotNil(t, exporter, "Must return valid exporter when no error is returned")
+ assert.NoError(t, exporter.Shutdown(context.Background()))
})
}
}
diff --git a/exporter/kafkaexporter/generated_component_test.go b/exporter/kafkaexporter/generated_component_test.go
new file mode 100644
index 000000000000..06bd42403b25
--- /dev/null
+++ b/exporter/kafkaexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package kafkaexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/kafkaexporter/go.mod b/exporter/kafkaexporter/go.mod
index 3cb2bde45c9c..f18f3bca1c9a 100644
--- a/exporter/kafkaexporter/go.mod
+++ b/exporter/kafkaexporter/go.mod
@@ -1,43 +1,54 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kafkaexporter
-go 1.20
+go 1.21
require (
- github.com/IBM/sarama v1.42.1
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/IBM/sarama v1.43.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/gogo/protobuf v1.3.2
- github.com/jaegertracing/jaeger v1.48.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.89.0
+ github.com/jaegertracing/jaeger v1.55.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/zipkin v0.98.0
github.com/openzipkin/zipkin-go v0.4.2
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
)
require (
github.com/apache/thrift v0.19.0 // indirect
- github.com/aws/aws-sdk-go v1.47.10 // indirect
+ github.com/aws/aws-sdk-go v1.51.17 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
- github.com/eapache/go-resiliency v1.4.0 // indirect
+ github.com/eapache/go-resiliency v1.6.0 // indirect
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect
github.com/eapache/queue v1.1.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // 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/jcmturner/aescts/v2 v2.0.0 // indirect
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
github.com/jcmturner/gofork v1.7.6 // indirect
@@ -45,42 +56,40 @@ require (
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.7 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
- github.com/pierrec/lz4/v4 v4.1.18 // indirect
+ github.com/pierrec/lz4/v4 v4.1.21 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.49.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
github.com/xdg-go/scram v1.1.2 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configopaque v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/atomic v1.11.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ golang.org/x/crypto v0.21.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
@@ -88,6 +97,8 @@ replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/corei
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka => ../../internal/kafka
+replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal => ../../pkg/batchpersignal
+
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger => ../../pkg/translator/jaeger
retract (
diff --git a/exporter/kafkaexporter/go.sum b/exporter/kafkaexporter/go.sum
index 914821a79f92..b13fa5b97f88 100644
--- a/exporter/kafkaexporter/go.sum
+++ b/exporter/kafkaexporter/go.sum
@@ -1,72 +1,49 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
-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/IBM/sarama v1.43.1 h1:Z5uz65Px7f4DhI/jQqEm/tV9t8aU+JUdTyW/K/fCXpA=
+github.com/IBM/sarama v1.43.1/go.mod h1:GG5q1RURtDNPz8xxJs3mgX6Ytak8Z9eLhAkJPObe2xE=
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/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/aws/aws-sdk-go v1.51.17 h1:Cfa40lCdjv9OxC3X1Ks3a6O1Tu3gOANSyKHOSw/zuWU=
+github.com/aws/aws-sdk-go v1.51.17/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/eapache/go-resiliency v1.4.0 h1:3OK9bWpPk5q6pbFAaYSEwD9CLUSHG8bnZuqX2yMt3B0=
-github.com/eapache/go-resiliency v1.4.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
+github.com/eapache/go-resiliency v1.6.0 h1:CqGDTLtpwuWKn6Nj3uNUdflaq+/kIPsg0gfNzHton30=
+github.com/eapache/go-resiliency v1.6.0/go.mod h1:5yPzW0MIvSe0JDsv0v+DvcjEv2FyD6iZYSs1ZI+iQho=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4ALJ04o5Qqpdz8XLIpNA3WM/iSIXqxtqo7UGVws=
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw=
+github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -77,10 +54,8 @@ github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9
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.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/jaegertracing/jaeger v1.48.0 h1:YuKooQ7qJsjgxws9xuf8C/BLNTPx8qTAJz4wv7IHhSc=
-github.com/jaegertracing/jaeger v1.48.0/go.mod h1:BoAPkdCAIEuLsVz/EDhjXd+GSVpHtJhiGqWoFEvBCKg=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs=
github.com/jcmturner/dnsutils/v2 v2.0.0 h1:lltnkeZGL0wILNvrNiVCR6Ro5PGU/SeBvVO/8c/iPbo=
@@ -101,22 +76,20 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
+github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -124,39 +97,35 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
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/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/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ=
-github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
+github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.49.0 h1:ToNTdK4zSnPVJmh698mGFkDor9wBI/iGaJy5dbH1EgI=
+github.com/prometheus/common v0.49.0/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
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.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY=
@@ -166,89 +135,79 @@ github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gi
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
-go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
-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-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
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.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=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
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.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/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.4.0 h1:zxkM55ReGkDlKSM+Fu41A+zmbZuaPVbGMzvvdUPznYQ=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -257,8 +216,8 @@ golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -270,10 +229,6 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -282,40 +237,21 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/kafkaexporter/internal/metadata/generated_status.go b/exporter/kafkaexporter/internal/metadata/generated_status.go
index 73c17c03bbba..b8d45d135f4e 100644
--- a/exporter/kafkaexporter/internal/metadata/generated_status.go
+++ b/exporter/kafkaexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("kafka")
)
const (
- Type = "kafka"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/kafka")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/kafka")
+}
diff --git a/exporter/kafkaexporter/kafka_exporter.go b/exporter/kafkaexporter/kafka_exporter.go
index 52ef71c48be3..c98abdc674c0 100644
--- a/exporter/kafkaexporter/kafka_exporter.go
+++ b/exporter/kafkaexporter/kafka_exporter.go
@@ -9,6 +9,7 @@ import (
"fmt"
"github.com/IBM/sarama"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/plog"
@@ -23,6 +24,7 @@ var errUnrecognizedEncoding = fmt.Errorf("unrecognized encoding")
// kafkaTracesProducer uses sarama to produce trace messages to Kafka.
type kafkaTracesProducer struct {
+ cfg Config
producer sarama.SyncProducer
topic string
marshaler TracesMarshaler
@@ -57,11 +59,24 @@ func (e *kafkaTracesProducer) tracesPusher(_ context.Context, td ptrace.Traces)
}
func (e *kafkaTracesProducer) Close(context.Context) error {
+ if e.producer == nil {
+ return nil
+ }
return e.producer.Close()
}
+func (e *kafkaTracesProducer) start(_ context.Context, _ component.Host) error {
+ producer, err := newSaramaProducer(e.cfg)
+ if err != nil {
+ return err
+ }
+ e.producer = producer
+ return nil
+}
+
// kafkaMetricsProducer uses sarama to produce metrics messages to kafka
type kafkaMetricsProducer struct {
+ cfg Config
producer sarama.SyncProducer
topic string
marshaler MetricsMarshaler
@@ -87,11 +102,24 @@ func (e *kafkaMetricsProducer) metricsDataPusher(_ context.Context, md pmetric.M
}
func (e *kafkaMetricsProducer) Close(context.Context) error {
+ if e.producer == nil {
+ return nil
+ }
return e.producer.Close()
}
+func (e *kafkaMetricsProducer) start(_ context.Context, _ component.Host) error {
+ producer, err := newSaramaProducer(e.cfg)
+ if err != nil {
+ return err
+ }
+ e.producer = producer
+ return nil
+}
+
// kafkaLogsProducer uses sarama to produce logs messages to kafka
type kafkaLogsProducer struct {
+ cfg Config
producer sarama.SyncProducer
topic string
marshaler LogsMarshaler
@@ -117,11 +145,26 @@ func (e *kafkaLogsProducer) logsDataPusher(_ context.Context, ld plog.Logs) erro
}
func (e *kafkaLogsProducer) Close(context.Context) error {
+ if e.producer == nil {
+ return nil
+ }
return e.producer.Close()
}
+func (e *kafkaLogsProducer) start(_ context.Context, _ component.Host) error {
+ producer, err := newSaramaProducer(e.cfg)
+ if err != nil {
+ return err
+ }
+ e.producer = producer
+ return nil
+}
+
func newSaramaProducer(config Config) (sarama.SyncProducer, error) {
c := sarama.NewConfig()
+
+ c.ClientID = config.ClientID
+
// These setting are required by the sarama.SyncProducer implementation.
c.Producer.Return.Successes = true
c.Producer.Return.Errors = true
@@ -168,13 +211,8 @@ func newMetricsExporter(config Config, set exporter.CreateSettings, marshalers m
if marshaler == nil {
return nil, errUnrecognizedEncoding
}
- producer, err := newSaramaProducer(config)
- if err != nil {
- return nil, err
- }
-
return &kafkaMetricsProducer{
- producer: producer,
+ cfg: config,
topic: config.Topic,
marshaler: marshaler,
logger: set.Logger,
@@ -188,12 +226,14 @@ func newTracesExporter(config Config, set exporter.CreateSettings, marshalers ma
if marshaler == nil {
return nil, errUnrecognizedEncoding
}
- producer, err := newSaramaProducer(config)
- if err != nil {
- return nil, err
+ if config.PartitionTracesByID {
+ if keyableMarshaler, ok := marshaler.(KeyableTracesMarshaler); ok {
+ keyableMarshaler.Key()
+ }
}
+
return &kafkaTracesProducer{
- producer: producer,
+ cfg: config,
topic: config.Topic,
marshaler: marshaler,
logger: set.Logger,
@@ -205,13 +245,9 @@ func newLogsExporter(config Config, set exporter.CreateSettings, marshalers map[
if marshaler == nil {
return nil, errUnrecognizedEncoding
}
- producer, err := newSaramaProducer(config)
- if err != nil {
- return nil, err
- }
return &kafkaLogsProducer{
- producer: producer,
+ cfg: config,
topic: config.Topic,
marshaler: marshaler,
logger: set.Logger,
diff --git a/exporter/kafkaexporter/kafka_exporter_test.go b/exporter/kafkaexporter/kafka_exporter_test.go
index ab8956ca5e2c..fe6eedf47163 100644
--- a/exporter/kafkaexporter/kafka_exporter_test.go
+++ b/exporter/kafkaexporter/kafka_exporter_test.go
@@ -12,22 +12,24 @@ import (
"github.com/IBM/sarama/mocks"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
+ "go.opentelemetry.io/collector/pdata/testdata"
"go.uber.org/zap"
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/kafka"
)
func TestNewExporter_err_version(t *testing.T) {
c := Config{ProtocolVersion: "0.0.0", Encoding: defaultEncoding}
texp, err := newTracesExporter(c, exportertest.NewNopCreateSettings(), tracesMarshalers())
+ require.NoError(t, err)
+ err = texp.start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
- assert.Nil(t, texp)
}
func TestNewExporter_err_encoding(t *testing.T) {
@@ -40,8 +42,9 @@ func TestNewExporter_err_encoding(t *testing.T) {
func TestNewMetricsExporter_err_version(t *testing.T) {
c := Config{ProtocolVersion: "0.0.0", Encoding: defaultEncoding}
mexp, err := newMetricsExporter(c, exportertest.NewNopCreateSettings(), metricsMarshalers())
+ require.NoError(t, err)
+ err = mexp.start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
- assert.Nil(t, mexp)
}
func TestNewMetricsExporter_err_encoding(t *testing.T) {
@@ -60,9 +63,10 @@ func TestNewMetricsExporter_err_traces_encoding(t *testing.T) {
func TestNewLogsExporter_err_version(t *testing.T) {
c := Config{ProtocolVersion: "0.0.0", Encoding: defaultEncoding}
- mexp, err := newLogsExporter(c, exportertest.NewNopCreateSettings(), logsMarshalers())
+ lexp, err := newLogsExporter(c, exportertest.NewNopCreateSettings(), logsMarshalers())
+ require.NoError(t, err)
+ err = lexp.start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
- assert.Nil(t, mexp)
}
func TestNewLogsExporter_err_encoding(t *testing.T) {
@@ -83,8 +87,8 @@ func TestNewExporter_err_auth_type(t *testing.T) {
c := Config{
ProtocolVersion: "2.0.0",
Authentication: kafka.Authentication{
- TLS: &configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLS: &configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/doesnotexist",
},
},
@@ -98,17 +102,20 @@ func TestNewExporter_err_auth_type(t *testing.T) {
},
}
texp, err := newTracesExporter(c, exportertest.NewNopCreateSettings(), tracesMarshalers())
+ require.NoError(t, err)
+ err = texp.start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to load TLS config")
- assert.Nil(t, texp)
mexp, err := newMetricsExporter(c, exportertest.NewNopCreateSettings(), metricsMarshalers())
+ require.NoError(t, err)
+ err = mexp.start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to load TLS config")
- assert.Nil(t, mexp)
lexp, err := newLogsExporter(c, exportertest.NewNopCreateSettings(), logsMarshalers())
+ require.NoError(t, err)
+ err = lexp.start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
assert.Contains(t, err.Error(), "failed to load TLS config")
- assert.Nil(t, lexp)
}
@@ -120,9 +127,10 @@ func TestNewExporter_err_compression(t *testing.T) {
},
}
texp, err := newTracesExporter(c, exportertest.NewNopCreateSettings(), tracesMarshalers())
+ require.NoError(t, err)
+ err = texp.start(context.Background(), componenttest.NewNopHost())
assert.Error(t, err)
assert.Contains(t, err.Error(), "producer.compression should be one of 'none', 'gzip', 'snappy', 'lz4', or 'zstd'. configured value idk")
- assert.Nil(t, texp)
}
func TestTracesPusher(t *testing.T) {
@@ -137,7 +145,7 @@ func TestTracesPusher(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, p.Close(context.Background()))
})
- err := p.tracesPusher(context.Background(), testdata.GenerateTracesTwoSpansSameResource())
+ err := p.tracesPusher(context.Background(), testdata.GenerateTraces(2))
require.NoError(t, err)
}
@@ -155,7 +163,7 @@ func TestTracesPusher_err(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, p.Close(context.Background()))
})
- td := testdata.GenerateTracesTwoSpansSameResource()
+ td := testdata.GenerateTraces(2)
err := p.tracesPusher(context.Background(), td)
assert.EqualError(t, err, expErr.Error())
}
@@ -166,7 +174,7 @@ func TestTracesPusher_marshal_error(t *testing.T) {
marshaler: &tracesErrorMarshaler{err: expErr},
logger: zap.NewNop(),
}
- td := testdata.GenerateTracesTwoSpansSameResource()
+ td := testdata.GenerateTraces(2)
err := p.tracesPusher(context.Background(), td)
require.Error(t, err)
assert.Contains(t, err.Error(), expErr.Error())
@@ -184,7 +192,7 @@ func TestMetricsDataPusher(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, p.Close(context.Background()))
})
- err := p.metricsDataPusher(context.Background(), testdata.GenerateMetricsTwoMetrics())
+ err := p.metricsDataPusher(context.Background(), testdata.GenerateMetrics(2))
require.NoError(t, err)
}
@@ -202,7 +210,7 @@ func TestMetricsDataPusher_err(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, p.Close(context.Background()))
})
- md := testdata.GenerateMetricsTwoMetrics()
+ md := testdata.GenerateMetrics(2)
err := p.metricsDataPusher(context.Background(), md)
assert.EqualError(t, err, expErr.Error())
}
@@ -213,7 +221,7 @@ func TestMetricsDataPusher_marshal_error(t *testing.T) {
marshaler: &metricsErrorMarshaler{err: expErr},
logger: zap.NewNop(),
}
- md := testdata.GenerateMetricsTwoMetrics()
+ md := testdata.GenerateMetrics(2)
err := p.metricsDataPusher(context.Background(), md)
require.Error(t, err)
assert.Contains(t, err.Error(), expErr.Error())
@@ -231,7 +239,7 @@ func TestLogsDataPusher(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, p.Close(context.Background()))
})
- err := p.logsDataPusher(context.Background(), testdata.GenerateLogsOneLogRecord())
+ err := p.logsDataPusher(context.Background(), testdata.GenerateLogs(1))
require.NoError(t, err)
}
@@ -249,7 +257,7 @@ func TestLogsDataPusher_err(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, p.Close(context.Background()))
})
- ld := testdata.GenerateLogsOneLogRecord()
+ ld := testdata.GenerateLogs(1)
err := p.logsDataPusher(context.Background(), ld)
assert.EqualError(t, err, expErr.Error())
}
@@ -260,7 +268,7 @@ func TestLogsDataPusher_marshal_error(t *testing.T) {
marshaler: &logsErrorMarshaler{err: expErr},
logger: zap.NewNop(),
}
- ld := testdata.GenerateLogsOneLogRecord()
+ ld := testdata.GenerateLogs(1)
err := p.logsDataPusher(context.Background(), ld)
require.Error(t, err)
assert.Contains(t, err.Error(), expErr.Error())
diff --git a/exporter/kafkaexporter/marshaler_test.go b/exporter/kafkaexporter/marshaler_test.go
index a94811c554cd..0d0cfba637f5 100644
--- a/exporter/kafkaexporter/marshaler_test.go
+++ b/exporter/kafkaexporter/marshaler_test.go
@@ -9,6 +9,7 @@ import (
"testing"
"time"
+ "github.com/IBM/sarama"
zipkin "github.com/openzipkin/zipkin-go/model"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@@ -85,6 +86,8 @@ func TestOTLPTracesJsonMarshaling(t *testing.T) {
ils := rs.ScopeSpans().At(0)
ils.SetSchemaUrl(conventions.SchemaURL)
ils.Spans().AppendEmpty()
+ ils.Spans().AppendEmpty()
+ ils.Spans().AppendEmpty()
span := ils.Spans().At(0)
span.SetKind(ptrace.SpanKindServer)
@@ -95,9 +98,27 @@ func TestOTLPTracesJsonMarshaling(t *testing.T) {
span.SetSpanID([8]byte{0, 1, 2, 3, 4, 5, 6, 7})
span.SetParentSpanID([8]byte{8, 9, 10, 11, 12, 13, 14})
+ span = ils.Spans().At(1)
+ span.SetKind(ptrace.SpanKindClient)
+ span.SetName("bar")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(now))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(now.Add(time.Second)))
+ span.SetTraceID([16]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16})
+ span.SetSpanID([8]byte{15, 16, 17, 18, 19, 20, 21})
+ span.SetParentSpanID([8]byte{0, 1, 2, 3, 4, 5, 6, 7})
+
+ span = ils.Spans().At(2)
+ span.SetKind(ptrace.SpanKindServer)
+ span.SetName("baz")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(now))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(now.Add(time.Second)))
+ span.SetTraceID([16]byte{17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32})
+ span.SetSpanID([8]byte{22, 23, 24, 25, 26, 27, 28})
+ span.SetParentSpanID([8]byte{29, 30, 31, 32, 33, 34, 35, 36})
+
// Since marshaling json is not guaranteed to be in order
// within a string, using a map to compare that the expected values are there
- otlpJSON := map[string]any{
+ unkeyedOtlpJSON := map[string]any{
"resourceSpans": []any{
map[string]any{
"resource": map[string]any{},
@@ -115,6 +136,95 @@ func TestOTLPTracesJsonMarshaling(t *testing.T) {
"endTimeUnixNano": fmt.Sprint(now.Add(time.Second).UnixNano()),
"status": map[string]any{},
},
+ map[string]any{
+ "traceId": "0102030405060708090a0b0c0d0e0f10",
+ "spanId": "0f10111213141500",
+ "parentSpanId": "0001020304050607",
+ "name": "bar",
+ "kind": float64(ptrace.SpanKindClient),
+ "startTimeUnixNano": fmt.Sprint(now.UnixNano()),
+ "endTimeUnixNano": fmt.Sprint(now.Add(time.Second).UnixNano()),
+ "status": map[string]any{},
+ },
+ map[string]any{
+ "traceId": "1112131415161718191a1b1c1d1e1f20",
+ "spanId": "161718191a1b1c00",
+ "parentSpanId": "1d1e1f2021222324",
+ "name": "baz",
+ "kind": float64(ptrace.SpanKindServer),
+ "startTimeUnixNano": fmt.Sprint(now.UnixNano()),
+ "endTimeUnixNano": fmt.Sprint(now.Add(time.Second).UnixNano()),
+ "status": map[string]any{},
+ },
+ },
+ "schemaUrl": conventions.SchemaURL,
+ },
+ },
+ "schemaUrl": conventions.SchemaURL,
+ },
+ },
+ }
+
+ unkeyedOtlpJSONResult := make([]any, 1)
+ unkeyedOtlpJSONResult[0] = unkeyedOtlpJSON
+
+ keyedOtlpJSON1 := map[string]any{
+ "resourceSpans": []any{
+ map[string]any{
+ "resource": map[string]any{},
+ "scopeSpans": []any{
+ map[string]any{
+ "scope": map[string]any{},
+ "spans": []any{
+ map[string]any{
+ "traceId": "0102030405060708090a0b0c0d0e0f10",
+ "spanId": "0001020304050607",
+ "parentSpanId": "08090a0b0c0d0e00",
+ "name": "foo",
+ "kind": float64(ptrace.SpanKindServer),
+ "startTimeUnixNano": fmt.Sprint(now.UnixNano()),
+ "endTimeUnixNano": fmt.Sprint(now.Add(time.Second).UnixNano()),
+ "status": map[string]any{},
+ },
+ map[string]any{
+ "traceId": "0102030405060708090a0b0c0d0e0f10",
+ "spanId": "0f10111213141500",
+ "parentSpanId": "0001020304050607",
+ "name": "bar",
+ "kind": float64(ptrace.SpanKindClient),
+ "startTimeUnixNano": fmt.Sprint(now.UnixNano()),
+ "endTimeUnixNano": fmt.Sprint(now.Add(time.Second).UnixNano()),
+ "status": map[string]any{},
+ },
+ },
+ "schemaUrl": conventions.SchemaURL,
+ },
+ },
+ "schemaUrl": conventions.SchemaURL,
+ },
+ },
+ }
+
+ unkeyedMessageKey := []sarama.Encoder{nil}
+
+ keyedOtlpJSON2 := map[string]any{
+ "resourceSpans": []any{
+ map[string]any{
+ "resource": map[string]any{},
+ "scopeSpans": []any{
+ map[string]any{
+ "scope": map[string]any{},
+ "spans": []any{
+ map[string]any{
+ "traceId": "1112131415161718191a1b1c1d1e1f20",
+ "spanId": "161718191a1b1c00",
+ "parentSpanId": "1d1e1f2021222324",
+ "name": "baz",
+ "kind": float64(ptrace.SpanKindServer),
+ "startTimeUnixNano": fmt.Sprint(now.UnixNano()),
+ "endTimeUnixNano": fmt.Sprint(now.Add(time.Second).UnixNano()),
+ "status": map[string]any{},
+ },
},
"schemaUrl": conventions.SchemaURL,
},
@@ -124,7 +234,13 @@ func TestOTLPTracesJsonMarshaling(t *testing.T) {
},
}
- zipkinJSON := []any{
+ keyedOtlpJSONResult := make([]any, 2)
+ keyedOtlpJSONResult[0] = keyedOtlpJSON1
+ keyedOtlpJSONResult[1] = keyedOtlpJSON2
+
+ keyedMessageKey := []sarama.Encoder{sarama.ByteEncoder("0102030405060708090a0b0c0d0e0f10"), sarama.ByteEncoder("1112131415161718191a1b1c1d1e1f20")}
+
+ unkeyedZipkinJSON := []any{
map[string]any{
"traceId": "0102030405060708090a0b0c0d0e0f10",
"id": "0001020304050607",
@@ -135,15 +251,83 @@ func TestOTLPTracesJsonMarshaling(t *testing.T) {
"kind": string(zipkin.Server),
"localEndpoint": map[string]any{"serviceName": "otlpresourcenoservicename"},
},
+ map[string]any{
+ "traceId": "0102030405060708090a0b0c0d0e0f10",
+ "id": "0f10111213141500",
+ "parentId": "0001020304050607",
+ "name": "bar",
+ "timestamp": float64(time.Second.Microseconds()),
+ "duration": float64(time.Second.Microseconds()),
+ "kind": string(zipkin.Client),
+ "localEndpoint": map[string]any{"serviceName": "otlpresourcenoservicename"},
+ },
+ map[string]any{
+ "traceId": "1112131415161718191a1b1c1d1e1f20",
+ "id": "161718191a1b1c00",
+ "parentId": "1d1e1f2021222324",
+ "name": "baz",
+ "timestamp": float64(time.Second.Microseconds()),
+ "duration": float64(time.Second.Microseconds()),
+ "kind": string(zipkin.Server),
+ "localEndpoint": map[string]any{"serviceName": "otlpresourcenoservicename"},
+ },
}
+ unkeyedZipkinJSONResult := make([]any, 1)
+ unkeyedZipkinJSONResult[0] = unkeyedZipkinJSON
+
+ keyedZipkinJSON1 := []any{
+ map[string]any{
+ "traceId": "0102030405060708090a0b0c0d0e0f10",
+ "id": "0001020304050607",
+ "parentId": "08090a0b0c0d0e00",
+ "name": "foo",
+ "timestamp": float64(time.Second.Microseconds()),
+ "duration": float64(time.Second.Microseconds()),
+ "kind": string(zipkin.Server),
+ "localEndpoint": map[string]any{"serviceName": "otlpresourcenoservicename"},
+ },
+ map[string]any{
+ "traceId": "0102030405060708090a0b0c0d0e0f10",
+ "id": "0f10111213141500",
+ "parentId": "0001020304050607",
+ "name": "bar",
+ "timestamp": float64(time.Second.Microseconds()),
+ "duration": float64(time.Second.Microseconds()),
+ "kind": string(zipkin.Client),
+ "localEndpoint": map[string]any{"serviceName": "otlpresourcenoservicename"},
+ },
+ }
+
+ keyedZipkinJSON2 := []any{
+ map[string]any{
+ "traceId": "1112131415161718191a1b1c1d1e1f20",
+ "id": "161718191a1b1c00",
+ "parentId": "1d1e1f2021222324",
+ "name": "baz",
+ "timestamp": float64(time.Second.Microseconds()),
+ "duration": float64(time.Second.Microseconds()),
+ "kind": string(zipkin.Server),
+ "localEndpoint": map[string]any{"serviceName": "otlpresourcenoservicename"},
+ },
+ }
+
+ keyedZipkinJSONResult := make([]any, 2)
+ keyedZipkinJSONResult[0] = keyedZipkinJSON1
+ keyedZipkinJSONResult[1] = keyedZipkinJSON2
+
tests := []struct {
- encoding string
- expectedJSON any
- unmarshaled any
+ encoding string
+ keyed bool
+ numExpectedMessages int
+ expectedJSON []any
+ expectedMessageKey []sarama.Encoder
+ unmarshaled any
}{
- {encoding: "otlp_json", expectedJSON: otlpJSON, unmarshaled: map[string]any{}},
- {encoding: "zipkin_json", expectedJSON: zipkinJSON, unmarshaled: []map[string]any{}},
+ {encoding: "otlp_json", numExpectedMessages: 1, expectedJSON: unkeyedOtlpJSONResult, expectedMessageKey: unkeyedMessageKey, unmarshaled: map[string]any{}},
+ {encoding: "otlp_json", keyed: true, numExpectedMessages: 2, expectedJSON: keyedOtlpJSONResult, expectedMessageKey: keyedMessageKey, unmarshaled: map[string]any{}},
+ {encoding: "zipkin_json", numExpectedMessages: 1, expectedJSON: unkeyedZipkinJSONResult, expectedMessageKey: unkeyedMessageKey, unmarshaled: []map[string]any{}},
+ {encoding: "zipkin_json", keyed: true, numExpectedMessages: 2, expectedJSON: keyedZipkinJSONResult, expectedMessageKey: keyedMessageKey, unmarshaled: []map[string]any{}},
}
for _, test := range tests {
@@ -151,19 +335,27 @@ func TestOTLPTracesJsonMarshaling(t *testing.T) {
marshaler, ok := tracesMarshalers()[test.encoding]
require.True(t, ok, fmt.Sprintf("Must have %s marshaller", test.encoding))
+ if test.keyed {
+ keyableMarshaler, ok := marshaler.(KeyableTracesMarshaler)
+ require.True(t, ok, "Must be a KeyableTracesMarshaler")
+ keyableMarshaler.Key()
+ }
+
msg, err := marshaler.Marshal(traces, t.Name())
require.NoError(t, err, "Must have marshaled the data without error")
- require.Len(t, msg, 1, "Must have one entry in the message")
-
- data, err := msg[0].Value.Encode()
- require.NoError(t, err, "Must not error when encoding value")
- require.NotNil(t, data, "Must have valid data to test")
+ require.Len(t, msg, test.numExpectedMessages, "Expected number of messages in the message")
- unmarshaled := test.unmarshaled
- err = json.Unmarshal(data, &unmarshaled)
- require.NoError(t, err, "Must not error marshaling expected data")
+ for idx, singleMsg := range msg {
+ data, err := singleMsg.Value.Encode()
+ require.NoError(t, err, "Must not error when encoding value")
+ require.NotNil(t, data, "Must have valid data to test")
- assert.Equal(t, test.expectedJSON, unmarshaled, "Must match the expected value")
+ unmarshaled := test.unmarshaled
+ err = json.Unmarshal(data, &unmarshaled)
+ require.NoError(t, err, "Must not error marshaling expected data")
+ assert.Equal(t, test.expectedJSON[idx], unmarshaled, "Must match the expected value")
+ assert.Equal(t, test.expectedMessageKey[idx], singleMsg.Key)
+ }
}
}
diff --git a/exporter/kafkaexporter/metadata.yaml b/exporter/kafkaexporter/metadata.yaml
index 34b6d3869cfd..7c1683989506 100644
--- a/exporter/kafkaexporter/metadata.yaml
+++ b/exporter/kafkaexporter/metadata.yaml
@@ -1,9 +1,14 @@
type: kafka
+scope_name: otelcol/kafka
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, observiq, splunk, sumo, aws]
+ distributions: [core, contrib]
codeowners:
active: [pavolloffay, MovieStoreGuy]
+
+tests:
+ config:
+ skip_lifecycle: true
diff --git a/exporter/kafkaexporter/package_test.go b/exporter/kafkaexporter/package_test.go
new file mode 100644
index 000000000000..c43d258301ad
--- /dev/null
+++ b/exporter/kafkaexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package kafkaexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/kafkaexporter/pdata_marshaler.go b/exporter/kafkaexporter/pdata_marshaler.go
index d4511946b3bc..d9e38dd52caf 100644
--- a/exporter/kafkaexporter/pdata_marshaler.go
+++ b/exporter/kafkaexporter/pdata_marshaler.go
@@ -8,6 +8,9 @@ import (
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/pmetric"
"go.opentelemetry.io/collector/pdata/ptrace"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/traceutil"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal"
)
type pdataLogsMarshaler struct {
@@ -68,30 +71,59 @@ func newPdataMetricsMarshaler(marshaler pmetric.Marshaler, encoding string) Metr
}
}
+// KeyableTracesMarshaler is an extension of the TracesMarshaler interface inteded to provide partition key capabilities
+// for trace messages
+type KeyableTracesMarshaler interface {
+ TracesMarshaler
+ Key()
+}
+
type pdataTracesMarshaler struct {
marshaler ptrace.Marshaler
encoding string
+ keyed bool
}
-func (p pdataTracesMarshaler) Marshal(td ptrace.Traces, topic string) ([]*sarama.ProducerMessage, error) {
- bts, err := p.marshaler.MarshalTraces(td)
- if err != nil {
- return nil, err
- }
- return []*sarama.ProducerMessage{
- {
+func (p *pdataTracesMarshaler) Marshal(td ptrace.Traces, topic string) ([]*sarama.ProducerMessage, error) {
+ var msgs []*sarama.ProducerMessage
+ if p.keyed {
+ for _, trace := range batchpersignal.SplitTraces(td) {
+ bts, err := p.marshaler.MarshalTraces(trace)
+ if err != nil {
+ return nil, err
+ }
+ msgs = append(msgs, &sarama.ProducerMessage{
+ Topic: topic,
+ Value: sarama.ByteEncoder(bts),
+ Key: sarama.ByteEncoder(traceutil.TraceIDToHexOrEmptyString(trace.ResourceSpans().At(0).ScopeSpans().At(0).Spans().At(0).TraceID())),
+ })
+
+ }
+ } else {
+ bts, err := p.marshaler.MarshalTraces(td)
+ if err != nil {
+ return nil, err
+ }
+ msgs = append(msgs, &sarama.ProducerMessage{
Topic: topic,
Value: sarama.ByteEncoder(bts),
- },
- }, nil
+ })
+ }
+
+ return msgs, nil
}
-func (p pdataTracesMarshaler) Encoding() string {
+func (p *pdataTracesMarshaler) Encoding() string {
return p.encoding
}
+// Key configures the pdataTracesMarshaler to set the message key on the kafka messages
+func (p *pdataTracesMarshaler) Key() {
+ p.keyed = true
+}
+
func newPdataTracesMarshaler(marshaler ptrace.Marshaler, encoding string) TracesMarshaler {
- return pdataTracesMarshaler{
+ return &pdataTracesMarshaler{
marshaler: marshaler,
encoding: encoding,
}
diff --git a/exporter/kafkaexporter/testdata/config.yaml b/exporter/kafkaexporter/testdata/config.yaml
index 0f5ca49560b5..15624b521b10 100644
--- a/exporter/kafkaexporter/testdata/config.yaml
+++ b/exporter/kafkaexporter/testdata/config.yaml
@@ -3,6 +3,7 @@ kafka:
brokers:
- "foo:123"
- "bar:456"
+ client_id: "test_client_id"
metadata:
full: false
retry:
@@ -11,6 +12,7 @@ kafka:
max_message_bytes: 10000000
required_acks: -1 # WaitForAll
timeout: 10s
+ partition_traces_by_id: true
auth:
plain_text:
username: jdoe
diff --git a/exporter/kineticaexporter/common.go b/exporter/kineticaexporter/common.go
new file mode 100644
index 000000000000..902ff230e67c
--- /dev/null
+++ b/exporter/kineticaexporter/common.go
@@ -0,0 +1,750 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package kineticaexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kineticaexporter"
+
+import (
+ "encoding/json"
+ "fmt"
+
+ "go.opentelemetry.io/collector/pdata/pcommon"
+)
+
+const (
+ MeasurementSpans = "spans"
+ MeasurementSpanLinks = "span-links"
+ MeasurementLogs = "logs"
+
+ // These attribute key names are influenced by the proto message keys.
+ AttributeTime = "time"
+ AttributeStartTimeUnixNano = "start_time_unix_nano"
+ AttributeTraceID = "trace_id"
+ AttributeSpanID = "span_id"
+ AttributeTraceState = "trace_state"
+ AttributeParentSpanID = "parent_span_id"
+ AttributeParentServiceName = "parent_service_name"
+ AttributeChildServiceName = "child_service_name"
+ AttributeCallCount = "call_count"
+ AttributeSpansQueueDepth = "spans_queue_depth"
+ AttributeSpansDropped = "spans_dropped"
+ AttributeName = "name"
+ AttributeSpanKind = "kind"
+ AttributeEndTimeUnixNano = "end_time_unix_nano"
+ AttributeDurationNano = "duration_nano"
+ AttributeDroppedAttributesCount = "dropped_attributes_count"
+ AttributeDroppedEventsCount = "dropped_events_count"
+ AttributeDroppedLinksCount = "dropped_links_count"
+ AttributeAttributes = "attributes"
+ AttributeLinkedTraceID = "linked_trace_id"
+ AttributeLinkedSpanID = "linked_span_id"
+ AttributeSeverityNumber = "severity_number"
+ AttributeSeverityText = "severity_text"
+ AttributeBody = "body"
+
+ LogTable = "log"
+ LogAttributeTable = "log_attribute"
+ LogResourceAttributeTable = "log_resource_attribute"
+ LogScopeAttributeTable = "log_scope_attribute"
+
+ TraceSpanTable = "trace_span"
+ TraceSpanAttributeTable = "trace_span_attribute"
+ TraceResourceAttributeTable = "trace_resource_attribute"
+ TraceScopeAttributeTable = "trace_scope_attribute"
+ TraceEventAttributeTable = "trace_event_attribute"
+ TraceLinkAttributeTable = "trace_link_attribute"
+
+ GaugeTable = "metric_gauge"
+ GaugeDatapointTable = "metric_gauge_datapoint"
+ GaugeDatapointAttributeTable = "metric_gauge_datapoint_attribute"
+ GaugeDatapointExemplarTable = "metric_gauge_datapoint_exemplar"
+ GaugeDatapointExemplarAttributeTable = "metric_gauge_datapoint_exemplar_attribute"
+ GaugeResourceAttributeTable = "metric_gauge_resource_attribute"
+ GaugeScopeAttributeTable = "metric_gauge_scope_attribute"
+
+ SumTable = "metric_sum"
+ SumResourceAttributeTable = "metric_sum_resource_attribute"
+ SumScopeAttributeTable = "metric_sum_scope_attribute"
+ SumDatapointTable = "metric_sum_datapoint"
+ SumDatapointAttributeTable = "metric_sum_datapoint_attribute"
+ SumDatapointExemplarTable = "metric_sum_datapoint_exemplar"
+ SumDataPointExemplarAttributeTable = "metric_sum_datapoint_exemplar_attribute"
+
+ HistogramTable = "metric_histogram"
+ HistogramResourceAttributeTable = "metric_histogram_resource_attribute"
+ HistogramScopeAttributeTable = "metric_histogram_scope_attribute"
+ HistogramDatapointTable = "metric_histogram_datapoint"
+ HistogramDatapointAttributeTable = "metric_histogram_datapoint_attribute"
+ HistogramBucketCountsTable = "metric_histogram_datapoint_bucket_count"
+ HistogramExplicitBoundsTable = "metric_histogram_datapoint_explicit_bound"
+ HistogramDatapointExemplarTable = "metric_histogram_datapoint_exemplar"
+ HistogramDataPointExemplarAttributeTable = "metric_histogram_datapoint_exemplar_attribute"
+
+ ExpHistogramTable = "metric_exp_histogram"
+ ExpHistogramResourceAttributeTable = "metric_exp_histogram_resource_attribute"
+ ExpHistogramScopeAttributeTable = "metric_exp_histogram_scope_attribute"
+ ExpHistogramDatapointTable = "metric_exp_histogram_datapoint"
+ ExpHistogramDatapointAttributeTable = "metric_exp_histogram_datapoint_attribute"
+ ExpHistogramPositiveBucketCountsTable = "metric_exp_histogram_datapoint_bucket_positive_count"
+ ExpHistogramNegativeBucketCountsTable = "metric_exp_histogram_datapoint_bucket_negative_count"
+ ExpHistogramDatapointExemplarTable = "metric_exp_histogram_datapoint_exemplar"
+ ExpHistogramDataPointExemplarAttributeTable = "metric_exp_histogram_datapoint_exemplar_attribute"
+
+ SummaryTable = "metric_summary"
+ SummaryResourceAttributeTable = "metric_summary_resource_attribute"
+ SummaryScopeAttributeTable = "metric_summary_scope_attribute"
+ SummaryDatapointTable = "metric_summary_datapoint"
+ SummaryDatapointAttributeTable = "metric_summary_datapoint_attribute"
+ SummaryDatapointQuantileValueTable = "metric_summary_datapoint_quantile_values"
+
+ ChunkSize = 10000
+)
+
+const (
+ CreateSchema string = "create schema if not exists %s;"
+
+ HasTable string = "execute endpoint '/has/table' JSON '{\"table_name\":\"%s\"}'"
+
+ // Metrics - DDLs
+ // Gauge
+ CreateGauge string = `CREATE TABLE %smetric_gauge
+ (
+ gauge_id UUID (primary_key, shard_key) not null,
+ metric_name varchar(256) not null,
+ metric_description varchar (256),
+ metric_unit varchar (256)
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateGaugeDatapoint string = `CREATE TABLE %smetric_gauge_datapoint
+ (
+ gauge_id UUID (primary_key, shard_key) not null,
+ id UUID (primary_key) not null,
+ start_time_unix TIMESTAMP NOT NULL,
+ time_unix TIMESTAMP NOT NULL,
+ gauge_value DOUBLE,
+ flags INT,
+ FOREIGN KEY (gauge_id) references %smetric_gauge(gauge_id) as fk_gauge_datapoint
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateGaugeDatapointAttribute string = `CREATE TABLE %smetric_gauge_datapoint_attribute
+ (
+ "gauge_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (gauge_id) references %smetric_gauge(gauge_id) as fk_gauge_datapoint_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateGaugeDatapointExemplar string = `CREATE TABLE %smetric_gauge_datapoint_exemplar
+ (
+ "gauge_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ time_unix TIMESTAMP NOT NULL,
+ gauge_value DOUBLE,
+ "trace_id" VARCHAR (32),
+ "span_id" VARCHAR (16),
+ FOREIGN KEY (gauge_id) references %smetric_gauge(gauge_id) as fk_gauge_datapoint_exemplar
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateGaugeDatapointExemplarAttribute string = `CREATE TABLE %smetric_gauge_datapoint_exemplar_attribute
+ (
+ "gauge_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (gauge_id) references %smetric_gauge(gauge_id) as fk_gauge_datapoint_exemplar_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateGaugeResourceAttribute string = `CREATE TABLE %smetric_gauge_resource_attribute
+ (
+ "gauge_id" UUID (primary_key) NOT NULL,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (gauge_id),
+ FOREIGN KEY (gauge_id) references %smetric_gauge(gauge_id) as fk_gauge_resource_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateGaugeScopeAttribute string = `CREATE TABLE %smetric_gauge_scope_attribute
+ (
+ "gauge_id" UUID (primary_key) NOT NULL,
+ "name" VARCHAR (256),
+ "version" VARCHAR (256),
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (gauge_id),
+ FOREIGN KEY (gauge_id) references %smetric_gauge(gauge_id) as fk_gauge_scope_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ // Sum
+
+ CreateSum string = `CREATE TABLE %smetric_sum
+ (
+ sum_id UUID (primary_key, shard_key) not null,
+ metric_name varchar (256) not null,
+ metric_description varchar (256),
+ metric_unit varchar (256),
+ aggregation_temporality INTEGER,
+ is_monotonic BOOLEAN
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSumDatapoint string = `CREATE TABLE %smetric_sum_datapoint
+ (
+ sum_id UUID (primary_key, shard_key) not null,
+ id UUID (primary_key) not null,
+ start_time_unix TIMESTAMP NOT NULL,
+ time_unix TIMESTAMP NOT NULL,
+ sum_value DOUBLE,
+ flags INT,
+ FOREIGN KEY (sum_id) references %smetric_sum(sum_id) as fk_sum_datapoint
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSumDatapointAttribute string = `CREATE TABLE %smetric_sum_datapoint_attribute
+ (
+ "sum_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (sum_id) references %smetric_sum(sum_id) as fk_sum_datapoint_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSumDatapointExemplar string = `CREATE TABLE %smetric_sum_datapoint_exemplar
+ (
+ "sum_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ time_unix TIMESTAMP NOT NULL,
+ sum_value DOUBLE,
+ "trace_id" VARCHAR (32),
+ "span_id" VARCHAR (16),
+ FOREIGN KEY (sum_id) references %smetric_sum(sum_id) as fk_sum_datapoint_exemplar
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSumDatapointExemplarAttribute string = `CREATE TABLE %smetric_sum_datapoint_exemplar_attribute
+ (
+ "sum_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (sum_id) references %smetric_sum(sum_id) as fk_sum_datapoint_exemplar_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSumResourceAttribute string = `CREATE TABLE %smetric_sum_resource_attribute
+ (
+ "sum_id" UUID (primary_key) NOT NULL,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (sum_id),
+ FOREIGN KEY (sum_id) references %smetric_sum(sum_id) as fk_sum_resource_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSumScopeAttribute string = `CREATE TABLE %smetric_sum_scope_attribute
+ (
+ "sum_id" UUID (primary_key) NOT NULL,
+ "name" VARCHAR (256),
+ "version" VARCHAR (256),
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (sum_id),
+ FOREIGN KEY (sum_id) references %smetric_sum(sum_id) as fk_sum_scope_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+
+ // Histogram
+
+ CreateHistogram string = `CREATE TABLE %smetric_histogram
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ metric_name varchar (256) not null,
+ metric_description varchar (256),
+ metric_unit varchar (256),
+ aggregation_temporality int8
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+
+ CreateHistogramDatapoint string = `CREATE TABLE %smetric_histogram_datapoint
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ id UUID (primary_key) not null,
+ start_time_unix TIMESTAMP,
+ time_unix TIMESTAMP NOT NULL,
+ count LONG,
+ data_sum DOUBLE,
+ data_min DOUBLE,
+ data_max DOUBLE,
+ flags INT,
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_datapoint
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateHistogramDatapointBucketCount string = `CREATE TABLE %smetric_histogram_datapoint_bucket_count
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ datapoint_id UUID (primary_key) not null,
+ count_id UUID (primary_key) not null,
+ count LONG,
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_datapoint_bucket_count
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateHistogramDatapointExplicitBound string = `CREATE TABLE %smetric_histogram_datapoint_explicit_bound
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ datapoint_id UUID (primary_key) not null,
+ bound_id UUID (primary_key) not null,
+ explicit_bound DOUBLE,
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_datapoint_explicit_bound
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateHistogramDatapointAttribute string = `CREATE TABLE %smetric_histogram_datapoint_attribute
+ (
+ "histogram_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_datapoint_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateHistogramDatapointExemplar string = `CREATE TABLE %smetric_histogram_datapoint_exemplar
+ (
+ "histogram_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ time_unix TIMESTAMP NOT NULL,
+ histogram_value DOUBLE,
+ "trace_id" VARCHAR (32),
+ "span_id" VARCHAR (16),
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_datapoint_exemplar
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateHistogramDatapointExemplarAttribute string = `CREATE TABLE %smetric_histogram_datapoint_exemplar_attribute
+ (
+ "histogram_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_datapoint_exemplar_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateHistogramResourceAttribute string = `CREATE TABLE %smetric_histogram_resource_attribute
+ (
+ "histogram_id" UUID (primary_key) NOT NULL,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (histogram_id),
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_resource_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateHistogramScopeAttribute string = `CREATE TABLE %smetric_histogram_scope_attribute
+ (
+ "histogram_id" UUID (primary_key) NOT NULL,
+ "name" VARCHAR (256),
+ "version" VARCHAR (256),
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (histogram_id),
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_scope_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ // exponential Histogram
+ CreateExpHistogram string = `CREATE TABLE %smetric_exp_histogram
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ metric_name varchar (256) not null,
+ metric_description varchar (256),
+ metric_unit varchar (256),
+ aggregation_temporality int8
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramDatapoint string = `CREATE TABLE %smetric_exp_histogram_datapoint
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ id UUID (primary_key) not null,
+ start_time_unix TIMESTAMP,
+ time_unix TIMESTAMP NOT NULL,
+ count LONG,
+ data_sum DOUBLE,
+ scale INTEGER,
+ zero_count LONG,
+ buckets_positive_offset INTEGER,
+ buckets_negative_offset INTEGER,
+ data_min DOUBLE,
+ data_max DOUBLE,
+ flags INT,
+ FOREIGN KEY (histogram_id) references %smetric_exp_histogram(histogram_id) as fk_exp_histogram_datapoint
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramDatapointBucketPositiveCount string = `CREATE TABLE %smetric_exp_histogram_datapoint_bucket_positive_count
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ datapoint_id UUID (primary_key) not null,
+ count_id UUID (primary_key) not null,
+ count LONG,
+ FOREIGN KEY (histogram_id) references %smetric_exp_histogram(histogram_id) as fk_exp_histogram_datapoint_bucket_count
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramDatapointBucketNegativeCount string = `CREATE TABLE %smetric_exp_histogram_datapoint_bucket_negative_count
+ (
+ histogram_id UUID (primary_key, shard_key) not null,
+ datapoint_id UUID (primary_key) not null,
+ count_id UUID (primary_key) not null,
+ count LONG,
+ FOREIGN KEY (histogram_id) references %smetric_exp_histogram(histogram_id) as fk_exp_histogram_datapoint_bucket_count
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramDatapointAttribute string = `CREATE TABLE %smetric_exp_histogram_datapoint_attribute
+ (
+ "histogram_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (histogram_id) references %smetric_exp_histogram(histogram_id) as fk_exp_histogram_datapoint_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramDatapointExemplar string = `CREATE TABLE %smetric_exp_histogram_datapoint_exemplar
+ (
+ "histogram_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ time_unix TIMESTAMP NOT NULL,
+ sum_value DOUBLE,
+ "trace_id" VARCHAR (32),
+ "span_id" VARCHAR (16),
+ FOREIGN KEY (histogram_id) references %smetric_exp_histogram(histogram_id) as fk_exp_histogram_datapoint_exemplar
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramDatapointExemplarAttribute string = `CREATE TABLE %smetric_exp_histogram_datapoint_exemplar_attribute
+ (
+ "histogram_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ exemplar_id UUID (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (histogram_id) references %smetric_exp_histogram(histogram_id) as fk_exp_histogram_datapoint_exemplar_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramResourceAttribute string = `CREATE TABLE %smetric_exp_histogram_resource_attribute
+ (
+ "histogram_id" UUID (primary_key) NOT NULL,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (histogram_id),
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_resource_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateExpHistogramScopeAttribute string = `CREATE TABLE %smetric_exp_histogram_scope_attribute
+ (
+ "histogram_id" UUID (primary_key) NOT NULL,
+ "name" VARCHAR (256),
+ "version" VARCHAR (256),
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (histogram_id),
+ FOREIGN KEY (histogram_id) references %smetric_histogram(histogram_id) as fk_histogram_scope_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ // Summary
+ CreateSummary string = `CREATE TABLE %smetric_summary
+ (
+ summary_id UUID (primary_key, shard_key) not null,
+ metric_name varchar (256) not null,
+ metric_description varchar (256),
+ metric_unit varchar (256)
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSummaryDatapoint string = `CREATE TABLE %smetric_summary_datapoint
+ (
+ summary_id UUID (primary_key, shard_key) not null,
+ id UUID (primary_key) not null,
+ start_time_unix TIMESTAMP,
+ time_unix TIMESTAMP NOT NULL,
+ count LONG,
+ data_sum DOUBLE,
+ flags INT,
+ FOREIGN KEY (summary_id) references %smetric_summary(summary_id) as fk_summary_datapoint
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSummaryDatapointAttribute string = `CREATE TABLE %smetric_summary_datapoint_attribute
+ (
+ "summary_id" UUID (primary_key, shard_key) NOT NULL,
+ datapoint_id uuid (primary_key) not null,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ FOREIGN KEY (summary_id) references %smetric_summary(summary_id) as fk_summary_datapoint_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSummaryDatapointQuantileValues string = `CREATE TABLE %smetric_summary_datapoint_quantile_values
+ (
+ summary_id UUID (primary_key, shard_key) not null,
+ datapoint_id UUID (primary_key) not null,
+ quantile_id UUID (primary_key) not null,
+ quantile DOUBLE,
+ value DOUBLE,
+ FOREIGN KEY (summary_id) references %smetric_summary(summary_id) as fk_summary_datapoint_quantile
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSummaryResourceAttribute string = `CREATE TABLE %smetric_summary_resource_attribute
+ (
+ "summary_id" UUID (primary_key) NOT NULL,
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (summary_id),
+ FOREIGN KEY (summary_id) references %smetric_summary(summary_id) as fk_summary_resource_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+ CreateSummaryScopeAttribute string = `CREATE TABLE %smetric_summary_scope_attribute
+ (
+ "summary_id" UUID (primary_key) NOT NULL,
+ "name" VARCHAR (256),
+ "version" VARCHAR (256),
+ "key" VARCHAR (primary_key, 128, dict) NOT NULL,
+ "string_value" VARCHAR (256),
+ "bool_value" BOOLEAN,
+ "int_value" INTEGER,
+ "double_value" DOUBLE,
+ "bytes_value" BLOB (store_only),
+ SHARD KEY (summary_id),
+ FOREIGN KEY (summary_id) references %smetric_summary(summary_id) as fk_summary_scope_attribute
+ ) USING TABLE PROPERTIES (NO_ERROR_IF_EXISTS = TRUE);
+ `
+)
+
+// ValueTypePair - struct to wrap a value as [any] and its type [pcommon.ValueType]
+type ValueTypePair struct {
+ value any
+ valueType pcommon.ValueType
+}
+
+// attributeValueToKineticaFieldValue - Convert an attribute value to a [ValueTypePair] for writing to Kinetica
+//
+// @param value
+// @return ValueTypePair
+// @return error
+func attributeValueToKineticaFieldValue(value pcommon.Value) (ValueTypePair, error) {
+ switch value.Type() {
+ case pcommon.ValueTypeStr:
+ var val string
+ if len(value.Str()) > 256 {
+ val = value.Str()[0:255]
+ } else {
+ val = value.Str()
+ }
+ return ValueTypePair{val, pcommon.ValueTypeStr}, nil
+ case pcommon.ValueTypeInt:
+ return ValueTypePair{value.Int(), pcommon.ValueTypeInt}, nil
+ case pcommon.ValueTypeDouble:
+ return ValueTypePair{value.Double(), pcommon.ValueTypeDouble}, nil
+ case pcommon.ValueTypeBool:
+ return ValueTypePair{value.Bool(), pcommon.ValueTypeBool}, nil
+ case pcommon.ValueTypeMap:
+ jsonBytes, err := json.Marshal(otlpKeyValueListToMap(value.Map()))
+ if err != nil {
+ return ValueTypePair{nil, pcommon.ValueTypeEmpty}, err
+ }
+ return ValueTypePair{string(jsonBytes), pcommon.ValueTypeStr}, nil
+ case pcommon.ValueTypeSlice:
+ jsonBytes, err := json.Marshal(otlpArrayToSlice(value.Slice()))
+ if err != nil {
+ return ValueTypePair{nil, pcommon.ValueTypeEmpty}, err
+ }
+ return ValueTypePair{string(jsonBytes), pcommon.ValueTypeStr}, nil
+ case pcommon.ValueTypeEmpty:
+ return ValueTypePair{nil, pcommon.ValueTypeEmpty}, nil
+ default:
+ return ValueTypePair{nil, pcommon.ValueTypeEmpty}, fmt.Errorf("Unknown value type %v", value)
+ }
+}
+
+// otlpKeyValueListToMap - Convert an otlp Map to a map[string]interface{} with proper type conversions
+//
+// @param kvList
+// @return map
+func otlpKeyValueListToMap(kvList pcommon.Map) map[string]any {
+ m := make(map[string]any, kvList.Len())
+ kvList.Range(func(k string, v pcommon.Value) bool {
+ switch v.Type() {
+ case pcommon.ValueTypeStr:
+ m[k] = v.Str()
+ case pcommon.ValueTypeInt:
+ m[k] = v.Int()
+ case pcommon.ValueTypeDouble:
+ m[k] = v.Double()
+ case pcommon.ValueTypeBool:
+ m[k] = v.Bool()
+ case pcommon.ValueTypeMap:
+ m[k] = otlpKeyValueListToMap(v.Map())
+ case pcommon.ValueTypeSlice:
+ m[k] = otlpArrayToSlice(v.Slice())
+ case pcommon.ValueTypeEmpty:
+ m[k] = nil
+ default:
+ m[k] = fmt.Sprintf(" %v", v)
+ }
+ return true
+ })
+ return m
+}
+
+// otlpArrayToSlice - Convert an otlp slice to a slice of interface{} with proper type conversions
+//
+// @param arr
+// @return []interface{}
+func otlpArrayToSlice(arr pcommon.Slice) []any {
+ s := make([]any, 0, arr.Len())
+ for i := 0; i < arr.Len(); i++ {
+ v := arr.At(i)
+ switch v.Type() {
+ case pcommon.ValueTypeStr:
+ s = append(s, v.Str())
+ case pcommon.ValueTypeInt:
+ s = append(s, v.Int())
+ case pcommon.ValueTypeDouble:
+ s = append(s, v.Double())
+ case pcommon.ValueTypeBool:
+ s = append(s, v.Bool())
+ case pcommon.ValueTypeEmpty:
+ s = append(s, nil)
+ default:
+ s = append(s, fmt.Sprintf(" %v", v))
+ }
+ }
+ return s
+}
+
+// getAttributeValue
+//
+// @param vtPair
+// @return *AttributeValue
+// @return error
+func getAttributeValue(vtPair ValueTypePair) (*AttributeValue, error) {
+ var av *AttributeValue
+ var err error
+ switch vtPair.valueType {
+ case pcommon.ValueTypeStr:
+ value := vtPair.value.(string)
+ av = new(AttributeValue)
+ av.StringValue = value
+ case pcommon.ValueTypeInt:
+ value := vtPair.value.(int)
+ av = new(AttributeValue)
+ av.IntValue = value
+ case pcommon.ValueTypeDouble:
+ value := vtPair.value.(float64)
+ av = new(AttributeValue)
+ av.DoubleValue = value
+ case pcommon.ValueTypeBool:
+ value := vtPair.value.(int8)
+ av = new(AttributeValue)
+ av.BoolValue = value
+ case pcommon.ValueTypeBytes:
+ value := vtPair.value.([]byte)
+ av = new(AttributeValue)
+ copy(av.BytesValue, value)
+ case pcommon.ValueTypeMap:
+ // value := vtPair.value
+ // av = new(AttributeValue)
+ // av.SetStringValue(value)
+ err = fmt.Errorf("Unhandled value type %v", vtPair.valueType)
+
+ case pcommon.ValueTypeSlice:
+ // value := vtPair.value.(string)
+ // av = new(AttributeValue)
+ // av.SetStringValue(value)
+ err = fmt.Errorf("Unhandled value type %v", vtPair.valueType)
+
+ default:
+ err = fmt.Errorf("Unknown value type %v", vtPair.valueType)
+ }
+
+ if err != nil {
+ return nil, err
+ }
+
+ return av, nil
+
+}
+
+// chunkBySize - Splits a slice into multiple slices of the given size
+//
+// @param items
+// @param chunkSize
+// @return [][]T
+func chunkBySize[T any](items []T, chunkSize int) [][]T {
+ var _chunks = make([][]T, 0, (len(items)/chunkSize)+1)
+ for chunkSize < len(items) {
+ items, _chunks = items[chunkSize:], append(_chunks, items[0:chunkSize:chunkSize])
+ }
+ return append(_chunks, items)
+}
diff --git a/exporter/kineticaexporter/config.go b/exporter/kineticaexporter/config.go
index 701e40077585..a90b7baeaad8 100644
--- a/exporter/kineticaexporter/config.go
+++ b/exporter/kineticaexporter/config.go
@@ -18,7 +18,6 @@ type Config struct {
Username string `mapstructure:"username"`
Password configopaque.String `mapstructure:"password"`
BypassSslCertCheck bool `mapstructure:"bypasssslcertcheck"`
- LogConfigFile string `mapstructure:"logconfigfile"`
}
// Validate the config
diff --git a/exporter/kineticaexporter/config_test.go b/exporter/kineticaexporter/config_test.go
index 19e08f37d494..8d5517b78e92 100644
--- a/exporter/kineticaexporter/config_test.go
+++ b/exporter/kineticaexporter/config_test.go
@@ -29,7 +29,7 @@ func TestLoadConfig(t *testing.T) {
}{
{
- id: component.NewIDWithName("kinetica", ""),
+ id: component.MustNewIDWithName("kinetica", ""),
expected: defaultCfg,
},
}
diff --git a/exporter/kineticaexporter/exporter_metric_test.go b/exporter/kineticaexporter/exporter_metric_test.go
new file mode 100644
index 000000000000..49677fa1b383
--- /dev/null
+++ b/exporter/kineticaexporter/exporter_metric_test.go
@@ -0,0 +1,524 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package kineticaexporter
+
+import (
+ "context"
+ "fmt"
+ "io"
+ "net/http"
+ "net/http/httptest"
+ "os"
+ "strings"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.uber.org/zap/zaptest"
+)
+
+var testServer *httptest.Server
+var baseURL string
+
+var showTableMetricSummaryResponse = "\x04OK\x00&show_table_response\xfe\x13&otel.metric_summary\x02&otel.metric_summary\x00\x02\x00\x00\x02(14940230562727554683\x00\x02\xc6\x03{\"type\":\"record\",\"name\":\"type_name\",\"fields\":[{\"name\":\"summary_id\",\"type\":\"string\"},{\"name\":\"metric_name\",\"type\":\"string\"},{\"name\":\"metric_description\",\"type\":[\"string\",\"null\"]},{\"name\":\"metric_unit\",\"type\":[\"string\",\"null\"]}]}\x00\x02\x00\x00\x02\x08$metric_description\x06\x08data\x0echar256\x10nullable\x00\x16metric_name\x04\x08data\x0echar256\x00\x16metric_unit\x06\x08data\x0echar256\x10nullable\x00\x14summary_id\x08\x08data\x16primary_key\x12shard_key\x08uuid\x00\x00\x00\x028\"attribute_indexes\x00 collection_names\x08otel$compressed_columns\x000datasource_subscriptions\x00\x18foreign_keys\x00\"foreign_shard_key\x00$global_access_mode\x14read_write,is_automatic_partition\nfalse\x10is_dirty\x00\"is_view_persisted\x00\"last_refresh_time\x00(owner_resource_group ", string(finalResponseBytes))
+
+ _, err = w.Write(finalResponseBytes)
+ if err != nil {
+ http.Error(w, "Error wrting reesponse", http.StatusInternalServerError)
+ return
+ }
+
+}
+
+func getShowTableResponse(requestBody string) []byte {
+ switch {
+ case strings.Contains(requestBody, "metric_summary_scope_attribute"):
+ return []byte(showTableMetricSummaryScopeAttributesResponse)
+ case strings.Contains(requestBody, "metric_summary_resource_attribute"):
+ return []byte(showTableMetricSummaryResourceAttributesResponse)
+ case strings.Contains(requestBody, "metric_summary_datapoint_quantile_values"):
+ return []byte(showTableMetricSummaryDatapointQuantileValuesResponse)
+ case strings.Contains(requestBody, "metric_summary_datapoint_attribute"):
+ return []byte(showTableMetricSummaryDatapointAttributeResponse)
+ case strings.Contains(requestBody, "metric_summary_datapoint"):
+ return []byte(showTableMetricSummaryDatapointResponse)
+ case strings.Contains(requestBody, "metric_summary"):
+ return []byte(showTableMetricSummaryResponse)
+ default:
+ return []byte("")
+ }
+
+}
+
+// Setup function (runs before tests start)
+func TestMain(m *testing.M) {
+ // Create a test server with a simple handler function
+ testServer = httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ fmt.Println("In main ...")
+ switch r.URL.Path {
+ case "/insert/records":
+ handleInsertRecords(w, r)
+ case "/show/table":
+ handleShowTable(w, r)
+ case "/execute/sql":
+ handleExecuteSQL(w, r)
+ default:
+ http.Error(w, "Not found", http.StatusNotFound)
+ }
+ }))
+
+ baseURL = testServer.URL // Store the base URL for test requests
+
+ // Run the tests
+ code := m.Run()
+
+ // Teardown: Close the test server after all tests are finished
+ testServer.Close()
+ // Perform any other teardown operations here if needed
+
+ // Exit with the test status code
+ // This allows TestMain to report the result of the tests
+ // You can also perform further actions based on the test results
+ os.Exit(code)
+}
diff --git a/exporter/kineticaexporter/generated_component_test.go b/exporter/kineticaexporter/generated_component_test.go
new file mode 100644
index 000000000000..b2ce8ed923d7
--- /dev/null
+++ b/exporter/kineticaexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package kineticaexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/kineticaexporter/go.mod b/exporter/kineticaexporter/go.mod
index ea3a942c5ab9..3e5332d1bed1 100644
--- a/exporter/kineticaexporter/go.mod
+++ b/exporter/kineticaexporter/go.mod
@@ -1,50 +1,75 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kineticaexporter
-go 1.20
+go 1.21
require (
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/google/uuid v1.6.0
+ github.com/kineticadb/kinetica-api-go v0.0.3
+ github.com/samber/lo v1.39.0
+ github.com/stretchr/testify v1.9.0
+ github.com/wk8/go-ordered-map/v2 v2.1.8
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/multierr v1.11.0
+ go.uber.org/zap v1.27.0
+ gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
+ gopkg.in/yaml.v2 v2.4.0 // indirect
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/bahlo/generic-list-go v0.2.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/buger/jsonparser v1.1.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-resty/resty/v2 v2.7.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/golang/snappy v0.0.4 // indirect
+ github.com/hamba/avro/v2 v2.13.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
+ github.com/logrusorgru/aurora v2.0.3+incompatible // indirect
+ github.com/mailru/easyjson v0.7.7 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
+ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // 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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/ztrue/tracerr v0.3.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/kineticaexporter/go.sum b/exporter/kineticaexporter/go.sum
index 1c52c4b651e2..595faf29ee26 100644
--- a/exporter/kineticaexporter/go.sum
+++ b/exporter/kineticaexporter/go.sum
@@ -1,72 +1,67 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk=
+github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/buger/jsonparser v1.1.1 h1:2PnMjfWD7wBILjqQbt530v576A/cAbQvEW9gGIpYMUs=
+github.com/buger/jsonparser v1.1.1/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
+github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
+github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hamba/avro/v2 v2.13.0 h1:QY2uX2yvJTW0OoMKelGShvq4v1hqab6CxJrPwh0fnj0=
+github.com/hamba/avro/v2 v2.13.0/go.mod h1:Q9YK+qxAhtVrNqOhwlZTATLgLA8qxG2vtvkhK8fJ7Jo=
+github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/kineticadb/kinetica-api-go v0.0.3 h1:DXBe/VYr5WGjQNZG+5ETBVJiFq7bMKpgB1/U5c7NcW0=
+github.com/kineticadb/kinetica-api-go v0.0.3/go.mod h1:mbazf5lM5ApXXF3eRelAY76BhFWpVyuXhWv3vmTJixA=
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/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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/logrusorgru/aurora v0.0.0-20181002194514-a7b3b318ed4e/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
+github.com/logrusorgru/aurora v2.0.3+incompatible h1:tOpm7WcpBTn4fjmVfgpQq0EfczGlG91VSDkswnjF5A8=
+github.com/logrusorgru/aurora v2.0.3+incompatible/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4=
+github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
+github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -77,103 +72,101 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/samber/lo v1.39.0 h1:4gTz1wUhNYLhFSKl6O+8peW0v2F4BCY034GRpU9WnuA=
+github.com/samber/lo v1.39.0/go.mod h1:+m/ZKRl6ClXCE2Lgf3MsQlWfh4bn1bz6CXEOxnEXnEA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
+github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+github.com/ztrue/tracerr v0.3.0 h1:lDi6EgEYhPYPnKcjsYzmWw4EkFEoA/gfe+I9Y5f+h6Y=
+github.com/ztrue/tracerr v0.3.0/go.mod h1:qEalzze4VN9O8tnhBXScfCrmoJo10o8TN5ciKjm6Mww=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611 h1:qCEDpW1G+vcj3Y7Fy52pEM1AWm3abj8WimGYejI3SC4=
+golang.org/x/exp v0.0.0-20231214170342-aacd6d4b4611/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -181,38 +174,20 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832 h1:o4LtQxebKIJ4vkzyhtD2rfUNZ20Zf0ik5YVP5E7G7VE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230911183012-2d3300fd4832/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST95x9zc=
+gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/kineticaexporter/internal/metadata/generated_status.go b/exporter/kineticaexporter/internal/metadata/generated_status.go
index 8ce647f25c4b..f0c0f4c69e8b 100644
--- a/exporter/kineticaexporter/internal/metadata/generated_status.go
+++ b/exporter/kineticaexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("kinetica")
)
const (
- Type = "kinetica"
MetricsStability = component.StabilityLevelDevelopment
TracesStability = component.StabilityLevelDevelopment
LogsStability = component.StabilityLevelDevelopment
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/kinetica")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/kinetica")
+}
diff --git a/exporter/kineticaexporter/metadata.yaml b/exporter/kineticaexporter/metadata.yaml
index 63137132f7e3..aaa519c61567 100644
--- a/exporter/kineticaexporter/metadata.yaml
+++ b/exporter/kineticaexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: kinetica
+scope_name: otelcol/kinetica
status:
class: exporter
@@ -7,3 +8,8 @@ status:
distributions: []
codeowners:
active: [am-kinetica, TylerHelmuth]
+
+
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
\ No newline at end of file
diff --git a/exporter/kineticaexporter/metrics_exporter.go b/exporter/kineticaexporter/metrics_exporter.go
index c5fd6484b864..790bfa5a7bee 100644
--- a/exporter/kineticaexporter/metrics_exporter.go
+++ b/exporter/kineticaexporter/metrics_exporter.go
@@ -5,26 +5,238 @@ package kineticaexporter // import "github.com/open-telemetry/opentelemetry-coll
import (
"context"
+ "fmt"
+ "strings"
+ "github.com/google/uuid"
+ "github.com/samber/lo"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/pmetric"
+ "go.uber.org/multierr"
"go.uber.org/zap"
)
+// Metrics handling
+
+type kineticaGaugeRecord struct {
+ gauge *Gauge
+ resourceAttribute []GaugeResourceAttribute
+ scopeAttribute []GaugeScopeAttribute
+ datapoint []GaugeDatapoint
+ datapointAttribute []GaugeDatapointAttribute
+ exemplars []GaugeDatapointExemplar
+ exemplarAttribute []GaugeDataPointExemplarAttribute
+}
+
+type kineticaSumRecord struct {
+ sum *Sum
+ sumResourceAttribute []SumResourceAttribute
+ sumScopeAttribute []SumScopeAttribute
+ datapoint []SumDatapoint
+ datapointAttribute []SumDataPointAttribute
+ exemplars []SumDatapointExemplar
+ exemplarAttribute []SumDataPointExemplarAttribute
+}
+
+type kineticaHistogramRecord struct {
+ histogram *Histogram
+ histogramResourceAttribute []HistogramResourceAttribute
+ histogramScopeAttribute []HistogramScopeAttribute
+ histogramDatapoint []HistogramDatapoint
+ histogramDatapointAtribute []HistogramDataPointAttribute
+ histogramBucketCount []HistogramDatapointBucketCount
+ histogramExplicitBound []HistogramDatapointExplicitBound
+ exemplars []HistogramDatapointExemplar
+ exemplarAttribute []HistogramDataPointExemplarAttribute
+}
+
+type kineticaExponentialHistogramRecord struct {
+ histogram *ExponentialHistogram
+ histogramResourceAttribute []ExponentialHistogramResourceAttribute
+ histogramScopeAttribute []ExponentialHistogramScopeAttribute
+ histogramDatapoint []ExponentialHistogramDatapoint
+ histogramDatapointAttribute []ExponentialHistogramDataPointAttribute
+ histogramBucketNegativeCount []ExponentialHistogramBucketNegativeCount
+ histogramBucketPositiveCount []ExponentialHistogramBucketPositiveCount
+ exemplars []ExponentialHistogramDatapointExemplar
+ exemplarAttribute []ExponentialHistogramDataPointExemplarAttribute
+}
+
+type kineticaSummaryRecord struct {
+ summary *Summary
+ summaryDatapoint []SummaryDatapoint
+ summaryDatapointAttribute []SummaryDataPointAttribute
+ summaryResourceAttribute []SummaryResourceAttribute
+ summaryScopeAttribute []SummaryScopeAttribute
+ summaryDatapointQuantileValues []SummaryDatapointQuantileValues
+}
+
+var (
+ gaugeTableDDLs = []string{
+ CreateGauge,
+ CreateGaugeDatapoint,
+ CreateGaugeDatapointAttribute,
+ CreateGaugeDatapointExemplar,
+ CreateGaugeDatapointExemplarAttribute,
+ CreateGaugeResourceAttribute,
+ CreateGaugeScopeAttribute,
+ }
+
+ sumTableDDLs = []string{
+ CreateSum,
+ CreateSumDatapoint,
+ CreateSumDatapointAttribute,
+ CreateSumDatapointExemplar,
+ CreateSumDatapointExemplarAttribute,
+ CreateSumResourceAttribute,
+ CreateSumScopeAttribute,
+ }
+
+ histogramTableDDLs = []string{
+ CreateHistogram,
+ CreateHistogramDatapoint,
+ CreateHistogramDatapointBucketCount,
+ CreateHistogramDatapointExplicitBound,
+ CreateHistogramDatapointAttribute,
+ CreateHistogramDatapointExemplar,
+ CreateHistogramDatapointExemplarAttribute,
+ CreateHistogramResourceAttribute,
+ CreateHistogramScopeAttribute,
+ }
+
+ expHistogramTableDDLs = []string{
+ CreateExpHistogram,
+ CreateExpHistogramDatapoint,
+ CreateExpHistogramDatapointBucketPositiveCount,
+ CreateExpHistogramDatapointBucketNegativeCount,
+ CreateExpHistogramDatapointAttribute,
+ CreateExpHistogramDatapointExemplar,
+ CreateExpHistogramDatapointExemplarAttribute,
+ CreateExpHistogramResourceAttribute,
+ CreateExpHistogramScopeAttribute,
+ }
+
+ summaryTableDDLs = []string{
+ CreateSummary,
+ CreateSummaryDatapoint,
+ CreateSummaryDatapointAttribute,
+ CreateSummaryDatapointQuantileValues,
+ CreateSummaryResourceAttribute,
+ CreateSummaryScopeAttribute,
+ }
+)
+
type kineticaMetricsExporter struct {
logger *zap.Logger
+ writer *KiWriter
}
-func newMetricsExporter(_ *zap.Logger, _ *Config) *kineticaMetricsExporter {
+func newMetricsExporter(logger *zap.Logger, cfg *Config) *kineticaMetricsExporter {
+ kineticaLogger := logger
+ writer := newKiWriter(context.TODO(), *cfg, kineticaLogger)
metricsExp := &kineticaMetricsExporter{
- logger: nil,
+ logger: kineticaLogger,
+ writer: writer,
}
return metricsExp
}
-func (e *kineticaMetricsExporter) start(_ context.Context, _ component.Host) error {
+func (e *kineticaMetricsExporter) start(ctx context.Context, _ component.Host) error {
- return nil
+ fmt.Println("SCHEMA NAME - ", e.writer.cfg.Schema)
+
+ if e.writer.cfg.Schema != "" && len(e.writer.cfg.Schema) != 0 {
+ // Config has a schema name
+ if err := createSchema(ctx, e.writer, e.writer.cfg); err != nil {
+ return err
+ }
+ }
+ err := createMetricTables(ctx, e.writer)
+ return err
+}
+
+// createMetricTables
+//
+// @param ctx
+// @param kiWriter
+// @return error
+func createMetricTables(ctx context.Context, kiWriter *KiWriter) error {
+ var errs []error
+
+ // create gauge tables
+ err := createTablesForMetricType(ctx, gaugeTableDDLs, kiWriter)
+ if err != nil {
+ errs = append(errs, err)
+ }
+
+ // create sum tables
+ err = createTablesForMetricType(ctx, sumTableDDLs, kiWriter)
+ if err != nil {
+ errs = append(errs, err)
+ }
+
+ // create histogram tables
+ err = createTablesForMetricType(ctx, histogramTableDDLs, kiWriter)
+ if err != nil {
+ errs = append(errs, err)
+ }
+
+ // create exponential histogram tables
+ err = createTablesForMetricType(ctx, expHistogramTableDDLs, kiWriter)
+ if err != nil {
+ errs = append(errs, err)
+ }
+
+ // create summary tables
+ err = createTablesForMetricType(ctx, summaryTableDDLs, kiWriter)
+ if err != nil {
+ errs = append(errs, err)
+ }
+
+ return multierr.Combine(errs...)
+}
+
+func createTablesForMetricType(ctx context.Context, metricTypeDDLs []string, kiWriter *KiWriter) error {
+ var errs []error
+
+ var schema string
+ schema = strings.Trim(kiWriter.cfg.Schema, " ")
+ if len(schema) > 0 {
+ schema += "."
+ } else {
+ schema = ""
+ }
+
+ lo.ForEach(metricTypeDDLs, func(ddl string, _ int) {
+
+ stmt := strings.ReplaceAll(ddl, "%s", schema)
+ kiWriter.logger.Debug("Creating Table - ", zap.String("DDL", stmt))
+
+ _, err := kiWriter.Db.ExecuteSqlRaw(ctx, stmt, 0, 0, "", nil)
+ if err != nil {
+ kiWriter.logger.Error(err.Error())
+ errs = append(errs, err)
+ }
+ })
+
+ return multierr.Combine(errs...)
+}
+
+// createSchema - Create a schema
+//
+// @param ctx
+// @param kiWriter
+// @param config
+// @return bool - True if schema creation successful
+func createSchema(ctx context.Context, kiWriter *KiWriter, config Config) error {
+ stmt := fmt.Sprintf(CreateSchema, config.Schema)
+ kiWriter.logger.Debug(stmt)
+ _, err := kiWriter.Db.ExecuteSqlRaw(ctx, stmt, 0, 0, "", nil)
+ if err != nil {
+ kiWriter.logger.Error(err.Error())
+ }
+ return err
}
// shutdown will shut down the exporter.
@@ -38,7 +250,1386 @@ func (e *kineticaMetricsExporter) shutdown(_ context.Context) error {
// @param _ ctx unused
// @param md
// @return error
-func (e *kineticaMetricsExporter) pushMetricsData(_ context.Context, _ pmetric.Metrics) error {
+func (e *kineticaMetricsExporter) pushMetricsData(_ context.Context, md pmetric.Metrics) error {
- return nil
+ var metricType pmetric.MetricType
+ var errs []error
+
+ var gaugeRecords []kineticaGaugeRecord
+ var sumRecords []kineticaSumRecord
+ var histogramRecords []kineticaHistogramRecord
+ var exponentialHistogramRecords []kineticaExponentialHistogramRecord
+ var summaryRecords []kineticaSummaryRecord
+
+ e.logger.Debug("Resource metrics ", zap.Int("count = ", md.ResourceMetrics().Len()))
+
+ for i := 0; i < md.ResourceMetrics().Len(); i++ {
+ metrics := md.ResourceMetrics().At(i)
+ resAttr := metrics.Resource().Attributes()
+
+ e.logger.Debug("Scope metrics ", zap.Int("count = ", metrics.ScopeMetrics().Len()))
+
+ for j := 0; j < metrics.ScopeMetrics().Len(); j++ {
+ metricSlice := metrics.ScopeMetrics().At(j).Metrics()
+ scopeInstr := metrics.ScopeMetrics().At(j).Scope()
+ scopeURL := metrics.ScopeMetrics().At(j).SchemaUrl()
+
+ e.logger.Debug("metrics ", zap.Int("count = ", metricSlice.Len()))
+
+ for k := 0; k < metricSlice.Len(); k++ {
+
+ metric := metricSlice.At(k)
+ metricType = metric.Type()
+ switch metric.Type() {
+ case pmetric.MetricTypeGauge:
+ gaugeRecord, err := e.createGaugeRecord(resAttr, metrics.SchemaUrl(), scopeInstr, scopeURL, metric.Gauge(), metric.Name(), metric.Description(), metric.Unit())
+ if err == nil {
+ gaugeRecords = append(gaugeRecords, *gaugeRecord)
+ e.logger.Debug("Added gauge")
+ } else {
+ e.logger.Error(err.Error())
+ errs = append(errs, err)
+ }
+ case pmetric.MetricTypeSum:
+ sumRecord, err := e.createSumRecord(resAttr, metrics.SchemaUrl(), scopeInstr, scopeURL, metric.Sum(), metric.Name(), metric.Description(), metric.Unit())
+ if err == nil {
+ sumRecords = append(sumRecords, *sumRecord)
+ e.logger.Debug("Added sum")
+ } else {
+ e.logger.Error(err.Error())
+ errs = append(errs, err)
+ }
+ case pmetric.MetricTypeHistogram:
+ histogramRecord, err := e.createHistogramRecord(resAttr, metrics.SchemaUrl(), scopeInstr, scopeURL, metric.Histogram(), metric.Name(), metric.Description(), metric.Unit())
+ if err == nil {
+ histogramRecords = append(histogramRecords, *histogramRecord)
+ e.logger.Debug("Added histogram")
+ } else {
+ e.logger.Error(err.Error())
+ errs = append(errs, err)
+ }
+ case pmetric.MetricTypeExponentialHistogram:
+ exponentialHistogramRecord, err := e.createExponentialHistogramRecord(resAttr, metrics.SchemaUrl(), scopeInstr, scopeURL, metric.ExponentialHistogram(), metric.Name(), metric.Description(), metric.Unit())
+ if err == nil {
+ exponentialHistogramRecords = append(exponentialHistogramRecords, *exponentialHistogramRecord)
+ e.logger.Debug("Added exp histogram")
+ } else {
+ e.logger.Error(err.Error())
+ errs = append(errs, err)
+ }
+ case pmetric.MetricTypeSummary:
+ summaryRecord, err := e.createSummaryRecord(resAttr, metrics.SchemaUrl(), scopeInstr, scopeURL, metric.Summary(), metric.Name(), metric.Description(), metric.Unit())
+ if err == nil {
+ summaryRecords = append(summaryRecords, *summaryRecord)
+ e.logger.Debug("Added summary")
+ } else {
+ e.logger.Error(err.Error())
+ errs = append(errs, err)
+ }
+ default:
+ return fmt.Errorf("Unsupported metrics type")
+ }
+
+ e.logger.Debug("Gauge ", zap.Int("count = ", len(gaugeRecords)))
+ e.logger.Debug("Sum ", zap.Int("count = ", len(sumRecords)))
+ e.logger.Debug("Histogram ", zap.Int("count = ", len(histogramRecords)))
+ e.logger.Debug("Exp Histogram ", zap.Int("count = ", len(exponentialHistogramRecords)))
+ e.logger.Debug("Summary ", zap.Int("count = ", len(summaryRecords)))
+
+ if len(errs) > 0 {
+ e.logger.Error(multierr.Combine(errs...).Error())
+ return multierr.Combine(errs...)
+ }
+ }
+ }
+ }
+
+ e.logger.Debug("Before writing metrics into Kinetica")
+
+ switch metricType {
+ case pmetric.MetricTypeGauge:
+ if err := e.writer.persistGaugeRecord(gaugeRecords); err != nil {
+ errs = append(errs, err)
+ e.logger.Error(err.Error())
+ }
+ case pmetric.MetricTypeSum:
+ if err := e.writer.persistSumRecord(sumRecords); err != nil {
+ errs = append(errs, err)
+ e.logger.Error(err.Error())
+ }
+ case pmetric.MetricTypeHistogram:
+ if err := e.writer.persistHistogramRecord(histogramRecords); err != nil {
+ errs = append(errs, err)
+ e.logger.Error(err.Error())
+ }
+ case pmetric.MetricTypeExponentialHistogram:
+ if err := e.writer.persistExponentialHistogramRecord(exponentialHistogramRecords); err != nil {
+ errs = append(errs, err)
+ e.logger.Error(err.Error())
+ }
+ case pmetric.MetricTypeSummary:
+ if err := e.writer.persistSummaryRecord(summaryRecords); err != nil {
+ errs = append(errs, err)
+ e.logger.Error(err.Error())
+ }
+ default:
+ return fmt.Errorf("Unsupported metrics type")
+
+ }
+ return multierr.Combine(errs...)
+}
+
+// createSummaryRecord - creates a Summary type record
+//
+// @receiver e - Method aplicable to [kineticaMetricsExporter]
+// @param resAttr - a map of key to value of resource attributes
+// @param _ schemaURL - unused
+// @param scopeInstr - the instrumentation scope
+// @param _ scopeURL - unused
+// @param summaryRecord - the Summary [pmetric.Summary] record
+// @param name
+// @param description
+// @param unit
+// @return *kineticaSummaryRecord
+// @return error
+func (e *kineticaMetricsExporter) createSummaryRecord(resAttr pcommon.Map, _ string, scopeInstr pcommon.InstrumentationScope, _ string, summaryRecord pmetric.Summary, name, description, unit string) (*kineticaSummaryRecord, error) {
+ var errs []error
+
+ kiSummaryRecord := new(kineticaSummaryRecord)
+
+ summary := &Summary{
+ SummaryID: uuid.New().String(),
+ MetricName: name,
+ Description: description,
+ Unit: unit,
+ }
+
+ kiSummaryRecord.summary = summary
+
+ // Handle data points
+ var datapointAttribute []SummaryDataPointAttribute
+ datapointAttributes := make(map[string]ValueTypePair)
+
+ for i := 0; i < summaryRecord.DataPoints().Len(); i++ {
+ datapoint := summaryRecord.DataPoints().At(i)
+ summaryDatapoint := &SummaryDatapoint{
+ SummaryID: summary.SummaryID,
+ ID: uuid.New().String(),
+ StartTimeUnix: datapoint.StartTimestamp().AsTime().UnixMilli(),
+ TimeUnix: datapoint.Timestamp().AsTime().UnixMilli(),
+ Count: int64(datapoint.Count()),
+ Sum: datapoint.Sum(),
+ Flags: int(datapoint.Flags()),
+ }
+ kiSummaryRecord.summaryDatapoint = append(kiSummaryRecord.summaryDatapoint, *summaryDatapoint)
+
+ // Handle summary datapoint attribute
+ datapoint.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Sum record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ datapointAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid sum record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range datapointAttributes {
+ vtPair := datapointAttributes[key]
+ sa, err := e.newSummaryDatapointAttributeValue(summary.SummaryID, summaryDatapoint.ID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ datapointAttribute = append(datapointAttribute, *sa)
+ }
+ }
+ kiSummaryRecord.summaryDatapointAttribute = append(kiSummaryRecord.summaryDatapointAttribute, datapointAttribute...)
+
+ for k := range datapointAttributes {
+ delete(datapointAttributes, k)
+ }
+
+ // Handle quantile values
+ quantileValues := datapoint.QuantileValues()
+ for i := 0; i < quantileValues.Len(); i++ {
+ quantileValue := quantileValues.At(i)
+ summaryQV := &SummaryDatapointQuantileValues{
+ SummaryID: summary.SummaryID,
+ DatapointID: summaryDatapoint.ID,
+ QuantileID: uuid.New().String(),
+ Quantile: quantileValue.Quantile(),
+ Value: quantileValue.Value(),
+ }
+ kiSummaryRecord.summaryDatapointQuantileValues = append(kiSummaryRecord.summaryDatapointQuantileValues, *summaryQV)
+ }
+
+ }
+
+ // Handle Resource attribute
+ var resourceAttribute []SummaryResourceAttribute
+ resourceAttributes := make(map[string]ValueTypePair)
+
+ resAttr.Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Resource attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ resourceAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid resource attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range resourceAttributes {
+ vtPair := resourceAttributes[key]
+ ga, err := e.newSummaryResourceAttributeValue(summary.SummaryID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ resourceAttribute = append(resourceAttribute, *ga)
+ }
+ }
+
+ copy(kiSummaryRecord.summaryResourceAttribute, resourceAttribute)
+
+ // Handle Scope attribute
+ var scopeAttribute []SummaryScopeAttribute
+ scopeAttributes := make(map[string]ValueTypePair)
+ scopeName := scopeInstr.Name()
+ scopeVersion := scopeInstr.Version()
+
+ scopeInstr.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Scope attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ scopeAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid scope attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range scopeAttributes {
+ vtPair := scopeAttributes[key]
+ sa, err := e.newSummaryScopeAttributeValue(summary.SummaryID, key, scopeName, scopeVersion, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ scopeAttribute = append(scopeAttribute, *sa)
+ }
+ }
+
+ copy(kiSummaryRecord.summaryScopeAttribute, scopeAttribute)
+
+ return kiSummaryRecord, multierr.Combine(errs...)
+}
+
+// createExponentialHistogramRecord - creates an exponential histogram type record
+//
+// @receiver e
+// @param resAttr
+// @param _ schemaURL - unused
+// @param scopeInstr
+// @param _ scopeURL - unused
+// @param exponentialHistogramRecord
+// @param name
+// @param description
+// @param unit
+// @return *kineticaExponentialHistogramRecord
+// @return error
+func (e *kineticaMetricsExporter) createExponentialHistogramRecord(resAttr pcommon.Map, _ string, scopeInstr pcommon.InstrumentationScope, _ string, exponentialHistogramRecord pmetric.ExponentialHistogram, name, description, unit string) (*kineticaExponentialHistogramRecord, error) {
+ var errs []error
+
+ kiExpHistogramRecord := new(kineticaExponentialHistogramRecord)
+
+ histogram := &ExponentialHistogram{
+ HistogramID: uuid.New().String(),
+ MetricName: name,
+ Description: description,
+ Unit: unit,
+ AggregationTemporality: exponentialHistogramRecord.AggregationTemporality(),
+ }
+
+ kiExpHistogramRecord.histogram = histogram
+
+ // Handle data points
+ var datapointAttribute []ExponentialHistogramDataPointAttribute
+ datapointAttributes := make(map[string]ValueTypePair)
+
+ var exemplarAttribute []ExponentialHistogramDataPointExemplarAttribute
+ exemplarAttributes := make(map[string]ValueTypePair)
+
+ var datapointBucketPositiveCount []ExponentialHistogramBucketPositiveCount
+ var datapointBucketNegativeCount []ExponentialHistogramBucketNegativeCount
+
+ for i := 0; i < exponentialHistogramRecord.DataPoints().Len(); i++ {
+ datapoint := exponentialHistogramRecord.DataPoints().At(i)
+
+ expHistogramDatapoint := ExponentialHistogramDatapoint{
+ HistogramID: histogram.HistogramID,
+ ID: uuid.New().String(),
+ StartTimeUnix: datapoint.StartTimestamp().AsTime().UnixMilli(),
+ TimeUnix: datapoint.Timestamp().AsTime().UnixMilli(),
+ Count: int64(datapoint.Count()),
+ Sum: datapoint.Sum(),
+ Min: datapoint.Min(),
+ Max: datapoint.Max(),
+ Flags: int(datapoint.Flags()),
+ Scale: int(datapoint.Scale()),
+ ZeroCount: int64(datapoint.ZeroCount()),
+ BucketsPositiveOffset: int(datapoint.Positive().Offset()),
+ BucketsNegativeOffset: int(datapoint.Negative().Offset()),
+ }
+ kiExpHistogramRecord.histogramDatapoint = append(kiExpHistogramRecord.histogramDatapoint, expHistogramDatapoint)
+
+ // Handle histogram datapoint attribute
+ datapoint.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Sum record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ datapointAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid sum record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range datapointAttributes {
+ vtPair := datapointAttributes[key]
+ sa, err := e.newExponentialHistogramDatapointAttributeValue(histogram.HistogramID, expHistogramDatapoint.ID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ datapointAttribute = append(datapointAttribute, *sa)
+ }
+ }
+ kiExpHistogramRecord.histogramDatapointAttribute = append(kiExpHistogramRecord.histogramDatapointAttribute, datapointAttribute...)
+
+ for k := range datapointAttributes {
+ delete(datapointAttributes, k)
+ }
+
+ // Handle datapoint exemplars
+ exemplars := datapoint.Exemplars()
+
+ for i := 0; i < exemplars.Len(); i++ {
+ exemplar := exemplars.At(i)
+ sumDatapointExemplar := ExponentialHistogramDatapointExemplar{
+ HistogramID: histogram.HistogramID,
+ DatapointID: expHistogramDatapoint.ID,
+ ExemplarID: uuid.New().String(),
+ TimeUnix: exemplar.Timestamp().AsTime().UnixMilli(),
+ HistogramValue: exemplar.DoubleValue(),
+ TraceID: exemplar.TraceID().String(),
+ SpanID: exemplar.SpanID().String(),
+ }
+ kiExpHistogramRecord.exemplars = append(kiExpHistogramRecord.exemplars, sumDatapointExemplar)
+
+ // Handle Exemplar attribute
+ exemplar.FilteredAttributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Sum record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ exemplarAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid sum record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range exemplarAttributes {
+ vtPair := exemplarAttributes[key]
+ ea, err := e.newExponentialHistogramDatapointExemplarAttributeValue(expHistogramDatapoint.HistogramID, expHistogramDatapoint.ID, sumDatapointExemplar.ExemplarID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ exemplarAttribute = append(exemplarAttribute, *ea)
+ }
+ }
+
+ kiExpHistogramRecord.exemplarAttribute = append(kiExpHistogramRecord.exemplarAttribute, exemplarAttribute...)
+
+ for k := range exemplarAttributes {
+ delete(exemplarAttributes, k)
+ }
+
+ }
+
+ // Handle positive and negative bucket counts
+ for i := 0; i < datapoint.Positive().BucketCounts().Len(); i++ {
+ positiveBucketCount := datapoint.Positive().BucketCounts().At(i)
+ datapointBucketPositiveCount = append(datapointBucketPositiveCount, ExponentialHistogramBucketPositiveCount{
+ HistogramID: expHistogramDatapoint.HistogramID,
+ DatapointID: expHistogramDatapoint.ID,
+ CountID: uuid.New().String(),
+ Count: int64(positiveBucketCount),
+ })
+ }
+ kiExpHistogramRecord.histogramBucketPositiveCount = append(kiExpHistogramRecord.histogramBucketPositiveCount, datapointBucketPositiveCount...)
+
+ for i := 0; i < datapoint.Negative().BucketCounts().Len(); i++ {
+ negativeBucketCount := datapoint.Negative().BucketCounts().At(i)
+ datapointBucketNegativeCount = append(datapointBucketNegativeCount, ExponentialHistogramBucketNegativeCount{
+ HistogramID: expHistogramDatapoint.HistogramID,
+ DatapointID: expHistogramDatapoint.ID,
+ CountID: uuid.New().String(),
+ Count: negativeBucketCount,
+ })
+ }
+ kiExpHistogramRecord.histogramBucketNegativeCount = append(kiExpHistogramRecord.histogramBucketNegativeCount, datapointBucketNegativeCount...)
+
+ }
+
+ // Handle Resource attribute
+ var resourceAttribute []ExponentialHistogramResourceAttribute
+ resourceAttributes := make(map[string]ValueTypePair)
+
+ resAttr.Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Resource attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ resourceAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid resource attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range resourceAttributes {
+ vtPair := resourceAttributes[key]
+ ga, err := e.newExponentialHistogramResourceAttributeValue(histogram.HistogramID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ resourceAttribute = append(resourceAttribute, *ga)
+ }
+ }
+
+ copy(kiExpHistogramRecord.histogramResourceAttribute, resourceAttribute)
+
+ // Handle Scope attribute
+ var scopeAttribute []ExponentialHistogramScopeAttribute
+ scopeAttributes := make(map[string]ValueTypePair)
+ scopeName := scopeInstr.Name()
+ scopeVersion := scopeInstr.Version()
+
+ scopeInstr.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Scope attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ scopeAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid scope attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range scopeAttributes {
+ vtPair := scopeAttributes[key]
+ sa, err := e.newExponentialHistogramScopeAttributeValue(histogram.HistogramID, key, scopeName, scopeVersion, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ scopeAttribute = append(scopeAttribute, *sa)
+ }
+ }
+
+ copy(kiExpHistogramRecord.histogramScopeAttribute, scopeAttribute)
+
+ return kiExpHistogramRecord, multierr.Combine(errs...)
+}
+
+// createHistogramRecord - creates a Histogram type record
+//
+// @receiver e
+// @param resAttr
+// @param _ schemaURL - unused
+// @param scopeInstr
+// @param _ scopeURL - unused
+// @param histogramRecord
+// @param name
+// @param description
+// @param unit
+// @return *kineticaHistogramRecord
+// @return error
+func (e *kineticaMetricsExporter) createHistogramRecord(resAttr pcommon.Map, _ string, scopeInstr pcommon.InstrumentationScope, _ string, histogramRecord pmetric.Histogram, name, description, unit string) (*kineticaHistogramRecord, error) {
+
+ e.logger.Debug("In createHistogramRecord ...")
+
+ var errs []error
+
+ kiHistogramRecord := new(kineticaHistogramRecord)
+
+ histogram := &Histogram{
+ HistogramID: uuid.New().String(),
+ MetricName: name,
+ Description: description,
+ Unit: unit,
+ AggregationTemporality: histogramRecord.AggregationTemporality(),
+ }
+
+ kiHistogramRecord.histogram = histogram
+
+ // Handle data points
+ var datapointAttribute []HistogramDataPointAttribute
+ datapointAttributes := make(map[string]ValueTypePair)
+
+ var exemplarAttribute []HistogramDataPointExemplarAttribute
+ exemplarAttributes := make(map[string]ValueTypePair)
+
+ // Handle data points
+ for i := 0; i < histogramRecord.DataPoints().Len(); i++ {
+ datapoint := histogramRecord.DataPoints().At(i)
+
+ histogramDatapoint := &HistogramDatapoint{
+ HistogramID: histogram.HistogramID,
+ ID: uuid.New().String(),
+ StartTimeUnix: datapoint.StartTimestamp().AsTime().UnixMilli(),
+ TimeUnix: datapoint.Timestamp().AsTime().UnixMilli(),
+ Count: int64(datapoint.Count()),
+ Sum: datapoint.Sum(),
+ Min: datapoint.Min(),
+ Max: datapoint.Max(),
+ Flags: int(datapoint.Flags()),
+ }
+ kiHistogramRecord.histogramDatapoint = append(kiHistogramRecord.histogramDatapoint, *histogramDatapoint)
+
+ // Handle histogram datapoint attribute
+ datapoint.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Histogram record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ datapointAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid histogram record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range datapointAttributes {
+ vtPair := datapointAttributes[key]
+ sa, err := e.newHistogramDatapointAttributeValue(histogram.HistogramID, histogramDatapoint.ID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ datapointAttribute = append(datapointAttribute, *sa)
+ }
+ }
+ kiHistogramRecord.histogramDatapointAtribute = append(kiHistogramRecord.histogramDatapointAtribute, datapointAttribute...)
+
+ for k := range datapointAttributes {
+ delete(datapointAttributes, k)
+ }
+
+ // Handle data point exemplars
+ exemplars := datapoint.Exemplars()
+
+ for i := 0; i < exemplars.Len(); i++ {
+ exemplar := exemplars.At(i)
+ histogramDatapointExemplar := HistogramDatapointExemplar{
+ HistogramID: histogram.HistogramID,
+ DatapointID: histogramDatapoint.ID,
+ ExemplarID: uuid.New().String(),
+ TimeUnix: exemplar.Timestamp().AsTime().UnixMilli(),
+ HistogramValue: exemplar.DoubleValue(),
+ TraceID: exemplar.TraceID().String(),
+ SpanID: exemplar.SpanID().String(),
+ }
+ kiHistogramRecord.exemplars = append(kiHistogramRecord.exemplars, histogramDatapointExemplar)
+
+ // Handle Exemplar attribute
+ exemplar.FilteredAttributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Histogram record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ exemplarAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid histogram record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range exemplarAttributes {
+ vtPair := exemplarAttributes[key]
+ ea, err := e.newHistogramDatapointExemplarAttributeValue(histogramDatapoint.HistogramID, histogramDatapoint.ID, histogramDatapointExemplar.ExemplarID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ exemplarAttribute = append(exemplarAttribute, *ea)
+ }
+ }
+
+ kiHistogramRecord.exemplarAttribute = append(kiHistogramRecord.exemplarAttribute, exemplarAttribute...)
+
+ for k := range exemplarAttributes {
+ delete(exemplarAttributes, k)
+ }
+ }
+
+ histogramBucketCounts := datapoint.BucketCounts()
+ for i := 0; i < histogramBucketCounts.Len(); i++ {
+ bucketCount := HistogramDatapointBucketCount{
+ HistogramID: histogramDatapoint.HistogramID,
+ DatapointID: histogramDatapoint.ID,
+ CountID: uuid.New().String(),
+ Count: int64(histogramBucketCounts.At(i)),
+ }
+ kiHistogramRecord.histogramBucketCount = append(kiHistogramRecord.histogramBucketCount, bucketCount)
+ }
+
+ histogramExplicitBounds := datapoint.ExplicitBounds()
+ for i := 0; i < histogramExplicitBounds.Len(); i++ {
+ explicitBound := HistogramDatapointExplicitBound{
+ HistogramID: histogramDatapoint.HistogramID,
+ DatapointID: histogramDatapoint.ID,
+ BoundID: uuid.New().String(),
+ ExplicitBound: histogramExplicitBounds.At(i),
+ }
+ kiHistogramRecord.histogramExplicitBound = append(kiHistogramRecord.histogramExplicitBound, explicitBound)
+ }
+ }
+
+ // Handle Resource attribute
+ var resourceAttribute []HistogramResourceAttribute
+ resourceAttributes := make(map[string]ValueTypePair)
+
+ if resAttr.Len() > 0 {
+ resAttr.Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Resource attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ resourceAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid resource attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range resourceAttributes {
+ vtPair := resourceAttributes[key]
+ ga, err := e.newHistogramResourceAttributeValue(histogram.HistogramID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ resourceAttribute = append(resourceAttribute, *ga)
+ }
+ }
+
+ kiHistogramRecord.histogramResourceAttribute = make([]HistogramResourceAttribute, len(resourceAttribute))
+ copy(kiHistogramRecord.histogramResourceAttribute, resourceAttribute)
+
+ }
+
+ // Handle Scope attribute
+ var scopeAttribute []HistogramScopeAttribute
+ scopeAttributes := make(map[string]ValueTypePair)
+ scopeName := scopeInstr.Name()
+ scopeVersion := scopeInstr.Version()
+
+ if scopeInstr.Attributes().Len() > 0 {
+ scopeInstr.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Scope attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ scopeAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid scope attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range scopeAttributes {
+ vtPair := scopeAttributes[key]
+ sa, err := e.newHistogramScopeAttributeValue(histogram.HistogramID, key, scopeName, scopeVersion, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ scopeAttribute = append(scopeAttribute, *sa)
+ }
+ }
+
+ kiHistogramRecord.histogramScopeAttribute = make([]HistogramScopeAttribute, len(scopeAttribute))
+ copy(kiHistogramRecord.histogramScopeAttribute, scopeAttribute)
+ }
+
+ return kiHistogramRecord, multierr.Combine(errs...)
+}
+
+// createSumRecord - creates a SUM type record
+//
+// @receiver e
+// @param resAttr
+// @param schemaURL
+// @param scopeInstr
+// @param scopeURL
+// @param sumRecord
+// @param name
+// @param description
+// @param unit
+// @return *kineticaSumRecord
+// @return error
+func (e *kineticaMetricsExporter) createSumRecord(resAttr pcommon.Map, _ string, scopeInstr pcommon.InstrumentationScope, _ string, sumRecord pmetric.Sum, name, description, unit string) (*kineticaSumRecord, error) {
+ var errs []error
+
+ kiSumRecord := new(kineticaSumRecord)
+ var isMonotonic int8
+ if sumRecord.IsMonotonic() {
+ isMonotonic = 1
+ }
+
+ sum := &Sum{
+ SumID: uuid.New().String(),
+ MetricName: name,
+ Description: description,
+ Unit: unit,
+ AggregationTemporality: sumRecord.AggregationTemporality(),
+ IsMonotonic: isMonotonic,
+ }
+
+ kiSumRecord.sum = sum
+
+ // Handle data points
+ var sumDatapointAttribute []SumDataPointAttribute
+ sumDatapointAttributes := make(map[string]ValueTypePair)
+
+ var exemplarAttribute []SumDataPointExemplarAttribute
+ exemplarAttributes := make(map[string]ValueTypePair)
+
+ for i := 0; i < sumRecord.DataPoints().Len(); i++ {
+ datapoint := sumRecord.DataPoints().At(i)
+
+ sumDatapoint := SumDatapoint{
+ SumID: sum.SumID,
+ ID: uuid.New().String(),
+ StartTimeUnix: datapoint.StartTimestamp().AsTime().UnixMilli(),
+ TimeUnix: datapoint.Timestamp().AsTime().UnixMilli(),
+ SumValue: datapoint.DoubleValue(),
+ Flags: int(datapoint.Flags()),
+ }
+ kiSumRecord.datapoint = append(kiSumRecord.datapoint, sumDatapoint)
+
+ // Handle Sum attribute
+ datapoint.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Sum record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ sumDatapointAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid sum record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range sumDatapointAttributes {
+ vtPair := sumDatapointAttributes[key]
+ sa, err := e.newSumDatapointAttributeValue(sum.SumID, sumDatapoint.ID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ sumDatapointAttribute = append(sumDatapointAttribute, *sa)
+ }
+ }
+ kiSumRecord.datapointAttribute = append(kiSumRecord.datapointAttribute, sumDatapointAttribute...)
+
+ for k := range sumDatapointAttributes {
+ delete(sumDatapointAttributes, k)
+ }
+
+ // Handle data point exemplars
+ exemplars := datapoint.Exemplars()
+
+ for i := 0; i < exemplars.Len(); i++ {
+ exemplar := exemplars.At(i)
+ sumDatapointExemplar := SumDatapointExemplar{
+ SumID: sum.SumID,
+ DatapointID: sumDatapoint.ID,
+ ExemplarID: uuid.New().String(),
+ TimeUnix: exemplar.Timestamp().AsTime().UnixMilli(),
+ SumValue: exemplar.DoubleValue(),
+ TraceID: exemplar.TraceID().String(),
+ SpanID: exemplar.SpanID().String(),
+ }
+ kiSumRecord.exemplars = append(kiSumRecord.exemplars, sumDatapointExemplar)
+
+ // Handle Exemplar attribute
+ exemplar.FilteredAttributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Sum record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ exemplarAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid sum record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range exemplarAttributes {
+ vtPair := exemplarAttributes[key]
+ ea, err := e.newSumDatapointExemplarAttributeValue(sum.SumID, sumDatapoint.ID, sumDatapointExemplar.ExemplarID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ exemplarAttribute = append(exemplarAttribute, *ea)
+ }
+ }
+
+ kiSumRecord.exemplarAttribute = append(kiSumRecord.exemplarAttribute, exemplarAttribute...)
+
+ for k := range exemplarAttributes {
+ delete(exemplarAttributes, k)
+ }
+
+ }
+
+ }
+
+ // Handle Resource attribute
+ var resourceAttribute []SumResourceAttribute
+ resourceAttributes := make(map[string]ValueTypePair)
+
+ if resAttr.Len() > 0 {
+ resAttr.Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Resource attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ resourceAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid resource attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range resourceAttributes {
+ vtPair := resourceAttributes[key]
+ ga, err := e.newSumResourceAttributeValue(sum.SumID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ resourceAttribute = append(resourceAttribute, *ga)
+ }
+ }
+
+ kiSumRecord.sumResourceAttribute = make([]SumResourceAttribute, len(resourceAttribute))
+ copy(kiSumRecord.sumResourceAttribute, resourceAttribute)
+ }
+
+ // Handle Scope attribute
+ var scopeAttribute []SumScopeAttribute
+ scopeAttributes := make(map[string]ValueTypePair)
+ scopeName := scopeInstr.Name()
+ scopeVersion := scopeInstr.Version()
+
+ if scopeInstr.Attributes().Len() > 0 {
+ scopeInstr.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Scope attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ scopeAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid scope attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range scopeAttributes {
+ vtPair := scopeAttributes[key]
+ sa, err := e.newSumScopeAttributeValue(sum.SumID, key, scopeName, scopeVersion, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ scopeAttribute = append(scopeAttribute, *sa)
+ }
+ }
+
+ copy(kiSumRecord.sumScopeAttribute, scopeAttribute)
+ } else {
+ // No attributes found - just basic scope
+ kiSumRecord.sumScopeAttribute = append(kiSumRecord.sumScopeAttribute, SumScopeAttribute{
+ SumID: sum.SumID,
+ ScopeName: scopeName,
+ ScopeVersion: scopeVersion,
+ Key: "",
+ AttributeValue: AttributeValue{},
+ })
+
+ }
+
+ return kiSumRecord, multierr.Combine(errs...)
+}
+
+// createGaugeRecord - creates a Gauge type record
+//
+// @receiver e
+// @param resAttr
+// @param _ schemaURL unused
+// @param scopeInstr
+// @param _ scopeURL unused
+// @param gaugeRecord
+// @param name
+// @param description
+// @param unit
+// @return *kineticaGaugeRecord
+// @return error
+func (e *kineticaMetricsExporter) createGaugeRecord(resAttr pcommon.Map, _ string, scopeInstr pcommon.InstrumentationScope, _ string, gaugeRecord pmetric.Gauge, name, description, unit string) (*kineticaGaugeRecord, error) {
+
+ var errs []error
+
+ kiGaugeRecord := new(kineticaGaugeRecord)
+
+ gauge := &Gauge{
+ GaugeID: uuid.New().String(),
+ MetricName: name,
+ Description: description,
+ Unit: unit,
+ }
+
+ kiGaugeRecord.gauge = gauge
+
+ // Handle data points
+ var gaugeDatapointAttribute []GaugeDatapointAttribute
+ gaugeDatapointAttributes := make(map[string]ValueTypePair)
+
+ var exemplarAttribute []GaugeDataPointExemplarAttribute
+ exemplarAttributes := make(map[string]ValueTypePair)
+
+ for i := 0; i < gaugeRecord.DataPoints().Len(); i++ {
+ datapoint := gaugeRecord.DataPoints().At(i)
+
+ gaugeDatapoint := GaugeDatapoint{
+ GaugeID: gauge.GaugeID,
+ ID: uuid.New().String(),
+ StartTimeUnix: datapoint.StartTimestamp().AsTime().UnixMilli(),
+ TimeUnix: datapoint.Timestamp().AsTime().UnixMilli(),
+ GaugeValue: datapoint.DoubleValue(),
+ Flags: int(datapoint.Flags()),
+ }
+ kiGaugeRecord.datapoint = append(kiGaugeRecord.datapoint, gaugeDatapoint)
+
+ datapoint.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Gauge record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ gaugeDatapointAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid gauge record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range gaugeDatapointAttributes {
+ vtPair := gaugeDatapointAttributes[key]
+ ga, err := e.newGaugeDatapointAttributeValue(gauge.GaugeID, gaugeDatapoint.ID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ gaugeDatapointAttribute = append(gaugeDatapointAttribute, *ga)
+ }
+ }
+
+ kiGaugeRecord.datapointAttribute = append(kiGaugeRecord.datapointAttribute, gaugeDatapointAttribute...)
+
+ for k := range gaugeDatapointAttributes {
+ delete(gaugeDatapointAttributes, k)
+ }
+
+ // Handle data point exemplars
+ exemplars := datapoint.Exemplars()
+ for i := 0; i < exemplars.Len(); i++ {
+ exemplar := exemplars.At(i)
+ gaugeDatapointExemplar := GaugeDatapointExemplar{
+ GaugeID: gauge.GaugeID,
+ DatapointID: gaugeDatapoint.ID,
+ ExemplarID: uuid.New().String(),
+ TimeUnix: exemplar.Timestamp().AsTime().UnixMilli(),
+ GaugeValue: exemplar.DoubleValue(),
+ TraceID: exemplar.TraceID().String(),
+ SpanID: exemplar.SpanID().String(),
+ }
+ kiGaugeRecord.exemplars = append(kiGaugeRecord.exemplars, gaugeDatapointExemplar)
+
+ // Handle Exemplar attribute
+ exemplar.FilteredAttributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Sum record attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ exemplarAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid sum record attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ for key := range exemplarAttributes {
+ vtPair := exemplarAttributes[key]
+ ea, err := e.newGaugeDatapointExemplarAttributeValue(gauge.GaugeID, gaugeDatapoint.ID, gaugeDatapointExemplar.ExemplarID, key, vtPair)
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ exemplarAttribute = append(exemplarAttribute, *ea)
+ }
+ }
+
+ kiGaugeRecord.exemplarAttribute = append(kiGaugeRecord.exemplarAttribute, exemplarAttribute...)
+
+ for k := range exemplarAttributes {
+ delete(exemplarAttributes, k)
+ }
+ }
+ }
+
+ // Handle Resource attribute
+ e.logger.Debug("Resource Attributes received ->", zap.Any("Attributes", resAttr))
+
+ var resourceAttribute []GaugeResourceAttribute
+ resourceAttributes := make(map[string]ValueTypePair)
+
+ if resAttr.Len() > 0 {
+ resAttr.Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Resource attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ resourceAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid resource attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ e.logger.Debug("Resource Attributes to be added ->", zap.Any("Attributes", resourceAttributes))
+ for key := range resourceAttributes {
+ vtPair := resourceAttributes[key]
+ ga, err := e.newGaugeResourceAttributeValue(gauge.GaugeID, key, vtPair)
+
+ e.logger.Debug("New resource attribute ->", zap.Any("Attribute", ga))
+
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ resourceAttribute = append(resourceAttribute, *ga)
+ }
+ }
+
+ kiGaugeRecord.resourceAttribute = make([]GaugeResourceAttribute, len(resourceAttribute))
+ copy(kiGaugeRecord.resourceAttribute, resourceAttribute)
+ e.logger.Debug("Resource Attributes actually added ->", zap.Any("Attributes", kiGaugeRecord.resourceAttribute))
+ }
+
+ // Handle Scope attribute
+ e.logger.Debug("Scope Attributes received ->", zap.Any("Attributes", scopeInstr.Attributes()))
+
+ var scopeAttribute []GaugeScopeAttribute
+ scopeAttributes := make(map[string]ValueTypePair)
+ scopeName := scopeInstr.Name()
+ scopeVersion := scopeInstr.Version()
+
+ if scopeInstr.Attributes().Len() > 0 {
+ scopeInstr.Attributes().Range(func(k string, v pcommon.Value) bool {
+ if k == "" {
+ e.logger.Debug("Scope attribute key is empty")
+ } else if v, err := attributeValueToKineticaFieldValue(v); err == nil {
+ scopeAttributes[k] = v
+ } else {
+ e.logger.Debug("Invalid scope attribute value", zap.String("Error", err.Error()))
+ errs = append(errs, err)
+ }
+ return true
+ })
+
+ e.logger.Debug("Scope Attributes to be added ->", zap.Any("Attributes", scopeAttributes))
+ for key := range scopeAttributes {
+ vtPair := scopeAttributes[key]
+ ga, err := e.newGaugeScopeAttributeValue(gauge.GaugeID, key, scopeName, scopeVersion, vtPair)
+
+ e.logger.Debug("New scope attribute ->", zap.Any("Attribute", ga))
+
+ if err != nil {
+ e.logger.Error(err.Error())
+ } else {
+ scopeAttribute = append(scopeAttribute, *ga)
+ }
+ }
+
+ kiGaugeRecord.scopeAttribute = make([]GaugeScopeAttribute, len(scopeAttribute))
+ copy(kiGaugeRecord.scopeAttribute, scopeAttribute)
+ e.logger.Debug("Scope Attributes actually added ->", zap.Any("Attributes", kiGaugeRecord.scopeAttribute))
+ } else {
+ // No attributes found - just basic scope
+ kiGaugeRecord.scopeAttribute = append(kiGaugeRecord.scopeAttribute, GaugeScopeAttribute{
+ GaugeID: gauge.GaugeID,
+ ScopeName: scopeName,
+ ScopeVersion: scopeVersion,
+ Key: "",
+ AttributeValue: AttributeValue{},
+ })
+ }
+
+ return kiGaugeRecord, multierr.Combine(errs...)
+}
+
+// Utility functions
+func (e *kineticaMetricsExporter) newGaugeResourceAttributeValue(gaugeID string, key string, vtPair ValueTypePair) (*GaugeResourceAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ra := &GaugeResourceAttribute{gaugeID, key, *av}
+ return ra, nil
+}
+
+func (e *kineticaMetricsExporter) newGaugeDatapointAttributeValue(gaugeID string, datapointID string, key string, vtPair ValueTypePair) (*GaugeDatapointAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ga := &GaugeDatapointAttribute{gaugeID, datapointID, key, *av}
+ return ga, nil
+}
+
+func (e *kineticaMetricsExporter) newGaugeScopeAttributeValue(gaugeID string, key string, scopeName string, scopeVersion string, vtPair ValueTypePair) (*GaugeScopeAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &GaugeScopeAttribute{gaugeID, key, scopeName, scopeVersion, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newSumDatapointAttributeValue(sumID string, datapointID string, key string, vtPair ValueTypePair) (*SumDataPointAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ga := &SumDataPointAttribute{sumID, datapointID, key, *av}
+ return ga, nil
+}
+
+func (e *kineticaMetricsExporter) newSumResourceAttributeValue(sumID string, key string, vtPair ValueTypePair) (*SumResourceAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ra := &SumResourceAttribute{sumID, key, *av}
+ return ra, nil
+}
+
+func (e *kineticaMetricsExporter) newSumScopeAttributeValue(sumID string, key string, scopeName string, scopeVersion string, vtPair ValueTypePair) (*SumScopeAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &SumScopeAttribute{sumID, key, scopeName, scopeVersion, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newSumDatapointExemplarAttributeValue(sumID string, sumDatapointID string, sumDatapointExemplarID string, key string, vtPair ValueTypePair) (*SumDataPointExemplarAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &SumDataPointExemplarAttribute{sumID, sumDatapointID, sumDatapointExemplarID, key, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newExponentialHistogramDatapointExemplarAttributeValue(histogramID string, histogramDatapointID string, histogramDatapointExemplarID string, key string, vtPair ValueTypePair) (*ExponentialHistogramDataPointExemplarAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &ExponentialHistogramDataPointExemplarAttribute{histogramID, histogramDatapointID, histogramDatapointExemplarID, key, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newExponentialHistogramDatapointAttributeValue(histogramID string, datapointID string, key string, vtPair ValueTypePair) (*ExponentialHistogramDataPointAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ga := &ExponentialHistogramDataPointAttribute{histogramID, datapointID, key, *av}
+ return ga, nil
+}
+
+func (e *kineticaMetricsExporter) newHistogramDatapointExemplarAttributeValue(histogramID string, datapointID string, exemplarID string, key string, vtPair ValueTypePair) (*HistogramDataPointExemplarAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ga := &HistogramDataPointExemplarAttribute{histogramID, datapointID, exemplarID, key, *av}
+ return ga, nil
+}
+
+func (e *kineticaMetricsExporter) newGaugeDatapointExemplarAttributeValue(gaugeID string, gaugeDatapointID string, gaugeDatapointExemplarID string, key string, vtPair ValueTypePair) (*GaugeDataPointExemplarAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &GaugeDataPointExemplarAttribute{gaugeID, gaugeDatapointID, gaugeDatapointExemplarID, key, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newHistogramResourceAttributeValue(histogramID string, key string, vtPair ValueTypePair) (*HistogramResourceAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ra := &HistogramResourceAttribute{histogramID, key, *av}
+ return ra, nil
+}
+
+func (e *kineticaMetricsExporter) newHistogramScopeAttributeValue(histogramID string, key string, scopeName string, scopeVersion string, vtPair ValueTypePair) (*HistogramScopeAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &HistogramScopeAttribute{histogramID, key, scopeName, scopeVersion, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newExponentialHistogramResourceAttributeValue(histogramID string, key string, vtPair ValueTypePair) (*ExponentialHistogramResourceAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ra := &ExponentialHistogramResourceAttribute{histogramID, key, *av}
+ return ra, nil
+}
+
+func (e *kineticaMetricsExporter) newExponentialHistogramScopeAttributeValue(histogramID string, key string, scopeName string, scopeVersion string, vtPair ValueTypePair) (*ExponentialHistogramScopeAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &ExponentialHistogramScopeAttribute{histogramID, key, scopeName, scopeVersion, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newSummaryResourceAttributeValue(summaryID string, key string, vtPair ValueTypePair) (*SummaryResourceAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ra := &SummaryResourceAttribute{summaryID, key, *av}
+ return ra, nil
+}
+
+func (e *kineticaMetricsExporter) newSummaryScopeAttributeValue(summaryID string, key string, scopeName string, scopeVersion string, vtPair ValueTypePair) (*SummaryScopeAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &SummaryScopeAttribute{summaryID, key, scopeName, scopeVersion, *av}
+ return sa, nil
+
+}
+
+func (e *kineticaMetricsExporter) newSummaryDatapointAttributeValue(summaryID string, summaryDatapointID string, key string, vtPair ValueTypePair) (*SummaryDataPointAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ sa := &SummaryDataPointAttribute{summaryID, summaryDatapointID, key, *av}
+ return sa, nil
+}
+
+func (e *kineticaMetricsExporter) newHistogramDatapointAttributeValue(histogramID string, datapointID string, key string, vtPair ValueTypePair) (*HistogramDataPointAttribute, error) {
+ var av *AttributeValue
+ var err error
+
+ av, err = getAttributeValue(vtPair)
+ if err != nil {
+ return nil, err
+ }
+
+ ga := &HistogramDataPointAttribute{histogramID, datapointID, key, *av}
+ return ga, nil
}
diff --git a/exporter/kineticaexporter/writer.go b/exporter/kineticaexporter/writer.go
new file mode 100644
index 000000000000..87528ae8b762
--- /dev/null
+++ b/exporter/kineticaexporter/writer.go
@@ -0,0 +1,835 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package kineticaexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/kineticaexporter"
+
+import (
+ "context"
+ "fmt"
+ "sync"
+
+ "github.com/kineticadb/kinetica-api-go/kinetica"
+ orderedmap "github.com/wk8/go-ordered-map/v2"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.uber.org/multierr"
+ "go.uber.org/zap"
+)
+
+// AttributeValue - struct to contain attribute values of different types
+// Used by other metric structs
+type AttributeValue struct {
+ IntValue int `avro:"int_value"`
+ StringValue string `avro:"string_value"`
+ BoolValue int8 `avro:"bool_value"`
+ DoubleValue float64 `avro:"double_value"`
+ BytesValue []byte `avro:"bytes_value"`
+}
+
+// KiWriter - struct modeling the Kinetica connection, contains the
+// Kinetica connection [kinetica.Kinetica], the Kinetica Options [kinetica.KineticaOptions],
+// the config [Config] and the logger [zap.Logger]
+type KiWriter struct {
+ Db kinetica.Kinetica
+ Options kinetica.KineticaOptions
+ cfg Config
+ logger *zap.Logger
+}
+
+// GetDb - Getter for the Kinetica instance
+//
+// @receiver kiwriter
+// @return gpudb.Gpudb
+func (kiwriter *KiWriter) GetDb() kinetica.Kinetica {
+ return kiwriter.Db
+}
+
+// GetOptions - Getter for the Kinetica options.
+//
+// @receiver kiwriter
+// @return gpudb.GpudbOptions
+func (kiwriter *KiWriter) GetOptions() kinetica.KineticaOptions {
+ return kiwriter.Options
+}
+
+// GetCfg - Getter for the [Config] value
+//
+// @receiver kiwriter
+// @return Config
+func (kiwriter *KiWriter) GetCfg() Config {
+ return kiwriter.cfg
+}
+
+// Writer - global pointer to kiwriter struct initialized in the init func
+var Writer *KiWriter
+
+// init
+func init() {
+ ctx := context.TODO()
+ cfg := createDefaultConfig()
+ config := cfg.(*Config)
+ options := kinetica.KineticaOptions{Username: config.Username, Password: string(config.Password), ByPassSslCertCheck: config.BypassSslCertCheck}
+ gpudbInst := kinetica.NewWithOptions(ctx, config.Host, &options)
+ Writer = &KiWriter{*gpudbInst, options, *config, nil}
+}
+
+// newKiWriter - Constructor for the [KiWriter] struct
+//
+// @param ctx
+// @param cfg
+// @return *KiWriter
+func newKiWriter(ctx context.Context, cfg Config, logger *zap.Logger) *KiWriter {
+ options := kinetica.KineticaOptions{Username: cfg.Username, Password: string(cfg.Password), ByPassSslCertCheck: cfg.BypassSslCertCheck}
+ gpudbInst := kinetica.NewWithOptions(ctx, cfg.Host, &options)
+ return &KiWriter{*gpudbInst, options, cfg, logger}
+}
+
+// Metrics Handling
+
+// Gauge - struct modeling the Gauge data
+type Gauge struct {
+ GaugeID string `avro:"gauge_id"`
+ MetricName string `avro:"metric_name"`
+ Description string `avro:"metric_description"`
+ Unit string `avro:"metric_unit"`
+}
+
+// GaugeDatapoint - struct modeling the Gauge Datapoint
+type GaugeDatapoint struct {
+ GaugeID string `avro:"gauge_id"`
+ ID string `avro:"id"`
+ StartTimeUnix int64 `mapstructure:"start_time_unix" avro:"start_time_unix"`
+ TimeUnix int64 `mapstructure:"time_unix" avro:"time_unix"`
+ GaugeValue float64 `mapstructure:"gauge_value" avro:"gauge_value"`
+ Flags int `mapstructure:"flags" avro:"flags"`
+}
+
+// GaugeDatapointAttribute - struct modeling the Gauge Datapoint attributes
+type GaugeDatapointAttribute struct {
+ GaugeID string `avro:"gauge_id"`
+ DatapointID string `avro:"datapoint_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// GaugeDatapointExemplar - struct modeling a Gauge Datapoint Exemplar
+type GaugeDatapointExemplar struct {
+ GaugeID string `avro:"gauge_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ TimeUnix int64 `mapstructure:"time_unix" avro:"time_unix"`
+ GaugeValue float64 `mapstructure:"gauge_value" avro:"gauge_value"`
+ TraceID string `mapstructure:"trace_id" avro:"trace_id"`
+ SpanID string `mapstructure:"span_id" avro:"span_id"`
+}
+
+// GaugeDataPointExemplarAttribute - struct modeling a Gauge Datapoint Exemplar attribute
+type GaugeDataPointExemplarAttribute struct {
+ GaugeID string `avro:"gauge_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// GaugeResourceAttribute - struct modeling a Gauge resource attribute
+type GaugeResourceAttribute struct {
+ GaugeID string `avro:"gauge_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// GaugeScopeAttribute - struct modeling a Gauge Scope attribute
+type GaugeScopeAttribute struct {
+ GaugeID string `avro:"gauge_id"`
+ ScopeName string `avro:"name"`
+ ScopeVersion string `avro:"version"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// END Gauge
+
+// Sum
+
+// Sum - struct modeling a Sum metric
+type Sum struct {
+ SumID string `avro:"sum_id"`
+ MetricName string `avro:"metric_name"`
+ Description string `avro:"metric_description"`
+ Unit string `avro:"metric_unit"`
+ pmetric.AggregationTemporality `avro:"aggregation_temporality"`
+ IsMonotonic int8 `avro:"is_monotonic"`
+}
+
+// SumDatapoint - struct modeling a Sum Datapoint
+type SumDatapoint struct {
+ SumID string `avro:"sum_id"`
+ ID string `avro:"id"`
+ StartTimeUnix int64 `mapstructure:"start_time_unix" avro:"start_time_unix"`
+ TimeUnix int64 `mapstructure:"time_unix" avro:"time_unix"`
+ SumValue float64 `mapstructure:"sum_value" avro:"sum_value"`
+ Flags int `mapstructure:"flags" avro:"flags"`
+}
+
+// SumDataPointAttribute - struct modeling a Sum Datapoint attribute
+type SumDataPointAttribute struct {
+ SumID string `avro:"sum_id"`
+ DatapointID string `avro:"datapoint_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// SumDatapointExemplar - struct modeling a Sum Datapoint Exemplar
+type SumDatapointExemplar struct {
+ SumID string `avro:"sum_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ TimeUnix int64 `mapstructure:"time_unix" avro:"time_unix"`
+ SumValue float64 `mapstructure:"sum_value" avro:"sum_value"`
+ TraceID string `mapstructure:"trace_id" avro:"trace_id"`
+ SpanID string `mapstructure:"span_id" avro:"span_id"`
+}
+
+// SumDataPointExemplarAttribute - struct modeling a Sum Datapoint Exemplar attribute
+type SumDataPointExemplarAttribute struct {
+ SumID string `avro:"sum_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// SumResourceAttribute - struct modeling a Sum Resource attribute
+type SumResourceAttribute struct {
+ SumID string `avro:"sum_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// SumScopeAttribute - struct modeling a Sum Scope attribute
+type SumScopeAttribute struct {
+ SumID string `avro:"sum_id"`
+ ScopeName string `avro:"name"`
+ ScopeVersion string `avro:"version"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// END Sum
+
+// Histogram
+
+// Histogram - struct modeling a Histogram metric type
+type Histogram struct {
+ HistogramID string `avro:"histogram_id"`
+ MetricName string `avro:"metric_name"`
+ Description string `avro:"metric_description"`
+ Unit string `avro:"metric_unit"`
+ pmetric.AggregationTemporality `avro:"aggregation_temporality"`
+}
+
+// HistogramDatapoint - struct modeling a Histogram Datapoint
+type HistogramDatapoint struct {
+ HistogramID string `avro:"histogram_id"`
+ ID string `avro:"id"`
+ StartTimeUnix int64 `avro:"start_time_unix"`
+ TimeUnix int64 `avro:"time_unix"`
+ Count int64 `avro:"count"`
+ Sum float64 `avro:"data_sum"`
+ Min float64 `avro:"data_min"`
+ Max float64 `avro:"data_max"`
+ Flags int `avro:"flags"`
+}
+
+// HistogramDataPointAttribute - struct modeling a Histogram Datapoint attribute
+type HistogramDataPointAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// HistogramDatapointBucketCount - struct modeling a Histogram Datapoint Bucket Count
+type HistogramDatapointBucketCount struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ CountID string `avro:"count_id"`
+ Count int64 `avro:"count"`
+}
+
+// HistogramDatapointExplicitBound - struct modeling a Histogram Datapoint Explicit Bound
+type HistogramDatapointExplicitBound struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ BoundID string `avro:"bound_id"`
+ ExplicitBound float64 `avro:"explicit_bound"`
+}
+
+// HistogramDatapointExemplar - struct modeling a Histogram Datapoint Exemplar
+type HistogramDatapointExemplar struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ TimeUnix int64 `avro:"time_unix"`
+ HistogramValue float64 `avro:"histogram_value"`
+ TraceID string `mapstructure:"trace_id" avro:"trace_id"`
+ SpanID string `mapstructure:"span_id" avro:"span_id"`
+}
+
+// HistogramDataPointExemplarAttribute - struct modeling a Histogram Datapoint Exemplar attribute
+type HistogramDataPointExemplarAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// HistogramResourceAttribute - struct modeling a Histogram Resource Attribute
+type HistogramResourceAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// HistogramScopeAttribute - struct modeling a Histogram Scope Attribute
+type HistogramScopeAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ ScopeName string `avro:"name"`
+ ScopeVersion string `avro:"version"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// End Histogram
+
+// Exponential Histogram
+
+// ExponentialHistogram - struct modeling an Exponential Histogram
+type ExponentialHistogram struct {
+ HistogramID string `avro:"histogram_id"`
+ MetricName string `avro:"metric_name"`
+ Description string `avro:"metric_description"`
+ Unit string `avro:"metric_unit"`
+ pmetric.AggregationTemporality `avro:"aggregation_temporality"`
+}
+
+// ExponentialHistogramDatapoint - struct modeling an Exponential Histogram Datapoint
+type ExponentialHistogramDatapoint struct {
+ HistogramID string `avro:"histogram_id"`
+ ID string `avro:"id"`
+ StartTimeUnix int64 `avro:"start_time_unix"`
+ TimeUnix int64 `avro:"time_unix"`
+ Count int64 `avro:"count"`
+ Sum float64 `avro:"data_sum"`
+ Min float64 `avro:"data_min"`
+ Max float64 `avro:"data_max"`
+ Flags int `avro:"flags"`
+ Scale int `avro:"scale"`
+ ZeroCount int64 `avro:"zero_count"`
+ BucketsPositiveOffset int `avro:"buckets_positive_offset"`
+ BucketsNegativeOffset int `avro:"buckets_negative_offset"`
+}
+
+// ExponentialHistogramDataPointAttribute - struct modeling an Exponential Histogram Datapoint attribute
+type ExponentialHistogramDataPointAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// ExponentialHistogramBucketNegativeCount - struct modeling an Exponential Histogram Bucket Negative Count
+type ExponentialHistogramBucketNegativeCount struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ CountID string `avro:"count_id"`
+ Count uint64 `avro:"count"`
+}
+
+// ExponentialHistogramBucketPositiveCount - struct modeling an Exponential Histogram Bucket Positive Count
+type ExponentialHistogramBucketPositiveCount struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ CountID string `avro:"count_id"`
+ Count int64 `avro:"count"`
+}
+
+// ExponentialHistogramDatapointExemplar - struct modeling an Exponential Histogram Datapoint Exemplar
+type ExponentialHistogramDatapointExemplar struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ TimeUnix int64 `avro:"time_unix"`
+ HistogramValue float64 `avro:"histogram_value"`
+ TraceID string `mapstructure:"trace_id" avro:"trace_id"`
+ SpanID string `mapstructure:"span_id" avro:"span_id"`
+}
+
+// ExponentialHistogramDataPointExemplarAttribute - struct modeling an Exponential Histogram Datapoint Exemplar attribute
+type ExponentialHistogramDataPointExemplarAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ DatapointID string `avro:"datapoint_id"`
+ ExemplarID string `avro:"exemplar_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// ExponentialHistogramResourceAttribute - struct modeling an Exponential Histogram Resource attribute
+type ExponentialHistogramResourceAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// ExponentialHistogramScopeAttribute - struct modeling an Exponential Histogram Scope attribute
+type ExponentialHistogramScopeAttribute struct {
+ HistogramID string `avro:"histogram_id"`
+ ScopeName string `avro:"name"`
+ ScopeVersion string `avro:"version"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// END Exponential Histogram
+
+// Summary
+
+// Summary - struct modeling a Summary type metric
+type Summary struct {
+ SummaryID string `avro:"summary_id"`
+ MetricName string `avro:"metric_name"`
+ Description string `avro:"metric_description"`
+ Unit string `avro:"metric_unit"`
+}
+
+// SummaryDatapoint - struct modeling a Summary Datapoint
+type SummaryDatapoint struct {
+ SummaryID string `avro:"summary_id"`
+ ID string `avro:"id"`
+ StartTimeUnix int64 `avro:"start_time_unix"`
+ TimeUnix int64 `avro:"time_unix"`
+ Count int64 `avro:"count"`
+ Sum float64 `avro:"data_sum"`
+ Flags int `avro:"flags"`
+}
+
+// SummaryDataPointAttribute - struct modeling a Summary Datapoint attribute
+type SummaryDataPointAttribute struct {
+ SummaryID string `avro:"summary_id"`
+ DatapointID string `avro:"datapoint_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// SummaryDatapointQuantileValues - struct modeling a Summary Datapoint Quantile value
+type SummaryDatapointQuantileValues struct {
+ SummaryID string `avro:"summary_id"`
+ DatapointID string `avro:"datapoint_id"`
+ QuantileID string `avro:"quantile_id"`
+ Quantile float64 `avro:"quantile"`
+ Value float64 `avro:"value"`
+}
+
+// SummaryResourceAttribute - struct modeling a Summary Resource attribute
+type SummaryResourceAttribute struct {
+ SummaryID string `avro:"summary_id"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// SummaryScopeAttribute - struct modeling a Summary Scope attribute
+type SummaryScopeAttribute struct {
+ SummaryID string `avro:"summary_id"`
+ ScopeName string `avro:"name"`
+ ScopeVersion string `avro:"version"`
+ Key string `avro:"key"`
+ AttributeValue `mapstructure:",squash"`
+}
+
+// END Summary
+
+// END Metrics Handling
+
+// writeMetric - a helper method used by different metric persistence methods to write the
+// metric data in order.
+//
+// @receiver kiwriter - pointer to [KiWriter]
+// @param metricType - a [pmetric.MetricTypeGauge] or something else converted to string
+// @param tableDataMap - a map from table name to the relevant data
+// @return error
+func (kiwriter *KiWriter) writeMetric(metricType string, tableDataMap *orderedmap.OrderedMap[string, []any]) error {
+
+ kiwriter.logger.Debug("Writing metric", zap.String("Type", metricType))
+
+ var errs []error
+ errsChan := make(chan error, tableDataMap.Len())
+
+ wg := &sync.WaitGroup{}
+ for pair := tableDataMap.Oldest(); pair != nil; pair = pair.Next() {
+ tableName := pair.Key
+ data := pair.Value
+
+ wg.Add(1)
+
+ go func(tableName string, data []any, wg *sync.WaitGroup) {
+ err := kiwriter.doChunkedInsert(context.TODO(), tableName, data)
+ if err != nil {
+ errsChan <- err
+ }
+ wg.Done()
+ }(tableName, data, wg)
+
+ }
+ wg.Wait()
+
+ close(errsChan)
+
+ var insErrs error
+ for err := range errsChan {
+ insErrs = multierr.Append(insErrs, err)
+ }
+ errs = append(errs, insErrs)
+ return multierr.Combine(errs...)
+}
+
+func (kiwriter *KiWriter) persistGaugeRecord(gaugeRecords []kineticaGaugeRecord) error {
+ kiwriter.logger.Debug("In persistGaugeRecord ...")
+
+ var errs []error
+ var gauges []any
+ var resourceAttributes []any
+ var scopeAttributes []any
+ var datapoints []any
+ var datapointAttributes []any
+ var exemplars []any
+ var exemplarAttributes []any
+
+ for _, gaugerecord := range gaugeRecords {
+
+ gauges = append(gauges, *gaugerecord.gauge)
+
+ for _, gr := range gaugerecord.resourceAttribute {
+ resourceAttributes = append(resourceAttributes, gr)
+ }
+
+ for _, sa := range gaugerecord.scopeAttribute {
+ scopeAttributes = append(scopeAttributes, sa)
+ }
+
+ for _, dp := range gaugerecord.datapoint {
+ datapoints = append(datapoints, dp)
+ }
+
+ for _, dpattr := range gaugerecord.datapointAttribute {
+ datapointAttributes = append(datapointAttributes, dpattr)
+ }
+
+ for _, ge := range gaugerecord.exemplars {
+ exemplars = append(exemplars, ge)
+ }
+
+ for _, geattr := range gaugerecord.exemplarAttribute {
+ exemplarAttributes = append(exemplarAttributes, geattr)
+ }
+
+ }
+
+ tableDataMap := orderedmap.New[string, []any]()
+
+ tableDataMap.Set(GaugeTable, gauges)
+ tableDataMap.Set(GaugeDatapointTable, datapoints)
+ tableDataMap.Set(GaugeDatapointAttributeTable, datapointAttributes)
+ tableDataMap.Set(GaugeResourceAttributeTable, resourceAttributes)
+ tableDataMap.Set(GaugeScopeAttributeTable, scopeAttributes)
+ tableDataMap.Set(GaugeDatapointExemplarTable, exemplars)
+ tableDataMap.Set(GaugeDatapointExemplarAttributeTable, exemplarAttributes)
+
+ errs = append(errs, kiwriter.writeMetric(pmetric.MetricTypeGauge.String(), tableDataMap))
+
+ return multierr.Combine(errs...)
+}
+
+func (kiwriter *KiWriter) persistSumRecord(sumRecords []kineticaSumRecord) error {
+ kiwriter.logger.Debug("In persistSumRecord ...")
+
+ var errs []error
+
+ var sums []any
+ var resourceAttributes []any
+ var scopeAttributes []any
+ var datapoints []any
+ var datapointAttributes []any
+ var exemplars []any
+ var exemplarAttributes []any
+
+ for _, sumrecord := range sumRecords {
+
+ sums = append(sums, *sumrecord.sum)
+
+ for _, sr := range sumrecord.sumResourceAttribute {
+ resourceAttributes = append(resourceAttributes, sr)
+ }
+
+ for _, sa := range sumrecord.sumScopeAttribute {
+ scopeAttributes = append(scopeAttributes, sa)
+ }
+
+ for _, dp := range sumrecord.datapoint {
+ datapoints = append(datapoints, dp)
+ }
+
+ for _, dpattr := range sumrecord.datapointAttribute {
+ datapointAttributes = append(datapointAttributes, dpattr)
+ }
+
+ for _, se := range sumrecord.exemplars {
+ exemplars = append(exemplars, se)
+ }
+
+ for _, seattr := range sumrecord.exemplarAttribute {
+ exemplarAttributes = append(exemplarAttributes, seattr)
+ }
+
+ }
+
+ tableDataMap := orderedmap.New[string, []any]()
+
+ tableDataMap.Set(SumTable, sums)
+ tableDataMap.Set(SumDatapointTable, datapoints)
+ tableDataMap.Set(SumDatapointAttributeTable, datapointAttributes)
+ tableDataMap.Set(SumResourceAttributeTable, resourceAttributes)
+ tableDataMap.Set(SumScopeAttributeTable, scopeAttributes)
+ tableDataMap.Set(SumDatapointExemplarTable, exemplars)
+ tableDataMap.Set(SumDataPointExemplarAttributeTable, exemplarAttributes)
+
+ errs = append(errs, kiwriter.writeMetric(pmetric.MetricTypeSum.String(), tableDataMap))
+
+ return multierr.Combine(errs...)
+}
+
+func (kiwriter *KiWriter) persistHistogramRecord(histogramRecords []kineticaHistogramRecord) error {
+ kiwriter.logger.Debug("In persistHistogramRecord ...")
+
+ var errs []error
+
+ var histograms []any
+ var resourceAttributes []any
+ var scopeAttributes []any
+ var datapoints []any
+ var datapointAttributes []any
+ var bucketCounts []any
+ var explicitBounds []any
+ var exemplars []any
+ var exemplarAttributes []any
+
+ for _, histogramrecord := range histogramRecords {
+
+ histograms = append(histograms, *histogramrecord.histogram)
+
+ for _, ra := range histogramrecord.histogramResourceAttribute {
+ resourceAttributes = append(resourceAttributes, ra)
+ }
+
+ for _, sa := range histogramrecord.histogramScopeAttribute {
+ scopeAttributes = append(scopeAttributes, sa)
+ }
+
+ for _, dp := range histogramrecord.histogramDatapoint {
+ datapoints = append(datapoints, dp)
+ }
+
+ for _, dpattr := range histogramrecord.histogramDatapointAtribute {
+ datapointAttributes = append(datapointAttributes, dpattr)
+ }
+
+ for _, bc := range histogramrecord.histogramBucketCount {
+ bucketCounts = append(bucketCounts, bc)
+ }
+
+ for _, eb := range histogramrecord.histogramExplicitBound {
+ explicitBounds = append(explicitBounds, eb)
+ }
+
+ for _, ex := range histogramrecord.exemplars {
+ exemplars = append(exemplars, ex)
+ }
+
+ for _, exattr := range histogramrecord.exemplarAttribute {
+ exemplarAttributes = append(exemplarAttributes, exattr)
+ }
+ }
+
+ tableDataMap := orderedmap.New[string, []any]()
+
+ tableDataMap.Set(HistogramTable, histograms)
+ tableDataMap.Set(HistogramDatapointTable, datapoints)
+ tableDataMap.Set(HistogramDatapointAttributeTable, datapointAttributes)
+ tableDataMap.Set(HistogramBucketCountsTable, bucketCounts)
+ tableDataMap.Set(HistogramExplicitBoundsTable, explicitBounds)
+ tableDataMap.Set(HistogramResourceAttributeTable, resourceAttributes)
+ tableDataMap.Set(HistogramScopeAttributeTable, scopeAttributes)
+ tableDataMap.Set(HistogramDatapointExemplarTable, exemplars)
+ tableDataMap.Set(HistogramDataPointExemplarAttributeTable, exemplarAttributes)
+
+ errs = append(errs, kiwriter.writeMetric(pmetric.MetricTypeHistogram.String(), tableDataMap))
+
+ return multierr.Combine(errs...)
+}
+
+func (kiwriter *KiWriter) persistExponentialHistogramRecord(exponentialHistogramRecords []kineticaExponentialHistogramRecord) error {
+ kiwriter.logger.Debug("In persistExponentialHistogramRecord ...")
+
+ var errs []error
+
+ var histograms []any
+ var resourceAttributes []any
+ var scopeAttributes []any
+ var datapoints []any
+ var datapointAttributes []any
+ var positiveBucketCounts []any
+ var negativeBucketCounts []any
+ var exemplars []any
+ var exemplarAttributes []any
+
+ for _, histogramrecord := range exponentialHistogramRecords {
+
+ histograms = append(histograms, *histogramrecord.histogram)
+
+ for _, ra := range histogramrecord.histogramResourceAttribute {
+ resourceAttributes = append(resourceAttributes, ra)
+ }
+
+ for _, sa := range histogramrecord.histogramScopeAttribute {
+ scopeAttributes = append(scopeAttributes, sa)
+ }
+
+ for _, dp := range histogramrecord.histogramDatapoint {
+ datapoints = append(datapoints, dp)
+ }
+
+ for _, dpattr := range histogramrecord.histogramDatapointAttribute {
+ datapointAttributes = append(datapointAttributes, dpattr)
+ }
+
+ for _, posbc := range histogramrecord.histogramBucketPositiveCount {
+ positiveBucketCounts = append(positiveBucketCounts, posbc)
+ }
+
+ for _, negbc := range histogramrecord.histogramBucketNegativeCount {
+ negativeBucketCounts = append(negativeBucketCounts, negbc)
+ }
+
+ for _, ex := range histogramrecord.exemplars {
+ exemplars = append(exemplars, ex)
+ }
+
+ for _, exattr := range histogramrecord.exemplarAttribute {
+ exemplarAttributes = append(exemplarAttributes, exattr)
+ }
+ }
+
+ tableDataMap := orderedmap.New[string, []any]()
+
+ tableDataMap.Set(ExpHistogramTable, histograms)
+ tableDataMap.Set(ExpHistogramDatapointTable, datapoints)
+ tableDataMap.Set(ExpHistogramDatapointAttributeTable, datapointAttributes)
+ tableDataMap.Set(ExpHistogramPositiveBucketCountsTable, positiveBucketCounts)
+ tableDataMap.Set(ExpHistogramNegativeBucketCountsTable, negativeBucketCounts)
+ tableDataMap.Set(ExpHistogramResourceAttributeTable, resourceAttributes)
+ tableDataMap.Set(ExpHistogramScopeAttributeTable, scopeAttributes)
+ tableDataMap.Set(ExpHistogramDatapointExemplarTable, exemplars)
+ tableDataMap.Set(ExpHistogramDataPointExemplarAttributeTable, exemplarAttributes)
+
+ errs = append(errs, kiwriter.writeMetric(pmetric.MetricTypeExponentialHistogram.String(), tableDataMap))
+
+ return multierr.Combine(errs...)
+}
+
+func (kiwriter *KiWriter) persistSummaryRecord(summaryRecords []kineticaSummaryRecord) error {
+ kiwriter.logger.Debug("In persistSummaryRecord ...")
+
+ var errs []error
+
+ var summaries []any
+ var resourceAttributes []any
+ var scopeAttributes []any
+ var datapoints []any
+ var datapointAttributes []any
+ var datapointQuantiles []any
+
+ for _, summaryrecord := range summaryRecords {
+
+ summaries = append(summaries, *summaryrecord.summary)
+
+ for _, ra := range summaryrecord.summaryResourceAttribute {
+ resourceAttributes = append(resourceAttributes, ra)
+ }
+
+ for _, sa := range summaryrecord.summaryScopeAttribute {
+ scopeAttributes = append(scopeAttributes, sa)
+ }
+
+ for _, dp := range summaryrecord.summaryDatapoint {
+ datapoints = append(datapoints, dp)
+ }
+
+ for _, dpattr := range summaryrecord.summaryDatapointAttribute {
+ datapointAttributes = append(datapointAttributes, dpattr)
+ }
+
+ for _, dpq := range summaryrecord.summaryDatapointQuantileValues {
+ datapointQuantiles = append(datapointQuantiles, dpq)
+ }
+ }
+
+ tableDataMap := orderedmap.New[string, []any]()
+
+ tableDataMap.Set(SummaryTable, summaries)
+ tableDataMap.Set(SummaryDatapointTable, datapoints)
+ tableDataMap.Set(SummaryDatapointAttributeTable, datapointAttributes)
+ tableDataMap.Set(SummaryDatapointQuantileValueTable, datapointQuantiles)
+ tableDataMap.Set(SummaryResourceAttributeTable, resourceAttributes)
+ tableDataMap.Set(SummaryScopeAttributeTable, scopeAttributes)
+
+ errs = append(errs, kiwriter.writeMetric(pmetric.MetricTypeSummary.String(), tableDataMap))
+
+ return multierr.Combine(errs...)
+
+}
+
+func (kiwriter *KiWriter) doChunkedInsert(_ context.Context, tableName string, records []any) error {
+
+ // Build the final table name with the schema prepended
+ var finalTable string
+ if len(kiwriter.cfg.Schema) != 0 {
+ finalTable = fmt.Sprintf("%s.%s", kiwriter.cfg.Schema, tableName)
+ } else {
+ finalTable = tableName
+ }
+
+ kiwriter.logger.Debug("Writing to - ", zap.String("Table", finalTable), zap.Int("Record count", len(records)))
+
+ recordChunks := chunkBySize(records, ChunkSize)
+
+ errsChan := make(chan error, len(recordChunks))
+
+ wg := &sync.WaitGroup{}
+
+ for _, recordChunk := range recordChunks {
+ wg.Add(1)
+ go func(data []any, wg *sync.WaitGroup) {
+ _, err := kiwriter.Db.InsertRecordsRaw(context.TODO(), finalTable, data)
+ errsChan <- err
+
+ wg.Done()
+ }(recordChunk, wg)
+ }
+ wg.Wait()
+ close(errsChan)
+ var errs error
+ for err := range errsChan {
+ errs = multierr.Append(errs, err)
+ }
+ return errs
+}
diff --git a/exporter/loadbalancingexporter/README.md b/exporter/loadbalancingexporter/README.md
index c3d6427de973..3f17f084e1dc 100644
--- a/exporter/loadbalancingexporter/README.md
+++ b/exporter/loadbalancingexporter/README.md
@@ -3,19 +3,15 @@
| Status | |
| ------------- |-----------|
-| Stability | [beta]: traces, logs |
-| | [development]: metrics |
-| Distributions | [contrib], [aws], [grafana], [observiq], [sumo] |
+| Stability | [development]: metrics |
+| | [beta]: traces, logs |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Floadbalancing%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Floadbalancing) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Floadbalancing%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Floadbalancing) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jpkrohling](https://www.github.com/jpkrohling) |
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[development]: https://github.com/open-telemetry/opentelemetry-collector#development
+[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[grafana]: https://github.com/grafana/agent
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
This is an exporter that will consistently export spans, metrics and logs depending on the `routing_key` configured.
@@ -46,14 +42,20 @@ Around R/N of the "routes" will be rerouted differently, where:
This should be stable enough for most cases, and the larger the number of backends, the less disruption it should cause. Still, if routing stability is important for your use case and your list of backends are constantly changing, consider using the `groupbytrace` processor. This way, traces are dispatched atomically to this exporter, and the same decision about the backend is made for the trace as a whole.
-This also supports service name based exporting for traces. If you have two or more collectors that collect traces and then use spanmetrics processor to generate metrics and push to prometheus, there is a high chance of facing label collisions on prometheus if the routing is based on `traceID` because every collector sees the `service+operation` label. With service name based routing, each collector can only see one service name and can push metrics without any label collisions.
+This also supports service name based exporting for traces. If you have two or more collectors that collect traces and then use spanmetrics connector to generate metrics and push to prometheus, there is a high chance of facing label collisions on prometheus if the routing is based on `traceID` because every collector sees the `service+operation` label. With service name based routing, each collector can only see one service name and can push metrics without any label collisions.
+
+## Resilience and scaling considerations
+The `loadbalancingexporter` will, irrespective of the chosen resolver (`static`, `dns`, `k8s`), create one exporter per endpoint. The exporter conforms to its published configuration regarding sending queue and retry mechanisms. Importantly, the `loadbalancingexporter` will not attempt to re-route data to a healthy endpoint on delivery failure, and data loss is therefore possible if the exporter's target remains unavailable once redelivery is exhausted. Due consideration needs to be given to the exporter queue and retry configuration when running in a highly elastic environment.
+
+- When using the `static` resolver and a target is unavailable, all the target's load-balanced telemetry will fail to be delivered until either the target is restored or removed from the static list. The same principle applies to the `dns` resolver.
+- When using `k8s`, `dns`, and likely future resolvers, topology changes are eventually reflected in the `loadbalancingexporter`. The `k8s` resolver will update more quickly than `dns`, but a window of time in which the true topology doesn't match the view of the `loadbalancingexporter` remains.
## Configuration
Refer to [config.yaml](./testdata/config.yaml) for detailed examples on using the processor.
* The `otlp` property configures the template used for building the OTLP exporter. Refer to the OTLP Exporter documentation for information on which options are available. Note that the `endpoint` property should not be set and will be overridden by this exporter with the backend endpoint.
-* The `resolver` accepts a `static` node, a `dns` or a `k8s` service. If all three are specified, `k8s` takes precedence.
+* The `resolver` accepts a `static` node, a `dns`, a `k8s` service or `awsCloudMap`. If all four are specified, an `errMultipleResolversProvided` error will be thrown.
* The `hostname` property inside a `dns` node specifies the hostname to query in order to obtain the list of IP addresses.
* The `dns` node also accepts the following optional properties:
* `hostname` DNS hostname to resolve.
@@ -63,6 +65,23 @@ Refer to [config.yaml](./testdata/config.yaml) for detailed examples on using th
* The `k8s` node accepts the following optional properties:
* `service` Kubernetes service to resolve, e.g. `lb-svc.lb-ns`. If no namespace is specified, an attempt will be made to infer the namespace for this collector, and if this fails it will fall back to the `default` namespace.
* `ports` port to be used for exporting the traces to the addresses resolved from `service`. If `ports` is not specified, the default port 4317 is used. When multiple ports are specified, two backends are added to the load balancer as if they were at different pods.
+ * `timeout` resolver timeout in go-Duration format, e.g. `5s`, `1d`, `30m`. If not specified, `1s` will be used.
+* The `awsCloudMap` node accepts the following properties:
+ * `namespace` The CloudMap namespace where the service is register, e.g. `cloudmap`. If no `namespace` is specified, this will fail to start the Load Balancer exporter.
+ * `serviceName` The name of the service that you specified when you registered the instance, e.g. `otelcollectors`. If no `serviceName` is specified, this will fail to start the Load Balancer exporter.
+ * `interval` resolver interval in go-Duration format, e.g. `5s`, `1d`, `30m`. If not specified, `30s` will be used.
+ * `timeout` resolver timeout in go-Duration format, e.g. `5s`, `1d`, `30m`. If not specified, `5s` will be used.
+ * `port` port to be used for exporting the traces to the addresses resolved from `service`. By default, the port is set in Cloud Map, but can be be overridden with a static value in this config
+ * `healthStatus` filter in AWS Cloud Map, you can specify the health status of the instances that you want to discover. The healthStatus filter is optional and allows you to query based on the health status of the instances.
+ * Available values are
+ * `HEALTHY`: Only return instances that are healthy.
+ * `UNHEALTHY`: Only return instances that are unhealthy.
+ * `ALL`: Return all instances, regardless of their health status.
+ * `HEALTHY_OR_ELSE_ALL`: Returns healthy instances, unless none are reporting a healthy state. In that case, return all instances. This is also called failing open.
+ * Resolver's default filter is set to `HEALTHY` when none is explicitly defined
+ * **Notes:**
+ * This resolver currently returns a maximum of 100 hosts.
+ * `TODO`: Feature request [29771](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/29771) aims to cover the pagination for this scenario
* The `routing_key` property is used to route spans to exporters based on different parameters. This functionality is currently enabled only for `trace` pipeline types. It supports one of the following values:
* `service`: exports spans based on their service name. This is useful when using processors like the span metrics, so all spans for each service are sent to consistent collector instances for metric collection. Otherwise, metrics for the same services are sent to different collectors, making aggregations inaccurate.
* `traceID` (default): exports spans based on their `traceID`.
@@ -155,6 +174,45 @@ service:
- loadbalancing
```
+AWS CloudMap resolver example
+```yaml
+receivers:
+ otlp:
+ protocols:
+ grpc:
+ endpoint: localhost:4317
+
+processors:
+
+exporters:
+ loadbalancing:
+ protocol:
+ otlp:
+ # all options from the OTLP exporter are supported
+ # except the endpoint
+ timeout: 3s
+ resolver:
+ awsCloudMap:
+ namespace: aws-namespace
+ serviceName: aws-otel-col-service-name
+ interval: 30s
+
+service:
+ pipelines:
+ traces:
+ receivers:
+ - otlp
+ processors: []
+ exporters:
+ - loadbalancing
+ logs:
+ receivers:
+ - otlp
+ processors: []
+ exporters:
+ - loadbalancing
+```
+
For testing purposes, the following configuration can be used, where both the load balancer and all backends are running locally:
```yaml
receivers:
diff --git a/exporter/loadbalancingexporter/config.go b/exporter/loadbalancingexporter/config.go
index bfb7c057a686..6acee4a8ebe3 100644
--- a/exporter/loadbalancingexporter/config.go
+++ b/exporter/loadbalancingexporter/config.go
@@ -6,6 +6,7 @@ package loadbalancingexporter // import "github.com/open-telemetry/opentelemetry
import (
"time"
+ "github.com/aws/aws-sdk-go-v2/service/servicediscovery/types"
"go.opentelemetry.io/collector/exporter/otlpexporter"
)
@@ -32,9 +33,10 @@ type Protocol struct {
// ResolverSettings defines the configurations for the backend resolver
type ResolverSettings struct {
- Static *StaticResolver `mapstructure:"static"`
- DNS *DNSResolver `mapstructure:"dns"`
- K8sSvc *K8sSvcResolver `mapstructure:"k8s"`
+ Static *StaticResolver `mapstructure:"static"`
+ DNS *DNSResolver `mapstructure:"dns"`
+ K8sSvc *K8sSvcResolver `mapstructure:"k8s"`
+ AWSCloudMap *AWSCloudMapResolver `mapstructure:"awsCloudMap"`
}
// StaticResolver defines the configuration for the resolver providing a fixed list of backends
@@ -52,6 +54,16 @@ type DNSResolver struct {
// K8sSvcResolver defines the configuration for the DNS resolver
type K8sSvcResolver struct {
- Service string `mapstructure:"service"`
- Ports []int32 `mapstructure:"ports"`
+ Service string `mapstructure:"service"`
+ Ports []int32 `mapstructure:"ports"`
+ Timeout time.Duration `mapstructure:"timeout"`
+}
+
+type AWSCloudMapResolver struct {
+ NamespaceName string `mapstructure:"namespace"`
+ ServiceName string `mapstructure:"serviceName"`
+ HealthStatus types.HealthStatusFilter `mapstructure:"healthStatus"`
+ Interval time.Duration `mapstructure:"interval"`
+ Timeout time.Duration `mapstructure:"timeout"`
+ Port *uint16 `mapstructure:"port"`
}
diff --git a/exporter/loadbalancingexporter/example/Dockerfile b/exporter/loadbalancingexporter/example/Dockerfile
index 26e83570bc5e..29289f483359 100644
--- a/exporter/loadbalancingexporter/example/Dockerfile
+++ b/exporter/loadbalancingexporter/example/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.21 AS build
+FROM golang:1.22 AS build
WORKDIR /src
ADD . /src
diff --git a/exporter/loadbalancingexporter/factory.go b/exporter/loadbalancingexporter/factory.go
index 60a8be45217a..f748ff162c6f 100644
--- a/exporter/loadbalancingexporter/factory.go
+++ b/exporter/loadbalancingexporter/factory.go
@@ -32,6 +32,7 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
otlpFactory := otlpexporter.NewFactory()
otlpDefaultCfg := otlpFactory.CreateDefaultConfig().(*otlpexporter.Config)
+ otlpDefaultCfg.Endpoint = "placeholder:4317"
return &Config{
Protocol: Protocol{
diff --git a/exporter/loadbalancingexporter/factory_test.go b/exporter/loadbalancingexporter/factory_test.go
index ccf957eef971..6da108067651 100644
--- a/exporter/loadbalancingexporter/factory_test.go
+++ b/exporter/loadbalancingexporter/factory_test.go
@@ -25,7 +25,7 @@ func TestTracesExporterGetsCreatedWithValidConfiguration(t *testing.T) {
exp, err := factory.CreateTracesExporter(context.Background(), creationParams, cfg)
// verify
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
}
@@ -43,6 +43,18 @@ func TestLogExporterGetsCreatedWithValidConfiguration(t *testing.T) {
exp, err := factory.CreateLogsExporter(context.Background(), creationParams, cfg)
// verify
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exp)
}
+
+func TestOTLPConfigIsValid(t *testing.T) {
+ // prepare
+ factory := NewFactory()
+ defaultCfg := factory.CreateDefaultConfig().(*Config)
+
+ // test
+ otlpCfg := defaultCfg.Protocol.OTLP
+
+ // verify
+ assert.NoError(t, otlpCfg.Validate())
+}
diff --git a/exporter/loadbalancingexporter/generated_component_test.go b/exporter/loadbalancingexporter/generated_component_test.go
new file mode 100644
index 000000000000..f8e5b0c1fc4f
--- /dev/null
+++ b/exporter/loadbalancingexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package loadbalancingexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/loadbalancingexporter/go.mod b/exporter/loadbalancingexporter/go.mod
index 4cd6a670bc19..e333e8e5e060 100644
--- a/exporter/loadbalancingexporter/go.mod
+++ b/exporter/loadbalancingexporter/go.mod
@@ -1,69 +1,82 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.89.0
- github.com/stretchr/testify v1.8.4
+ github.com/aws/aws-sdk-go-v2/config v1.27.11
+ github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5
+ github.com/aws/smithy-go v1.20.2
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal v0.98.0
+ github.com/stretchr/testify v1.9.0
go.opencensus.io v0.24.0
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/exporter/otlpexporter v0.89.0
- go.opentelemetry.io/collector/otelcol v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0
+ go.opentelemetry.io/collector/otelcol v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
- k8s.io/api v0.28.3
- k8s.io/apimachinery v0.28.3
- k8s.io/client-go v0.28.3
- k8s.io/utils v0.0.0-20230406110748-d93618cff8a2
- sigs.k8s.io/controller-runtime v0.16.3
+ go.uber.org/zap v1.27.0
+ k8s.io/api v0.29.3
+ k8s.io/apimachinery v0.29.3
+ k8s.io/client-go v0.29.3
+ k8s.io/utils v0.0.0-20240102154912-e7106e64919e
+ sigs.k8s.io/controller-runtime v0.17.3
)
require (
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
+ github.com/aws/aws-sdk-go-v2 v1.26.1 // indirect
+ github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect
+ github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 // indirect
+ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 // indirect
+ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect
+ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect
+ github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 // indirect
github.com/beorn7/perks v1.0.1 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
- github.com/evanphx/json-patch/v5 v5.6.0 // indirect
+ github.com/evanphx/json-patch/v5 v5.8.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-kit/log v0.2.1 // indirect
- github.com/go-logfmt/logfmt v0.5.1 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-openapi/jsonpointer v0.19.6 // indirect
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.22.3 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
- github.com/google/uuid v1.4.0 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/imdario/mergo v0.3.6 // indirect
github.com/inconshreveable/mousetrap v1.1.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.2 // indirect
+ github.com/klauspost/compress v1.17.4 // indirect
github.com/knadh/koanf/maps v0.1.1 // indirect
github.com/knadh/koanf/providers/confmap v0.1.0 // indirect
- github.com/knadh/koanf/v2 v2.0.1 // indirect
+ github.com/knadh/koanf/v2 v2.1.1 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
@@ -72,71 +85,78 @@ require (
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/spf13/cobra v1.8.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
- go.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/configgrpc 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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/connector v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/processor v0.89.0 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/contrib/propagators/b3 v1.20.0 // indirect
- go.opentelemetry.io/otel v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- golang.org/x/term v0.14.0 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 // indirect
+ go.opentelemetry.io/collector/connector v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0 // indirect
+ go.opentelemetry.io/collector/processor v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/service v0.98.0 // indirect
+ go.opentelemetry.io/contrib/config v0.4.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/contrib/propagators/b3 v1.25.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/bridge/opencensus v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.opentelemetry.io/proto/otlp v1.1.0 // indirect
+ golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/oauth2 v0.17.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/term v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.4.0 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ gonum.org/v1/gonum v0.15.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
- k8s.io/klog/v2 v2.100.1 // indirect
- k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
+ k8s.io/klog/v2 v2.110.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
- sigs.k8s.io/yaml v1.3.0 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
+ sigs.k8s.io/yaml v1.4.0 // indirect
)
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchpersignal => ../../pkg/batchpersignal
diff --git a/exporter/loadbalancingexporter/go.sum b/exporter/loadbalancingexporter/go.sum
index 8ef43fffa5b6..7b7276fae18d 100644
--- a/exporter/loadbalancingexporter/go.sum
+++ b/exporter/loadbalancingexporter/go.sum
@@ -1,889 +1,67 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
-cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
-cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
-cloud.google.com/go v0.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.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg=
-cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8=
-cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0=
-cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY=
-cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=
-cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=
-cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=
-cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=
-cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
-cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
-cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
-cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U=
-cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A=
-cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
-cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
-cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA=
-cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM=
-cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I=
-cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY=
-cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw=
-cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI=
-cloud.google.com/go v0.110.6/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI=
-cloud.google.com/go v0.110.7 h1:rJyC7nWRg2jWGZ4wSJ5nY65GTdYJkg0cd/uXb+ACI6o=
-cloud.google.com/go v0.110.7/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI=
-cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic=
-cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4=
-cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw=
-cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E=
-cloud.google.com/go/accessapproval v1.7.1/go.mod h1:JYczztsHRMK7NTXb6Xw+dwbs/WnOJxbo/2mTI+Kgg68=
-cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o=
-cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE=
-cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM=
-cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ=
-cloud.google.com/go/accesscontextmanager v1.8.0/go.mod h1:uI+AI/r1oyWK99NN8cQ3UK76AMelMzgZCvJfsi2c+ps=
-cloud.google.com/go/accesscontextmanager v1.8.1/go.mod h1:JFJHfvuaTC+++1iL1coPiG1eu5D24db2wXCDWDjIrxo=
-cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
-cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
-cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg=
-cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ=
-cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k=
-cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw=
-cloud.google.com/go/aiplatform v1.45.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA=
-cloud.google.com/go/aiplatform v1.48.0/go.mod h1:Iu2Q7sC7QGhXUeOhAj/oCK9a+ULz1O4AotZiqjQ8MYA=
-cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI=
-cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4=
-cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M=
-cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE=
-cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE=
-cloud.google.com/go/analytics v0.21.2/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo=
-cloud.google.com/go/analytics v0.21.3/go.mod h1:U8dcUtmDmjrmUTnnnRnI4m6zKn/yaA5N9RlEkYFHpQo=
-cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk=
-cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc=
-cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8=
-cloud.google.com/go/apigateway v1.6.1/go.mod h1:ufAS3wpbRjqfZrzpvLC2oh0MFlpRJm2E/ts25yyqmXA=
-cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc=
-cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04=
-cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8=
-cloud.google.com/go/apigeeconnect v1.6.1/go.mod h1:C4awq7x0JpLtrlQCr8AzVIzAaYgngRqWf9S5Uhg+wWs=
-cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY=
-cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM=
-cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc=
-cloud.google.com/go/apigeeregistry v0.7.1/go.mod h1:1XgyjZye4Mqtw7T9TsY4NW10U7BojBvG4RMD+vRDrIw=
-cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU=
-cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI=
-cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8=
-cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno=
-cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak=
-cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84=
-cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A=
-cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E=
-cloud.google.com/go/appengine v1.8.1/go.mod h1:6NJXGLVhZCN9aQ/AEDvmfzKEfoYBlfB80/BHiKVputY=
-cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4=
-cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0=
-cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY=
-cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k=
-cloud.google.com/go/area120 v0.8.1/go.mod h1:BVfZpGpB7KFVNxPiQBuHkX6Ed0rS51xIgmGyjrAfzsg=
-cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ=
-cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk=
-cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0=
-cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc=
-cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI=
-cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ=
-cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI=
-cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08=
-cloud.google.com/go/artifactregistry v1.14.1/go.mod h1:nxVdG19jTaSTu7yA7+VbWL346r3rIdkZ142BSQqhn5E=
-cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o=
-cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s=
-cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0=
-cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ=
-cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY=
-cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo=
-cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg=
-cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw=
-cloud.google.com/go/asset v1.14.1/go.mod h1:4bEJ3dnHCqWCDbWJ/6Vn7GVI9LerSi7Rfdi03hd+WTQ=
-cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY=
-cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw=
-cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI=
-cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo=
-cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0=
-cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E=
-cloud.google.com/go/assuredworkloads v1.11.1/go.mod h1:+F04I52Pgn5nmPG36CWFtxmav6+7Q+c5QyJoL18Lry0=
-cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0=
-cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8=
-cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8=
-cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM=
-cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU=
-cloud.google.com/go/automl v1.13.1/go.mod h1:1aowgAHWYZU27MybSCFiukPO7xnyawv7pt3zK4bheQE=
-cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc=
-cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI=
-cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss=
-cloud.google.com/go/baremetalsolution v1.1.1/go.mod h1:D1AV6xwOksJMV4OSlWHtWuFNZZYujJknMAP4Qa27QIA=
-cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE=
-cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE=
-cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g=
-cloud.google.com/go/batch v1.3.1/go.mod h1:VguXeQKXIYaeeIYbuozUmBR13AfL4SJP7IltNPS+A4A=
-cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4=
-cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8=
-cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM=
-cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU=
-cloud.google.com/go/beyondcorp v0.6.1/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4=
-cloud.google.com/go/beyondcorp v1.0.0/go.mod h1:YhxDWw946SCbmcWo3fAhw3V4XZMSpQ/VYfcKGAEU8/4=
-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/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA=
-cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw=
-cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc=
-cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E=
-cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac=
-cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q=
-cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU=
-cloud.google.com/go/bigquery v1.52.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4=
-cloud.google.com/go/bigquery v1.53.0/go.mod h1:3b/iXjRQGU4nKa87cXeg6/gogLjO8C6PmuM8i5Bi/u4=
-cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY=
-cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s=
-cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI=
-cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y=
-cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss=
-cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc=
-cloud.google.com/go/billing v1.16.0/go.mod h1:y8vx09JSSJG02k5QxbycNRrN7FGZB6F3CAcgum7jvGA=
-cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM=
-cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI=
-cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0=
-cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk=
-cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q=
-cloud.google.com/go/binaryauthorization v1.6.1/go.mod h1:TKt4pa8xhowwffiBmbrbcxijJRZED4zrqnwZ1lKH51U=
-cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg=
-cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590=
-cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8=
-cloud.google.com/go/certificatemanager v1.7.1/go.mod h1:iW8J3nG6SaRYImIa+wXQ0g8IgoofDFRp5UMzaNk1UqI=
-cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk=
-cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk=
-cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE=
-cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU=
-cloud.google.com/go/channel v1.16.0/go.mod h1:eN/q1PFSl5gyu0dYdmxNXscY/4Fi7ABmeHCJNf/oHmc=
-cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U=
-cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA=
-cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M=
-cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg=
-cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s=
-cloud.google.com/go/cloudbuild v1.10.1/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU=
-cloud.google.com/go/cloudbuild v1.13.0/go.mod h1:lyJg7v97SUIPq4RC2sGsz/9tNczhyv2AjML/ci4ulzU=
-cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM=
-cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk=
-cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA=
-cloud.google.com/go/clouddms v1.6.1/go.mod h1:Ygo1vL52Ov4TBZQquhz5fiw2CQ58gvu+PlS6PVXCpZI=
-cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY=
-cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI=
-cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4=
-cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI=
-cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y=
-cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs=
-cloud.google.com/go/cloudtasks v1.11.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM=
-cloud.google.com/go/cloudtasks v1.12.1/go.mod h1:a9udmnou9KO2iulGscKR0qBYjreuX8oHwpmFsKspEvM=
-cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
-cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
-cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
-cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s=
-cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
-cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
-cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
-cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU=
-cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU=
-cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE=
-cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo=
-cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA=
-cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs=
-cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
-cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE=
-cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI=
-cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
-cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY=
-cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM=
-cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU=
-cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k=
-cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM=
-cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
-cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 h1:aRVqY1p2IJaBGStWMsQMpkAa83cPkCDLl80eOj0Rbz4=
-cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY=
-cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck=
-cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w=
-cloud.google.com/go/contactcenterinsights v1.9.1/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM=
-cloud.google.com/go/contactcenterinsights v1.10.0/go.mod h1:bsg/R7zGLYMVxFFzfh9ooLTruLRCG9fnzhH9KznHhbM=
-cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg=
-cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo=
-cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4=
-cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM=
-cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA=
-cloud.google.com/go/container v1.22.1/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4=
-cloud.google.com/go/container v1.24.0/go.mod h1:lTNExE2R7f+DLbAN+rJiKTisauFCaoDq6NURZ83eVH4=
-cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
-cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4=
-cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI=
-cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s=
-cloud.google.com/go/containeranalysis v0.10.1/go.mod h1:Ya2jiILITMY68ZLPaogjmOMNkwsDrWBSTyBubGXO7j0=
-cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0=
-cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs=
-cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc=
-cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE=
-cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM=
-cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M=
-cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0=
-cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8=
-cloud.google.com/go/datacatalog v1.14.0/go.mod h1:h0PrGtlihoutNMp/uvwhawLQ9+c63Kz65UFqh49Yo+E=
-cloud.google.com/go/datacatalog v1.14.1/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4=
-cloud.google.com/go/datacatalog v1.16.0/go.mod h1:d2CevwTG4yedZilwe+v3E3ZBDRMobQfSG/a6cCCN5R4=
-cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM=
-cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ=
-cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE=
-cloud.google.com/go/dataflow v0.9.1/go.mod h1:Wp7s32QjYuQDWqJPFFlnBKhkAtiFpMTdg00qGbnIHVw=
-cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo=
-cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE=
-cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0=
-cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA=
-cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE=
-cloud.google.com/go/dataform v0.8.1/go.mod h1:3BhPSiw8xmppbgzeBbmDvmSWlwouuJkXsXsb8UBih9M=
-cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38=
-cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w=
-cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8=
-cloud.google.com/go/datafusion v1.7.1/go.mod h1:KpoTBbFmoToDExJUso/fcCiguGDk7MEzOWXUsJo0wsI=
-cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I=
-cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ=
-cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM=
-cloud.google.com/go/datalabeling v0.8.1/go.mod h1:XS62LBSVPbYR54GfYQsPXZjTW8UxCK2fkDciSrpRFdY=
-cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA=
-cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A=
-cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ=
-cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs=
-cloud.google.com/go/dataplex v1.8.1/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE=
-cloud.google.com/go/dataplex v1.9.0/go.mod h1:7TyrDT6BCdI8/38Uvp0/ZxBslOslP2X2MPDucliyvSE=
-cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s=
-cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI=
-cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4=
-cloud.google.com/go/dataproc/v2 v2.0.1/go.mod h1:7Ez3KRHdFGcfY7GcevBbvozX+zyWGcwLJvvAMwCaoZ4=
-cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo=
-cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA=
-cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c=
-cloud.google.com/go/dataqna v0.8.1/go.mod h1:zxZM0Bl6liMePWsHA8RMGAfmTG34vJMapbHAxQ5+WA8=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
-cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM=
-cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c=
-cloud.google.com/go/datastore v1.12.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70=
-cloud.google.com/go/datastore v1.12.1/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70=
-cloud.google.com/go/datastore v1.13.0/go.mod h1:KjdB88W897MRITkvWWJrg2OUtrR5XVj1EoLgSp6/N70=
-cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo=
-cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ=
-cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g=
-cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4=
-cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs=
-cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww=
-cloud.google.com/go/datastream v1.9.1/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q=
-cloud.google.com/go/datastream v1.10.0/go.mod h1:hqnmr8kdUBmrnk65k5wNRoHSCYksvpdZIcZIEl8h43Q=
-cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c=
-cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s=
-cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI=
-cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ=
-cloud.google.com/go/deploy v1.11.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g=
-cloud.google.com/go/deploy v1.13.0/go.mod h1:tKuSUV5pXbn67KiubiUNUejqLs4f5cxxiCNCeyl0F2g=
-cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4=
-cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0=
-cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8=
-cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek=
-cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0=
-cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM=
-cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4=
-cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE=
-cloud.google.com/go/dialogflow v1.38.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4=
-cloud.google.com/go/dialogflow v1.40.0/go.mod h1:L7jnH+JL2mtmdChzAIcXQHXMvQkE3U4hTaNltEuxXn4=
-cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM=
-cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q=
-cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4=
-cloud.google.com/go/dlp v1.10.1/go.mod h1:IM8BWz1iJd8njcNcG0+Kyd9OPnqnRNkDV8j42VT5KOI=
-cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU=
-cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU=
-cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k=
-cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4=
-cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM=
-cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs=
-cloud.google.com/go/documentai v1.20.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E=
-cloud.google.com/go/documentai v1.22.0/go.mod h1:yJkInoMcK0qNAEdRnqY/D5asy73tnPe88I1YTZT+a8E=
-cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y=
-cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg=
-cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE=
-cloud.google.com/go/domains v0.9.1/go.mod h1:aOp1c0MbejQQ2Pjf1iJvnVyT+z6R6s8pX66KaCSDYfE=
-cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk=
-cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w=
-cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc=
-cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY=
-cloud.google.com/go/edgecontainer v1.1.1/go.mod h1:O5bYcS//7MELQZs3+7mabRqoWQhXCzenBu0R8bz2rwk=
-cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU=
-cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI=
-cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8=
-cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M=
-cloud.google.com/go/essentialcontacts v1.6.2/go.mod h1:T2tB6tX+TRak7i88Fb2N9Ok3PvY3UNbUsMag9/BARh4=
-cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc=
-cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw=
-cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw=
-cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY=
-cloud.google.com/go/eventarc v1.12.1/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI=
-cloud.google.com/go/eventarc v1.13.0/go.mod h1:mAFCW6lukH5+IZjkvrEss+jmt2kOdYlN8aMx3sRJiAI=
-cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w=
-cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI=
-cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs=
-cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg=
-cloud.google.com/go/filestore v1.7.1/go.mod h1:y10jsorq40JJnjR/lQ8AfFbbcGlw3g+Dp8oN7i7FjV4=
-cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE=
-cloud.google.com/go/firestore v1.11.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4=
-cloud.google.com/go/firestore v1.12.0/go.mod h1:b38dKhgzlmNNGTNZZwe7ZRFEuRab1Hay3/DBsIGKKy4=
-cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk=
-cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg=
-cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY=
-cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08=
-cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw=
-cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA=
-cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c=
-cloud.google.com/go/functions v1.15.1/go.mod h1:P5yNWUTkyU+LvW/S9O6V+V423VZooALQlqoXdoPz5AE=
-cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM=
-cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA=
-cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w=
-cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM=
-cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0=
-cloud.google.com/go/gaming v1.10.1/go.mod h1:XQQvtfP8Rb9Rxnxm5wFVpAp9zCQkJi2bLIb7iHGwB3s=
-cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60=
-cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo=
-cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg=
-cloud.google.com/go/gkebackup v1.3.0/go.mod h1:vUDOu++N0U5qs4IhG1pcOnD1Mac79xWy6GoBFlWCWBU=
-cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o=
-cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A=
-cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw=
-cloud.google.com/go/gkeconnect v0.8.1/go.mod h1:KWiK1g9sDLZqhxB2xEuPV8V9NYzrqTUmQR9shJHpOZw=
-cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0=
-cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0=
-cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E=
-cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw=
-cloud.google.com/go/gkehub v0.14.1/go.mod h1:VEXKIJZ2avzrbd7u+zeMtW00Y8ddk/4V9511C9CQGTY=
-cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA=
-cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI=
-cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y=
-cloud.google.com/go/gkemulticloud v0.6.1/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw=
-cloud.google.com/go/gkemulticloud v1.0.0/go.mod h1:kbZ3HKyTsiwqKX7Yw56+wUGwwNZViRnxWK2DVknXWfw=
-cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc=
-cloud.google.com/go/grafeas v0.3.0/go.mod h1:P7hgN24EyONOTMyeJH6DxG4zD7fwiYa5Q6GUgyFSOU8=
-cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM=
-cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o=
-cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo=
-cloud.google.com/go/gsuiteaddons v1.6.1/go.mod h1:CodrdOqRZcLp5WOwejHWYBjZvfY0kOphkAKpF/3qdZY=
-cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c=
-cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY=
-cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
-cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc=
-cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg=
-cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE=
-cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY=
-cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY=
-cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0=
-cloud.google.com/go/iam v1.0.1/go.mod h1:yR3tmSL8BcZB4bxByRv2jkSIahVmCtfKZwLYGBalRE8=
-cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk=
-cloud.google.com/go/iam v1.1.1/go.mod h1:A5avdyVL2tCppe4unb0951eI9jreack+RJ0/d+KUZOU=
-cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc=
-cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A=
-cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk=
-cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo=
-cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74=
-cloud.google.com/go/iap v1.8.1/go.mod h1:sJCbeqg3mvWLqjZNsI6dfAtbbV1DL2Rl7e1mTyXYREQ=
-cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM=
-cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY=
-cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4=
-cloud.google.com/go/ids v1.4.1/go.mod h1:np41ed8YMU8zOgv53MMMoCntLTn2lF+SUzlM+O3u/jw=
-cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs=
-cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g=
-cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o=
-cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE=
-cloud.google.com/go/iot v1.7.1/go.mod h1:46Mgw7ev1k9KqK1ao0ayW9h0lI+3hxeanz+L1zmbbbk=
-cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA=
-cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg=
-cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0=
-cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg=
-cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w=
-cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24=
-cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI=
-cloud.google.com/go/kms v1.11.0/go.mod h1:hwdiYC0xjnWsKQQCQQmIQnS9asjYVSK6jtXm+zFqXLM=
-cloud.google.com/go/kms v1.12.1/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM=
-cloud.google.com/go/kms v1.15.0/go.mod h1:c9J991h5DTl+kg7gi3MYomh12YEENGrf48ee/N/2CDM=
-cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic=
-cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI=
-cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE=
-cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8=
-cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY=
-cloud.google.com/go/language v1.10.1/go.mod h1:CPp94nsdVNiQEt1CNjF5WkTcisLiHPyIbMhvR8H2AW0=
-cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8=
-cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08=
-cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo=
-cloud.google.com/go/lifesciences v0.9.1/go.mod h1:hACAOd1fFbCGLr/+weUKRAJas82Y4vrL3O5326N//Wc=
-cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw=
-cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M=
-cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE=
-cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc=
-cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo=
-cloud.google.com/go/longrunning v0.4.2/go.mod h1:OHrnaYyLUV6oqwh0xiS7e5sLQhP1m0QU9R+WhGDMgIQ=
-cloud.google.com/go/longrunning v0.5.0/go.mod h1:0JNuqRShmscVAhIACGtskSAWtqtOoPkwP0YF1oVEchc=
-cloud.google.com/go/longrunning v0.5.1/go.mod h1:spvimkwdz6SPWKEt/XBij79E9fiTkHSQl/fRUUQJYJc=
-cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE=
-cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM=
-cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA=
-cloud.google.com/go/managedidentities v1.6.1/go.mod h1:h/irGhTN2SkZ64F43tfGPMbHnypMbu4RB3yl8YcuEak=
-cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI=
-cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw=
-cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY=
-cloud.google.com/go/maps v1.3.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s=
-cloud.google.com/go/maps v1.4.0/go.mod h1:6mWTUv+WhnOwAgjVsSW2QPPECmW+s3PcRyOa9vgG/5s=
-cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4=
-cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=
-cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I=
-cloud.google.com/go/mediatranslation v0.8.1/go.mod h1:L/7hBdEYbYHQJhX2sldtTO5SZZ1C1vkapubj0T2aGig=
-cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE=
-cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM=
-cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA=
-cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY=
-cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM=
-cloud.google.com/go/memcache v1.10.1/go.mod h1:47YRQIarv4I3QS5+hoETgKO40InqzLP6kpNLvyXuyaA=
-cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY=
-cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s=
-cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8=
-cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI=
-cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo=
-cloud.google.com/go/metastore v1.11.1/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA=
-cloud.google.com/go/metastore v1.12.0/go.mod h1:uZuSo80U3Wd4zi6C22ZZliOUJ3XeM/MlYi/z5OAOWRA=
-cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk=
-cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4=
-cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w=
-cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw=
-cloud.google.com/go/monitoring v1.15.1/go.mod h1:lADlSAlFdbqQuwwpaImhsJXu1QSdd3ojypXrFSMr2rM=
-cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA=
-cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o=
-cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM=
-cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8=
-cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E=
-cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM=
-cloud.google.com/go/networkconnectivity v1.12.1/go.mod h1:PelxSWYM7Sh9/guf8CFhi6vIqf19Ir/sbfZRUwXh92E=
-cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8=
-cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4=
-cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY=
-cloud.google.com/go/networkmanagement v1.8.0/go.mod h1:Ho/BUGmtyEqrttTgWEe7m+8vDdK74ibQc+Be0q7Fof0=
-cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ=
-cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU=
-cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k=
-cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU=
-cloud.google.com/go/networksecurity v0.9.1/go.mod h1:MCMdxOKQ30wsBI1eI659f9kEp4wuuAueoC9AJKSPWZQ=
-cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY=
-cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34=
-cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA=
-cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0=
-cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE=
-cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ=
-cloud.google.com/go/notebooks v1.9.1/go.mod h1:zqG9/gk05JrzgBt4ghLzEepPHNwE5jgPcHZRKhlC1A8=
-cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4=
-cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs=
-cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI=
-cloud.google.com/go/optimization v1.4.1/go.mod h1:j64vZQP7h9bO49m2rVaTVoNM0vEBEN5eKPUPbZyXOrk=
-cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA=
-cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk=
-cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ=
-cloud.google.com/go/orchestration v1.8.1/go.mod h1:4sluRF3wgbYVRqz7zJ1/EUNc90TTprliq9477fGobD8=
-cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE=
-cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc=
-cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc=
-cloud.google.com/go/orgpolicy v1.11.0/go.mod h1:2RK748+FtVvnfuynxBzdnyu7sygtoZa1za/0ZfpOs1M=
-cloud.google.com/go/orgpolicy v1.11.1/go.mod h1:8+E3jQcpZJQliP+zaFfayC2Pg5bmhuLK755wKhIIUCE=
-cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs=
-cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg=
-cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo=
-cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw=
-cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw=
-cloud.google.com/go/osconfig v1.12.0/go.mod h1:8f/PaYzoS3JMVfdfTubkowZYGmAhUCjjwnjqWI7NVBc=
-cloud.google.com/go/osconfig v1.12.1/go.mod h1:4CjBxND0gswz2gfYRCUoUzCm9zCABp91EeTtWXyz0tE=
-cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E=
-cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU=
-cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70=
-cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo=
-cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs=
-cloud.google.com/go/oslogin v1.10.1/go.mod h1:x692z7yAue5nE7CsSnoG0aaMbNoRJRXO4sn73R+ZqAs=
-cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0=
-cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA=
-cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk=
-cloud.google.com/go/phishingprotection v0.8.1/go.mod h1:AxonW7GovcA8qdEk13NfHq9hNx5KPtfxXNeUxTDxB6I=
-cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg=
-cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE=
-cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw=
-cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc=
-cloud.google.com/go/policytroubleshooter v1.7.1/go.mod h1:0NaT5v3Ag1M7U5r0GfDCpUFkWd9YqpubBWsQlhanRv0=
-cloud.google.com/go/policytroubleshooter v1.8.0/go.mod h1:tmn5Ir5EToWe384EuboTcVQT7nTag2+DuH3uHmKd1HU=
-cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0=
-cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI=
-cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg=
-cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs=
-cloud.google.com/go/privatecatalog v0.9.1/go.mod h1:0XlDXW2unJXdf9zFz968Hp35gl/bhF4twwpXZAW50JA=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
-cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
-cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI=
-cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0=
-cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8=
-cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4=
-cloud.google.com/go/pubsub v1.32.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc=
-cloud.google.com/go/pubsub v1.33.0/go.mod h1:f+w71I33OMyxf9VpMVcZbnG5KSUkCOUHYpFd5U1GdRc=
-cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg=
-cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k=
-cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM=
-cloud.google.com/go/pubsublite v1.8.1/go.mod h1:fOLdU4f5xldK4RGJrBMm+J7zMWNj/k4PxwEZXy39QS0=
-cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4=
-cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o=
-cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk=
-cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo=
-cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE=
-cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U=
-cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA=
-cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c=
-cloud.google.com/go/recaptchaenterprise/v2 v2.7.2/go.mod h1:kR0KjsJS7Jt1YSyWFkseQ756D45kaYNTlDPPaRAvDBU=
-cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg=
-cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4=
-cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac=
-cloud.google.com/go/recommendationengine v0.8.1/go.mod h1:MrZihWwtFYWDzE6Hz5nKcNz3gLizXVIDI/o3G1DLcrE=
-cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg=
-cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c=
-cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs=
-cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70=
-cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ=
-cloud.google.com/go/recommender v1.10.1/go.mod h1:XFvrE4Suqn5Cq0Lf+mCP6oBHD/yRMA8XxP5sb7Q7gpA=
-cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y=
-cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A=
-cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA=
-cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM=
-cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ=
-cloud.google.com/go/redis v1.13.1/go.mod h1:VP7DGLpE91M6bcsDdMuyCm2hIpB6Vp2hI090Mfd1tcg=
-cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA=
-cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0=
-cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots=
-cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo=
-cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI=
-cloud.google.com/go/resourcemanager v1.9.1/go.mod h1:dVCuosgrh1tINZ/RwBufr8lULmWGOkPS8gL5gqyjdT8=
-cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU=
-cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg=
-cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA=
-cloud.google.com/go/resourcesettings v1.6.1/go.mod h1:M7mk9PIZrC5Fgsu1kZJci6mpgN8o0IUzVx3eJU3y4Jw=
-cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4=
-cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY=
-cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc=
-cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y=
-cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14=
-cloud.google.com/go/retail v1.14.1/go.mod h1:y3Wv3Vr2k54dLNIrCzenyKG8g8dhvhncT2NcNjb/6gE=
-cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do=
-cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo=
-cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM=
-cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg=
-cloud.google.com/go/run v1.2.0/go.mod h1:36V1IlDzQ0XxbQjUx6IYbw8H3TJnWvhii963WW3B/bo=
-cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s=
-cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI=
-cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk=
-cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44=
-cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc=
-cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc=
-cloud.google.com/go/scheduler v1.10.1/go.mod h1:R63Ldltd47Bs4gnhQkmNDse5w8gBRrhObZ54PxgR2Oo=
-cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA=
-cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4=
-cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4=
-cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU=
-cloud.google.com/go/secretmanager v1.11.1/go.mod h1:znq9JlXgTNdBeQk9TBW/FnR/W4uChEKGeqQWAJ8SXFw=
-cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4=
-cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0=
-cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU=
-cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q=
-cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA=
-cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8=
-cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0=
-cloud.google.com/go/security v1.15.1/go.mod h1:MvTnnbsWnehoizHi09zoiZob0iCHVcL4AUBj76h9fXA=
-cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU=
-cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc=
-cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk=
-cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk=
-cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0=
-cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag=
-cloud.google.com/go/securitycenter v1.23.0/go.mod h1:8pwQ4n+Y9WCWM278R8W3nF65QtY172h4S8aXyI9/hsQ=
-cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU=
-cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s=
-cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA=
-cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc=
-cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk=
-cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs=
-cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg=
-cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4=
-cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U=
-cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY=
-cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s=
-cloud.google.com/go/servicedirectory v1.10.1/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ=
-cloud.google.com/go/servicedirectory v1.11.0/go.mod h1:Xv0YVH8s4pVOwfM/1eMTl0XJ6bzIOSLDt8f8eLaGOxQ=
-cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco=
-cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo=
-cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc=
-cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4=
-cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E=
-cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU=
-cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec=
-cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA=
-cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4=
-cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw=
-cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A=
-cloud.google.com/go/shell v1.7.1/go.mod h1:u1RaM+huXFaTojTbW4g9P5emOrrmLE69KrxqQahKn4g=
-cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos=
-cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk=
-cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M=
-cloud.google.com/go/spanner v1.47.0/go.mod h1:IXsJwVW2j4UKs0eYDqodab6HgGuA1bViSqW4uH9lfUI=
-cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM=
-cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ=
-cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0=
-cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco=
-cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0=
-cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI=
-cloud.google.com/go/speech v1.17.1/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo=
-cloud.google.com/go/speech v1.19.0/go.mod h1:8rVNzU43tQvxDaGvqOhpDqgkJTFowBpDvCJ14kGlJYo=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
-cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
-cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
-cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
-cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
-cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=
-cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y=
-cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4=
-cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E=
-cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w=
-cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I=
-cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4=
-cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw=
-cloud.google.com/go/storagetransfer v1.10.0/go.mod h1:DM4sTlSmGiNczmV6iZyceIh2dbs+7z2Ayg6YAiQlYfA=
-cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=
-cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=
-cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM=
-cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA=
-cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c=
-cloud.google.com/go/talent v1.6.2/go.mod h1:CbGvmKCG61mkdjcqTcLOkb2ZN1SrQI8MDyma2l7VD24=
-cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8=
-cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4=
-cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc=
-cloud.google.com/go/texttospeech v1.7.1/go.mod h1:m7QfG5IXxeneGqTapXNxv2ItxP/FS0hCZBwXYqucgSk=
-cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ=
-cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg=
-cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM=
-cloud.google.com/go/tpu v1.6.1/go.mod h1:sOdcHVIgDEEOKuqUoi6Fq53MKHJAtOwtz0GuKsWSH3E=
-cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28=
-cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y=
-cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA=
-cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk=
-cloud.google.com/go/trace v1.10.1/go.mod h1:gbtL94KE5AJLH3y+WVpfWILmqgc6dXcqgNXdOPAQTYk=
-cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs=
-cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg=
-cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0=
-cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos=
-cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos=
-cloud.google.com/go/translate v1.8.1/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs=
-cloud.google.com/go/translate v1.8.2/go.mod h1:d1ZH5aaOA0CNhWeXeC8ujd4tdCFw8XoNWRljklu5RHs=
-cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk=
-cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw=
-cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg=
-cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk=
-cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ=
-cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ=
-cloud.google.com/go/video v1.17.1/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU=
-cloud.google.com/go/video v1.19.0/go.mod h1:9qmqPqw/Ib2tLqaeHgtakU+l5TcJxCJbhFXM7UJjVzU=
-cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU=
-cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4=
-cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M=
-cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU=
-cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU=
-cloud.google.com/go/videointelligence v1.11.1/go.mod h1:76xn/8InyQHarjTWsBR058SmlPCwQjgcvoW0aZykOvo=
-cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0=
-cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo=
-cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo=
-cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY=
-cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E=
-cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY=
-cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0=
-cloud.google.com/go/vision/v2 v2.7.2/go.mod h1:jKa8oSYBWhYiXarHPvP4USxYANYUEdEsQrloLjrSwJU=
-cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE=
-cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g=
-cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc=
-cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY=
-cloud.google.com/go/vmmigration v1.7.1/go.mod h1:WD+5z7a/IpZ5bKK//YmT9E047AD+rjycCAvyMxGJbro=
-cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208=
-cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8=
-cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY=
-cloud.google.com/go/vmwareengine v0.4.1/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0=
-cloud.google.com/go/vmwareengine v1.0.0/go.mod h1:Px64x+BvjPZwWuc4HdmVhoygcXqEkGHXoa7uyfTgSI0=
-cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w=
-cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8=
-cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes=
-cloud.google.com/go/vpcaccess v1.7.1/go.mod h1:FogoD46/ZU+JUBX9D606X21EnxiszYi2tArQwLY4SXs=
-cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE=
-cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg=
-cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc=
-cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A=
-cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg=
-cloud.google.com/go/webrisk v1.9.1/go.mod h1:4GCmXKcOa2BZcZPn6DCEvE7HypmEJcJkr4mtM+sqYPc=
-cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo=
-cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ=
-cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng=
-cloud.google.com/go/websecurityscanner v1.6.1/go.mod h1:Njgaw3rttgRHXzwCB8kgCYqv5/rGpFCsBOvPbYgszpg=
-cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0=
-cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M=
-cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M=
-cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA=
-cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw=
-cloud.google.com/go/workflows v1.11.1/go.mod h1:Z+t10G1wF7h8LgdY/EmRcQY8ptBD/nvofaL6FqlET6g=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
-git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk=
-github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
-github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
-github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
-github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
-github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
-github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
-github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
-github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0=
-github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI=
-github.com/apache/arrow/go/v12 v12.0.0/go.mod h1:d+tV/eHZZ7Dz7RPrFKtPK02tpr+c9/PEd/zm8mDS9Vg=
-github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU=
-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/aws/aws-sdk-go-v2 v1.26.1 h1:5554eUqIYVWpU0YmeeYZ0wU64H2VLBs8TlhRB2L+EkA=
+github.com/aws/aws-sdk-go-v2 v1.26.1/go.mod h1:ffIFB97e2yNsv4aTSGkqtHnppsIJzw7G7BReUZ3jCXM=
+github.com/aws/aws-sdk-go-v2/config v1.27.11 h1:f47rANd2LQEYHda2ddSCKYId18/8BhSRM4BULGmfgNA=
+github.com/aws/aws-sdk-go-v2/config v1.27.11/go.mod h1:SMsV78RIOYdve1vf36z8LmnszlRWkwMQtomCAI0/mIE=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11 h1:YuIB1dJNf1Re822rriUOTxopaHHvIq0l/pX3fwO+Tzs=
+github.com/aws/aws-sdk-go-v2/credentials v1.17.11/go.mod h1:AQtFPsDH9bI2O+71anW6EKL+NcD7LG3dpKGMV4SShgo=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 h1:FVJ0r5XTHSmIHJV6KuDmdYhEpvlHpiSd38RQWhut5J4=
+github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1/go.mod h1:zusuAeqezXzAB24LGuzuekqMAEgWkVYukBec3kr3jUg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5 h1:aw39xVGeRWlWx9EzGVnhOR4yOjQDHPQ6o6NmBlscyQg=
+github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.5/go.mod h1:FSaRudD0dXiMPK2UjknVwwTYyZMRsHv3TtkabsZih5I=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5 h1:PG1F3OD1szkuQPzDw3CIQsRIrtTlUC3lP84taWzHlq0=
+github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.5/go.mod h1:jU1li6RFryMz+so64PpKtudI+QzbKoIEivqdf6LNpOc=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
+github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2 h1:Ji0DY1xUsUr3I8cHps0G+XM3WWU16lP6yG8qu1GAZAs=
+github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.2/go.mod h1:5CsjAbs3NlGQyZNFACh+zztPDI7fU6eW9QsxjfnuBKg=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7 h1:ogRAwT1/gxJBcSWDMZlgyFUM962F51A5CRhDLbxLdmo=
+github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.7/go.mod h1:YCsIZhXfRPLFFCl5xxY+1T9RKzOKjCut+28JSX2DnAk=
+github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5 h1:a3nFS1TFNTH9TVizItnHz3BgPCk5/7ygrZQZAoUV3GA=
+github.com/aws/aws-sdk-go-v2/service/servicediscovery v1.29.5/go.mod h1:3pzLFJnbjkymz6RdZ963DuvMR9rzrKMXrlbteSk4Sxc=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 h1:vN8hEbpRnL7+Hopy9dzmRle1xmDc7o8tmY0klsr175w=
+github.com/aws/aws-sdk-go-v2/service/sso v1.20.5/go.mod h1:qGzynb/msuZIE8I75DVRCUXw3o3ZyBmUvMwQ2t/BrGM=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 h1:Jux+gDDyi1Lruk+KHF91tK2KCuY61kzoCpvtvJJBtOE=
+github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4/go.mod h1:mUYPBhaF2lGiukDEjJX2BLRRKTmoUSitGDUgM4tRxak=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n2HZPkcKgPAi1phU=
+github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw=
+github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q=
+github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
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/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
-github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
-github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
-github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
-github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
-github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230428030218-4003588d1b74/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
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/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
-github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
-github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
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/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
-github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
-github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
-github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34=
-github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI=
-github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q=
-github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo=
-github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w=
-github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
-github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss=
-github.com/envoyproxy/protoc-gen-validate v1.0.1/go.mod h1:0vj8bNkYbSTNS2PIyH87KZaeN4x9zpL9Qt8fQC7d+vs=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
-github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
-github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww=
-github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4=
-github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk=
-github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
-github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+github.com/evanphx/json-patch/v5 v5.8.0 h1:lRj6N9Nci7MvzrXuX6HFzU8XjmhPiXPlsKEy1u0KQro=
+github.com/evanphx/json-patch/v5 v5.8.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ=
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-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
-github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks=
-github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
-github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY=
-github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY=
-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U=
-github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk=
-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.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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.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/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE=
@@ -892,1135 +70,362 @@ github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2Kv
github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
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-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
-github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
-github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
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.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
-github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ=
-github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ=
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
-github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8=
-github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.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/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/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.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.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
-github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
-github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec=
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM=
-github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
-github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
-github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8=
-github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg=
-github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
-github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
-github.com/googleapis/enterprise-certificate-proxy v0.2.4/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k=
-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/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
-github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
-github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM=
-github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM=
-github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c=
-github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo=
-github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY=
-github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8=
-github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
-github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI=
-github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw=
-github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI=
-github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4=
-github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
-github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
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/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
-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=
github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
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/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
-github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
-github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
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/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE=
-github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU=
-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/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
+github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
+github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs=
github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU=
github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU=
-github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g=
-github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
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=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
-github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
-github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o=
-github.com/lyft/protoc-gen-star/v2 v2.0.3/go.mod h1:amey7yeodaJhXSbf/TlLvWiqQfLOSpEk//mLlc+axEk=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
-github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
-github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
-github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
-github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI=
github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/onsi/ginkgo/v2 v2.11.0 h1:WgqUCUt/lT6yXoQ8Wef0fsNn5cAuMK7+KT9UFRz2tcU=
-github.com/onsi/gomega v1.27.10 h1:naR28SdDFlqrG6kScpT8VWpu1xWY5nJRCF3XaYyBjhI=
-github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY=
-github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
-github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI=
-github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
-github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/onsi/ginkgo/v2 v2.14.0 h1:vSmGj2Z5YPb9JwCWT6z6ihcUvDhuXLc3sJiqd3jMKAY=
+github.com/onsi/ginkgo/v2 v2.14.0/go.mod h1:JkUdW7JkN0V6rFvsHcJ478egV3XH9NxpD27Hal/PhZw=
+github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8=
+github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
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.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
-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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
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.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w=
-github.com/prometheus/client_model v0.4.0/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.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
-github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
-github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
-github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
-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.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
-github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w=
-github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
-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/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
github.com/shoenig/test v0.6.4 h1:kVTaSd7WLz5WZ2IaoM0RSzRsUD+m8wRR+5qvntpn4LU=
github.com/shoenig/test v0.6.4/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
-github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4=
-github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
-github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.2/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/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.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.1/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=
-github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
-github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
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.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/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/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/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/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/zpagesextension v0.89.0 h1:opvHcGANx+dS4HJwGTPtRMd6dZdOmmGn6c3PfW/bihQ=
-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/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/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.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
-go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
-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.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0 h1:uhiR/luaJCwMnvvkIS/gIxBbSAp+/vbqeC3AXmuc/kg=
+go.opentelemetry.io/collector/exporter/otlpexporter v0.98.0/go.mod h1:1ySnK/6Cl+67FTP6ty04PX9nrXPYFPuBqZ+Xn9Jzz6Y=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0 h1:JfvsDpTwAhA9au8/4vmONRh0OBVU6n36seb41JD/mTQ=
+go.opentelemetry.io/collector/extension/zpagesextension v0.98.0/go.mod h1:t1zDwy6kYp4w1JgcGHMvdGbKYHqWpK00bB1AEQ0Oqlc=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/contrib/zpages v0.50.0 h1:hKC5asr83xDN4ErwSHVdk3gv053pZiF8SZKmS86IPEw=
+go.opentelemetry.io/contrib/zpages v0.50.0/go.mod h1:8WovRn95fZdaX/dr3e4h7D8IqiVsnZ+WxY0Yn4LyU3k=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
-golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
-golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0=
-golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
-golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
-golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
-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=
-golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE=
-golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE=
-golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug=
-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=
-golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa h1:FRnLl4eNAQl8hwxVVC17teOw8kdjVDVAiFMtgUdTSRQ=
+golang.org/x/exp v0.0.0-20231110203233-9a3e6036ecaa/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/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=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/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.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
-golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-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-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
-golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
-golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
-golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/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-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
-golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
-golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY=
-golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE=
-golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws=
-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.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
-golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
-golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
-golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
-golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI=
-golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/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-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/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.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=
-golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE=
-golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
-golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
-golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
-golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg=
-golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec=
-golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I=
-golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw=
-golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4=
-golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE=
-golang.org/x/oauth2 v0.11.0/go.mod h1:LdF7O/8bLR/qWK9DrpXmbHLTouvRHK0SgJl0GmDBchk=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
+golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-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.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-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-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/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-20210514084401-e8d321eab015/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-20210603125802-9665404d3644/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-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-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-20220728004956-3c1f35247d10/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-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.11.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc=
-golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA=
-golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ=
-golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
-golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
-golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
-golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
-golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
-golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
-golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
-golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
+golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.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.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-golang.org/x/text v0.6.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.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
-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=
-golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
-golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
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.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
-golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k=
-golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
-golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
-golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
-golang.org/x/tools v0.10.0 h1:tvDr/iQoUqNdohiYm0LmmKcBk+q86lb9EprIUFhHHGg=
-golang.org/x/tools v0.10.0/go.mod h1:UJwyiVBsOA2uwvK/e5OY3GTpDUJriEd+/YlqAwLPmyM=
+golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA=
+golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
-golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
-golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8=
-gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw=
-gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
-gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
-gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
-gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
-gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
-gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
-gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY=
-gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
-google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
-google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
-google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
-google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
-google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo=
-google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4=
-google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw=
-google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU=
-google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k=
-google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=
-google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE=
-google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI=
-google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
-google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
-google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
-google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
-google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8=
-google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs=
-google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=
-google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA=
-google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw=
-google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg=
-google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o=
-google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g=
-google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw=
-google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw=
-google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI=
-google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
-google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
-google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
-google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08=
-google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
-google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo=
-google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0=
-google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
-google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
-google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY=
-google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI=
-google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0=
-google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg=
-google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E=
-google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms=
-google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4=
-google.golang.org/api v0.125.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
-google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw=
-google.golang.org/api v0.128.0/go.mod h1:Y611qgqaE92On/7g65MQgxYul3c0rEB894kniWLY750=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
-google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
-google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-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-20210222152913-aa3ee6e6a81c/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-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
-google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
-google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
-google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
-google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=
-google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=
-google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
-google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
-google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=
-google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY=
-google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E=
-google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo=
-google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4=
-google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA=
-google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE=
-google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc=
-google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=
-google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=
-google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=
-google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=
-google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk=
-google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=
-google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=
-google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=
-google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=
-google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo=
-google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw=
-google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI=
-google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI=
-google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U=
-google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
-google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
-google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
-google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
-google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo=
-google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
-google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
-google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
-google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
-google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
-google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg=
-google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE=
-google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
-google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA=
-google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw=
-google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw=
-google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA=
-google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
-google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
-google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
-google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
-google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
-google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak=
-google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU=
-google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY=
-google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk=
-google.golang.org/genproto v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk=
-google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
-google.golang.org/genproto v0.0.0-20230629202037-9506855d4529/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64=
-google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y=
-google.golang.org/genproto v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:0ggbjUrZYpy1q+ANUS30SEoGZ53cdfwtbuG7Ptgy108=
-google.golang.org/genproto v0.0.0-20230803162519-f966b187b2e5/go.mod h1:oH/ZOT02u4kWEp7oYBGYFFkCdKS/uYR9Z7+0/xuuFp8=
-google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d/go.mod h1:yZTlhN0tQnXo3h00fuXNCxJdLdIdnVFVBaRJ5LWBbw4=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8=
-google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
-google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
-google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
-google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig=
-google.golang.org/genproto/googleapis/api v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:mPBs5jNgx2GuQGvFwUvVKqtn6HsUw9nP64BedgvqEsQ=
-google.golang.org/genproto/googleapis/api v0.0.0-20230726155614-23370e0ffb3e/go.mod h1:rsr7RhLuwsDKL7RmgDDCUc6yaGr1iqceVb5Wv6f6YvQ=
-google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5/go.mod h1:5DZzOUPCLYL3mNkQ0ms0F3EuUNZ7py1Bqeq6sxzI7/Q=
-google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d/go.mod h1:KjSP20unUpOx5kyQUFa7k4OJg0qeJ7DEZflGDu2p6Bk=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230629202037-9506855d4529/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:8mL13HKkDa+IuJ8yruA3ci0q+0vsUz4m//+ottjwS5o=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230731190214-cbb8c96f2d6d/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5/go.mod h1:zBEcrKX2ZOcEkHWxBPAIvYUWOKKMIhYcmNiUIu2ji3I=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
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.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
-google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
-google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
-google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
-google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
-google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
-google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
-google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
-google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
-google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
-google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww=
-google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
-google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
-google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw=
-google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g=
-google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8=
-google.golang.org/grpc v1.56.1/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
-google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s=
-google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo=
-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/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -2029,119 +434,43 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
-k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM=
-k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc=
-k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08=
-k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A=
-k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8=
-k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4=
-k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2 h1:qY1Ad8PODbnymg2pRbkyMT/ylpTrCM8P2RJ0yroCyIk=
-k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
-lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk=
-modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
-modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
-modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI=
-modernc.org/cc/v3 v3.37.0/go.mod h1:vtL+3mdHx/wcj3iEGz84rQa8vEqR6XM84v5Lcvfph20=
-modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0=
-modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc=
-modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw=
-modernc.org/ccgo/v3 v3.0.0-20220904174949-82d86e1b6d56/go.mod h1:YSXjPL62P2AMSxBphRHPn7IkzhVHqkvOnRKAKh+W6ZI=
-modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
-modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=
-modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws=
-modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo=
-modernc.org/ccgo/v3 v3.16.13-0.20221017192402-261537637ce8/go.mod h1:fUB3Vn0nVPReA+7IG7yZDfjv1TMWjhQP8gCxrFAtL5g=
-modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
-modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
-modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
-modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA=
-modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A=
-modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU=
-modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU=
-modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA=
-modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0=
-modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s=
-modernc.org/libc v1.17.4/go.mod h1:WNg2ZH56rDEwdropAJeZPQkXmDwh+JCA1s/htl6r2fA=
-modernc.org/libc v1.18.0/go.mod h1:vj6zehR5bfc98ipowQOM2nIDUZnVew/wNC/2tOGS+q0=
-modernc.org/libc v1.20.3/go.mod h1:ZRfIaEkgrYgZDl6pa4W39HgN5G/yDW+NRmNKZBDFrk0=
-modernc.org/libc v1.21.4/go.mod h1:przBsL5RDOZajTVslkugzLBj1evTue36jEomFQOoYuI=
-modernc.org/libc v1.22.2/go.mod h1:uvQavJ1pZ0hIoC/jfqNoMLURIMhKzINIWypNM17puug=
-modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
-modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
-modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
-modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
-modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw=
-modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
-modernc.org/memory v1.3.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
-modernc.org/memory v1.4.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
-modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU=
-modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
-modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0=
-modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4=
-modernc.org/sqlite v1.18.2/go.mod h1:kvrTLEWgxUcHa2GfHBQtanR1H9ht3hTJNtKpzH9k1u0=
-modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw=
-modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw=
-modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw=
-modernc.org/tcl v1.13.2/go.mod h1:7CLiGIPo1M8Rv1Mitpv5akc2+8fxUd2y2UzC/MfMzy0=
-modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
-modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
-modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
-modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8=
-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/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4=
-sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0=
+k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
+k8s.io/apiextensions-apiserver v0.29.2 h1:UK3xB5lOWSnhaCk0RFZ0LUacPZz9RY4wi/yt2Iu+btg=
+k8s.io/apiextensions-apiserver v0.29.2/go.mod h1:aLfYjpA5p3OwtqNXQFkhJ56TB+spV8Gc4wfMhUA3/b8=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
+k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0=
+k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
+k8s.io/utils v0.0.0-20240102154912-e7106e64919e h1:eQ/4ljkx21sObifjzXwlPKpdGLrCfRziVtos3ofG/sQ=
+k8s.io/utils v0.0.0-20240102154912-e7106e64919e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+sigs.k8s.io/controller-runtime v0.17.3 h1:65QmN7r3FWgTxDMz9fvGnO1kbf2nu+acg9p2R9oYYYk=
+sigs.k8s.io/controller-runtime v0.17.3/go.mod h1:N0jpP5Lo7lMTF9aL56Z/B2oWBJjey6StQM0jRbKQXtY=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3 h1:PRbqxJClWWYMNV1dhaG4NsibJbArud9kFxnAMREiWFE=
-sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E=
-sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
-sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
+sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=
diff --git a/exporter/loadbalancingexporter/helpers.go b/exporter/loadbalancingexporter/helpers.go
new file mode 100644
index 000000000000..b275ebd52fbc
--- /dev/null
+++ b/exporter/loadbalancingexporter/helpers.go
@@ -0,0 +1,123 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package loadbalancingexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter"
+
+import (
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+// mergeTraces concatenates two ptrace.Traces into a single ptrace.Traces.
+func mergeTraces(t1 ptrace.Traces, t2 ptrace.Traces) ptrace.Traces {
+ mergedTraces := ptrace.NewTraces()
+
+ if t1.SpanCount() == 0 && t2.SpanCount() == 0 {
+ return mergedTraces
+ }
+
+ // Iterate over the first trace and append spans to the merged traces
+ for i := 0; i < t1.ResourceSpans().Len(); i++ {
+ rs := t1.ResourceSpans().At(i)
+ newRS := mergedTraces.ResourceSpans().AppendEmpty()
+
+ rs.Resource().MoveTo(newRS.Resource())
+ newRS.SetSchemaUrl(rs.SchemaUrl())
+
+ for j := 0; j < rs.ScopeSpans().Len(); j++ {
+ ils := rs.ScopeSpans().At(j)
+
+ newILS := newRS.ScopeSpans().AppendEmpty()
+ ils.Scope().MoveTo(newILS.Scope())
+ newILS.SetSchemaUrl(ils.SchemaUrl())
+
+ for k := 0; k < ils.Spans().Len(); k++ {
+ span := ils.Spans().At(k)
+ newSpan := newILS.Spans().AppendEmpty()
+ span.MoveTo(newSpan)
+ }
+ }
+ }
+
+ // Iterate over the second trace and append spans to the merged traces
+ for i := 0; i < t2.ResourceSpans().Len(); i++ {
+ rs := t2.ResourceSpans().At(i)
+ newRS := mergedTraces.ResourceSpans().AppendEmpty()
+
+ rs.Resource().MoveTo(newRS.Resource())
+ newRS.SetSchemaUrl(rs.SchemaUrl())
+
+ for j := 0; j < rs.ScopeSpans().Len(); j++ {
+ ils := rs.ScopeSpans().At(j)
+
+ newILS := newRS.ScopeSpans().AppendEmpty()
+ ils.Scope().MoveTo(newILS.Scope())
+ newILS.SetSchemaUrl(ils.SchemaUrl())
+
+ for k := 0; k < ils.Spans().Len(); k++ {
+ span := ils.Spans().At(k)
+ newSpan := newILS.Spans().AppendEmpty()
+ span.MoveTo(newSpan)
+ }
+ }
+ }
+
+ return mergedTraces
+}
+
+// mergeMetrics concatenates two pmetric.Metrics into a single pmetric.Metrics.
+func mergeMetrics(m1 pmetric.Metrics, m2 pmetric.Metrics) pmetric.Metrics {
+ mergedMetrics := pmetric.NewMetrics()
+
+ if m1.MetricCount() == 0 && m2.MetricCount() == 0 {
+ return mergedMetrics
+ }
+
+ // Iterate over the first metric and append metrics to the merged metrics
+ for i := 0; i < m1.ResourceMetrics().Len(); i++ {
+ rs := m1.ResourceMetrics().At(i)
+ newRS := mergedMetrics.ResourceMetrics().AppendEmpty()
+
+ rs.Resource().MoveTo(newRS.Resource())
+ newRS.SetSchemaUrl(rs.SchemaUrl())
+
+ for j := 0; j < rs.ScopeMetrics().Len(); j++ {
+ ils := rs.ScopeMetrics().At(j)
+
+ newILS := newRS.ScopeMetrics().AppendEmpty()
+ ils.Scope().MoveTo(newILS.Scope())
+ newILS.SetSchemaUrl(ils.SchemaUrl())
+
+ for k := 0; k < ils.Metrics().Len(); k++ {
+ metric := ils.Metrics().At(k)
+ newMetric := newILS.Metrics().AppendEmpty()
+ metric.MoveTo(newMetric)
+ }
+ }
+ }
+
+ // Iterate over the second metric and append metrics to the merged metrics
+ for i := 0; i < m2.ResourceMetrics().Len(); i++ {
+ rs := m2.ResourceMetrics().At(i)
+ newRS := mergedMetrics.ResourceMetrics().AppendEmpty()
+
+ rs.Resource().MoveTo(newRS.Resource())
+ newRS.SetSchemaUrl(rs.SchemaUrl())
+
+ for j := 0; j < rs.ScopeMetrics().Len(); j++ {
+ ils := rs.ScopeMetrics().At(j)
+
+ newILS := newRS.ScopeMetrics().AppendEmpty()
+ ils.Scope().MoveTo(newILS.Scope())
+ newILS.SetSchemaUrl(ils.SchemaUrl())
+
+ for k := 0; k < ils.Metrics().Len(); k++ {
+ metric := ils.Metrics().At(k)
+ newMetric := newILS.Metrics().AppendEmpty()
+ metric.MoveTo(newMetric)
+ }
+ }
+ }
+
+ return mergedMetrics
+}
diff --git a/exporter/loadbalancingexporter/helpers_test.go b/exporter/loadbalancingexporter/helpers_test.go
new file mode 100644
index 000000000000..e8bda317d54b
--- /dev/null
+++ b/exporter/loadbalancingexporter/helpers_test.go
@@ -0,0 +1,175 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package loadbalancingexporter
+
+import (
+ "testing"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
+)
+
+func TestMergeTracesTwoEmpty(t *testing.T) {
+ expectedEmpty := ptrace.NewTraces()
+ trace1 := ptrace.NewTraces()
+ trace2 := ptrace.NewTraces()
+
+ mergedTraces := mergeTraces(trace1, trace2)
+
+ require.Equal(t, expectedEmpty, mergedTraces)
+}
+
+func TestMergeTracesSingleEmpty(t *testing.T) {
+ expectedTraces := simpleTraces()
+
+ trace1 := ptrace.NewTraces()
+ trace2 := simpleTraces()
+
+ mergedTraces := mergeTraces(trace1, trace2)
+
+ require.Equal(t, expectedTraces, mergedTraces)
+}
+
+func TestMergeTraces(t *testing.T) {
+ expectedTraces := ptrace.NewTraces()
+ expectedTraces.ResourceSpans().EnsureCapacity(3)
+ aspans := expectedTraces.ResourceSpans().AppendEmpty()
+ aspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-1")
+ aspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 4})
+ bspans := expectedTraces.ResourceSpans().AppendEmpty()
+ bspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-2")
+ bspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 2})
+ cspans := expectedTraces.ResourceSpans().AppendEmpty()
+ cspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-3")
+ cspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 3})
+
+ trace1 := ptrace.NewTraces()
+ trace1.ResourceSpans().EnsureCapacity(2)
+ t1aspans := trace1.ResourceSpans().AppendEmpty()
+ t1aspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-1")
+ t1aspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 4})
+ t1bspans := trace1.ResourceSpans().AppendEmpty()
+ t1bspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-2")
+ t1bspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 2})
+
+ trace2 := ptrace.NewTraces()
+ trace2.ResourceSpans().EnsureCapacity(1)
+ t2cspans := trace2.ResourceSpans().AppendEmpty()
+ t2cspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-3")
+ t2cspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 3})
+
+ mergedTraces := mergeTraces(trace1, trace2)
+
+ require.Equal(t, expectedTraces, mergedTraces)
+}
+
+func TestMergeMetricsTwoEmpty(t *testing.T) {
+ expectedEmpty := pmetric.NewMetrics()
+ metric1 := pmetric.NewMetrics()
+ metric2 := pmetric.NewMetrics()
+
+ mergedMetrics := mergeMetrics(metric1, metric2)
+
+ require.Equal(t, expectedEmpty, mergedMetrics)
+}
+
+func TestMergeMetricsSingleEmpty(t *testing.T) {
+ expectedMetrics := simpleMetricsWithResource()
+
+ metric1 := pmetric.NewMetrics()
+ metric2 := simpleMetricsWithResource()
+
+ mergedMetrics := mergeMetrics(metric1, metric2)
+
+ require.Equal(t, expectedMetrics, mergedMetrics)
+}
+
+func TestMergeMetrics(t *testing.T) {
+ expectedMetrics := pmetric.NewMetrics()
+ expectedMetrics.ResourceMetrics().EnsureCapacity(3)
+ ametrics := expectedMetrics.ResourceMetrics().AppendEmpty()
+ ametrics.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-1")
+ ametrics.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty().SetName("m1")
+ bmetrics := expectedMetrics.ResourceMetrics().AppendEmpty()
+ bmetrics.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-2")
+ bmetrics.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty().SetName("m1")
+ cmetrics := expectedMetrics.ResourceMetrics().AppendEmpty()
+ cmetrics.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-3")
+ cmetrics.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty().SetName("m2")
+
+ metric1 := pmetric.NewMetrics()
+ metric1.ResourceMetrics().EnsureCapacity(2)
+ m1ametrics := metric1.ResourceMetrics().AppendEmpty()
+ m1ametrics.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-1")
+ m1ametrics.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty().SetName("m1")
+ m1bmetrics := metric1.ResourceMetrics().AppendEmpty()
+ m1bmetrics.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-2")
+ m1bmetrics.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty().SetName("m1")
+
+ metric2 := pmetric.NewMetrics()
+ metric2.ResourceMetrics().EnsureCapacity(1)
+ m2cmetrics := metric2.ResourceMetrics().AppendEmpty()
+ m2cmetrics.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-3")
+ m2cmetrics.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty().SetName("m2")
+
+ mergedMetrics := mergeMetrics(metric1, metric2)
+
+ require.Equal(t, expectedMetrics, mergedMetrics)
+}
+
+func benchMergeTraces(b *testing.B, tracesCount int) {
+ traces1 := ptrace.NewTraces()
+ traces2 := ptrace.NewTraces()
+
+ for i := 0; i < tracesCount; i++ {
+ appendSimpleTraceWithID(traces2.ResourceSpans().AppendEmpty(), [16]byte{1, 2, 3, 4})
+ }
+
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ mergeTraces(traces1, traces2)
+ }
+}
+
+func BenchmarkMergeTraces_X100(b *testing.B) {
+ benchMergeTraces(b, 100)
+}
+
+func BenchmarkMergeTraces_X500(b *testing.B) {
+ benchMergeTraces(b, 500)
+}
+
+func BenchmarkMergeTraces_X1000(b *testing.B) {
+ benchMergeTraces(b, 1000)
+}
+
+func benchMergeMetrics(b *testing.B, metricsCount int) {
+ metrics1 := pmetric.NewMetrics()
+ metrics2 := pmetric.NewMetrics()
+
+ for i := 0; i < metricsCount; i++ {
+ appendSimpleMetricWithID(metrics2.ResourceMetrics().AppendEmpty(), "metrics-2")
+ }
+
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ mergeMetrics(metrics1, metrics2)
+ }
+}
+
+func BenchmarkMergeMetrics_X100(b *testing.B) {
+ benchMergeMetrics(b, 100)
+}
+
+func BenchmarkMergeMetrics_X500(b *testing.B) {
+ benchMergeMetrics(b, 500)
+}
+
+func BenchmarkMergeMetrics_X1000(b *testing.B) {
+ benchMergeMetrics(b, 1000)
+}
diff --git a/exporter/loadbalancingexporter/internal/metadata/generated_status.go b/exporter/loadbalancingexporter/internal/metadata/generated_status.go
index 411eca7c5497..111de6b0d320 100644
--- a/exporter/loadbalancingexporter/internal/metadata/generated_status.go
+++ b/exporter/loadbalancingexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("loadbalancing")
)
const (
- Type = "loadbalancing"
+ MetricsStability = component.StabilityLevelDevelopment
TracesStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
- MetricsStability = component.StabilityLevelDevelopment
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/loadbalancing")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/loadbalancing")
+}
diff --git a/exporter/loadbalancingexporter/loadbalancer.go b/exporter/loadbalancingexporter/loadbalancer.go
index 862111d06c76..2f826ad9bc32 100644
--- a/exporter/loadbalancingexporter/loadbalancer.go
+++ b/exporter/loadbalancingexporter/loadbalancer.go
@@ -24,17 +24,9 @@ var (
errMultipleResolversProvided = errors.New("only one resolver should be specified")
)
-var _ loadBalancer = (*loadBalancerImp)(nil)
-
type componentFactory func(ctx context.Context, endpoint string) (component.Component, error)
-type loadBalancer interface {
- component.Component
- Endpoint(identifier []byte) string
- Exporter(endpoint string) (component.Component, error)
-}
-
-type loadBalancerImp struct {
+type loadBalancer struct {
logger *zap.Logger
host component.Host
@@ -42,17 +34,30 @@ type loadBalancerImp struct {
ring *hashRing
componentFactory componentFactory
- exporters map[string]component.Component
+ exporters map[string]*wrappedExporter
stopped bool
updateLock sync.RWMutex
}
// Create new load balancer
-func newLoadBalancer(params exporter.CreateSettings, cfg component.Config, factory componentFactory) (*loadBalancerImp, error) {
+func newLoadBalancer(params exporter.CreateSettings, cfg component.Config, factory componentFactory) (*loadBalancer, error) {
oCfg := cfg.(*Config)
- if oCfg.Resolver.DNS != nil && oCfg.Resolver.Static != nil {
+ var count = 0
+ if oCfg.Resolver.DNS != nil {
+ count++
+ }
+ if oCfg.Resolver.Static != nil {
+ count++
+ }
+ if oCfg.Resolver.AWSCloudMap != nil {
+ count++
+ }
+ if oCfg.Resolver.K8sSvc != nil {
+ count++
+ }
+ if count > 1 {
return nil, errMultipleResolversProvided
}
@@ -80,7 +85,16 @@ func newLoadBalancer(params exporter.CreateSettings, cfg component.Config, facto
if err != nil {
return nil, err
}
- res, err = newK8sResolver(clt, k8sLogger, oCfg.Resolver.K8sSvc.Service, oCfg.Resolver.K8sSvc.Ports)
+ res, err = newK8sResolver(clt, k8sLogger, oCfg.Resolver.K8sSvc.Service, oCfg.Resolver.K8sSvc.Ports, oCfg.Resolver.K8sSvc.Timeout)
+ if err != nil {
+ return nil, err
+ }
+ }
+
+ if oCfg.Resolver.AWSCloudMap != nil {
+ awsCloudMapLogger := params.Logger.With(zap.String("resolver", "awsCloudMap"))
+ var err error
+ res, err = newCloudMapResolver(awsCloudMapLogger, &oCfg.Resolver.AWSCloudMap.NamespaceName, &oCfg.Resolver.AWSCloudMap.ServiceName, oCfg.Resolver.AWSCloudMap.Port, &oCfg.Resolver.AWSCloudMap.HealthStatus, oCfg.Resolver.AWSCloudMap.Interval, oCfg.Resolver.AWSCloudMap.Timeout)
if err != nil {
return nil, err
}
@@ -90,21 +104,21 @@ func newLoadBalancer(params exporter.CreateSettings, cfg component.Config, facto
return nil, errNoResolver
}
- return &loadBalancerImp{
+ return &loadBalancer{
logger: params.Logger,
res: res,
componentFactory: factory,
- exporters: map[string]component.Component{},
+ exporters: map[string]*wrappedExporter{},
}, nil
}
-func (lb *loadBalancerImp) Start(ctx context.Context, host component.Host) error {
+func (lb *loadBalancer) Start(ctx context.Context, host component.Host) error {
lb.res.onChange(lb.onBackendChanges)
lb.host = host
return lb.res.start(ctx)
}
-func (lb *loadBalancerImp) onBackendChanges(resolved []string) {
+func (lb *loadBalancer) onBackendChanges(resolved []string) {
newRing := newHashRing(resolved)
if !newRing.equal(lb.ring) {
@@ -122,7 +136,7 @@ func (lb *loadBalancerImp) onBackendChanges(resolved []string) {
}
}
-func (lb *loadBalancerImp) addMissingExporters(ctx context.Context, endpoints []string) {
+func (lb *loadBalancer) addMissingExporters(ctx context.Context, endpoints []string) {
for _, endpoint := range endpoints {
endpoint = endpointWithPort(endpoint)
@@ -132,12 +146,12 @@ func (lb *loadBalancerImp) addMissingExporters(ctx context.Context, endpoints []
lb.logger.Error("failed to create new exporter for endpoint", zap.String("endpoint", endpoint), zap.Error(err))
continue
}
-
- if err = exp.Start(ctx, lb.host); err != nil {
+ we := newWrappedExporter(exp)
+ if err = we.Start(ctx, lb.host); err != nil {
lb.logger.Error("failed to start new exporter for endpoint", zap.String("endpoint", endpoint), zap.Error(err))
continue
}
- lb.exporters[endpoint] = exp
+ lb.exporters[endpoint] = we
}
}
}
@@ -149,14 +163,18 @@ func endpointWithPort(endpoint string) string {
return endpoint
}
-func (lb *loadBalancerImp) removeExtraExporters(ctx context.Context, endpoints []string) {
+func (lb *loadBalancer) removeExtraExporters(ctx context.Context, endpoints []string) {
endpointsWithPort := make([]string, len(endpoints))
for i, e := range endpoints {
endpointsWithPort[i] = endpointWithPort(e)
}
for existing := range lb.exporters {
if !endpointFound(existing, endpointsWithPort) {
- _ = lb.exporters[existing].Shutdown(ctx)
+ exp := lb.exporters[existing]
+ // Shutdown the exporter asynchronously to avoid blocking the resolver
+ go func() {
+ _ = exp.Shutdown(ctx)
+ }()
delete(lb.exporters, existing)
}
}
@@ -172,29 +190,25 @@ func endpointFound(endpoint string, endpoints []string) bool {
return false
}
-func (lb *loadBalancerImp) Shutdown(context.Context) error {
+func (lb *loadBalancer) Shutdown(ctx context.Context) error {
+ err := lb.res.shutdown(ctx)
lb.stopped = true
- return nil
+ return err
}
-func (lb *loadBalancerImp) Endpoint(identifier []byte) string {
- lb.updateLock.RLock()
- defer lb.updateLock.RUnlock()
-
- return lb.ring.endpointFor(identifier)
-}
-
-func (lb *loadBalancerImp) Exporter(endpoint string) (component.Component, error) {
+// exporterAndEndpoint returns the exporter and the endpoint for the given identifier.
+func (lb *loadBalancer) exporterAndEndpoint(identifier []byte) (*wrappedExporter, string, error) {
// NOTE: make rolling updates of next tier of collectors work. currently, this may cause
// data loss because the latest batches sent to outdated backend will never find their way out.
// for details: https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/1690
lb.updateLock.RLock()
+ defer lb.updateLock.RUnlock()
+ endpoint := lb.ring.endpointFor(identifier)
exp, found := lb.exporters[endpointWithPort(endpoint)]
- lb.updateLock.RUnlock()
if !found {
// something is really wrong... how come we couldn't find the exporter??
- return nil, fmt.Errorf("couldn't find the exporter for the endpoint %q", endpoint)
+ return nil, "", fmt.Errorf("couldn't find the exporter for the endpoint %q", endpoint)
}
- return exp, nil
+ return exp, endpoint, nil
}
diff --git a/exporter/loadbalancingexporter/loadbalancer_test.go b/exporter/loadbalancingexporter/loadbalancer_test.go
index fbc884ff1863..47816dc482d8 100644
--- a/exporter/loadbalancingexporter/loadbalancer_test.go
+++ b/exporter/loadbalancingexporter/loadbalancer_test.go
@@ -134,9 +134,10 @@ func TestWithDNSResolverNoEndpoints(t *testing.T) {
err = p.Start(context.Background(), componenttest.NewNopHost())
require.NoError(t, err)
+ defer func() { assert.NoError(t, p.Shutdown(context.Background())) }()
// test
- e := p.Endpoint([]byte{128, 128, 0, 0})
+ _, e, _ := p.exporterAndEndpoint([]byte{128, 128, 0, 0})
// verify
assert.Equal(t, "", e)
@@ -200,7 +201,7 @@ func TestLoadBalancerShutdown(t *testing.T) {
func TestOnBackendChanges(t *testing.T) {
// prepare
cfg := simpleConfig()
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockExporter(), nil
}
p, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, componentFactory)
@@ -222,7 +223,7 @@ func TestOnBackendChanges(t *testing.T) {
func TestRemoveExtraExporters(t *testing.T) {
// prepare
cfg := simpleConfig()
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockExporter(), nil
}
p, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, componentFactory)
@@ -243,7 +244,7 @@ func TestRemoveExtraExporters(t *testing.T) {
func TestAddMissingExporters(t *testing.T) {
// prepare
cfg := simpleConfig()
- exporterFactory := exporter.NewFactory("otlp", func() component.Config {
+ exporterFactory := exporter.NewFactory(component.MustNewType("otlp"), func() component.Config {
return &otlpexporter.Config{}
}, exporter.WithTraces(func(
_ context.Context,
@@ -277,7 +278,7 @@ func TestFailedToAddMissingExporters(t *testing.T) {
// prepare
cfg := simpleConfig()
expectedErr := errors.New("some expected error")
- exporterFactory := exporter.NewFactory("otlp", func() component.Config {
+ exporterFactory := exporter.NewFactory(component.MustNewType("otlp"), func() component.Config {
return &otlpexporter.Config{}
}, exporter.WithTraces(func(
_ context.Context,
@@ -354,7 +355,7 @@ func TestFailedExporterInRing(t *testing.T) {
Static: &StaticResolver{Hostnames: []string{"endpoint-1", "endpoint-2"}},
},
}
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockExporter(), nil
}
p, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, componentFactory)
@@ -376,19 +377,56 @@ func TestFailedExporterInRing(t *testing.T) {
// test
// this trace ID will reach the endpoint-2 -- see the consistent hashing tests for more info
- _, err = p.Exporter(p.Endpoint([]byte{128, 128, 0, 0}))
+ _, _, err = p.exporterAndEndpoint([]byte{128, 128, 0, 0})
// verify
assert.Error(t, err)
// test
// this service name will reach the endpoint-2 -- see the consistent hashing tests for more info
- _, err = p.Exporter(p.Endpoint([]byte("get-recommendations-1")))
+ _, _, err = p.exporterAndEndpoint([]byte("get-recommendations-1"))
// verify
assert.Error(t, err)
}
-func newNopMockExporter() component.Component {
- return mockComponent{}
+func TestNewLoadBalancerInvalidNamespaceAwsResolver(t *testing.T) {
+ // prepare
+ cfg := &Config{
+ Resolver: ResolverSettings{
+ AWSCloudMap: &AWSCloudMapResolver{
+ NamespaceName: "",
+ },
+ },
+ }
+
+ // test
+ p, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, nil)
+
+ // verify
+ assert.Nil(t, p)
+ assert.True(t, clientcmd.IsConfigurationInvalid(err) || errors.Is(err, errNoNamespace))
+}
+
+func TestNewLoadBalancerInvalidServiceAwsResolver(t *testing.T) {
+ // prepare
+ cfg := &Config{
+ Resolver: ResolverSettings{
+ AWSCloudMap: &AWSCloudMapResolver{
+ NamespaceName: "cloudmap",
+ ServiceName: "",
+ },
+ },
+ }
+
+ // test
+ p, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, nil)
+
+ // verify
+ assert.Nil(t, p)
+ assert.True(t, clientcmd.IsConfigurationInvalid(err) || errors.Is(err, errNoServiceName))
+}
+
+func newNopMockExporter() *wrappedExporter {
+ return newWrappedExporter(mockComponent{})
}
diff --git a/exporter/loadbalancingexporter/log_exporter.go b/exporter/loadbalancingexporter/log_exporter.go
index 6cfe82edca65..9b79bdc439dc 100644
--- a/exporter/loadbalancingexporter/log_exporter.go
+++ b/exporter/loadbalancingexporter/log_exporter.go
@@ -5,7 +5,6 @@ package loadbalancingexporter // import "github.com/open-telemetry/opentelemetry
import (
"context"
- "fmt"
"math/rand"
"sync"
"time"
@@ -26,7 +25,7 @@ import (
var _ exporter.Logs = (*logExporterImp)(nil)
type logExporterImp struct {
- loadBalancer loadBalancer
+ loadBalancer *loadBalancer
started bool
shutdownWg sync.WaitGroup
@@ -58,13 +57,14 @@ func (e *logExporterImp) Start(ctx context.Context, host component.Host) error {
return e.loadBalancer.Start(ctx, host)
}
-func (e *logExporterImp) Shutdown(context.Context) error {
+func (e *logExporterImp) Shutdown(ctx context.Context) error {
if !e.started {
return nil
}
+ err := e.loadBalancer.Shutdown(ctx)
e.started = false
e.shutdownWg.Wait()
- return nil
+ return err
}
func (e *logExporterImp) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
@@ -87,16 +87,13 @@ func (e *logExporterImp) consumeLog(ctx context.Context, ld plog.Logs) error {
balancingKey = random()
}
- endpoint := e.loadBalancer.Endpoint(balancingKey[:])
- exp, err := e.loadBalancer.Exporter(endpoint)
+ le, endpoint, err := e.loadBalancer.exporterAndEndpoint(balancingKey[:])
if err != nil {
return err
}
- le, ok := exp.(exporter.Logs)
- if !ok {
- return fmt.Errorf("unable to export logs, unexpected exporter type: expected exporter.Logs but got %T", exp)
- }
+ le.consumeWG.Add(1)
+ defer le.consumeWG.Done()
start := time.Now()
err = le.ConsumeLogs(ctx, ld)
diff --git a/exporter/loadbalancingexporter/log_exporter_test.go b/exporter/loadbalancingexporter/log_exporter_test.go
index 30694a5a4235..82ee460f6427 100644
--- a/exporter/loadbalancingexporter/log_exporter_test.go
+++ b/exporter/loadbalancingexporter/log_exporter_test.go
@@ -114,7 +114,7 @@ func TestLogExporterShutdown(t *testing.T) {
}
func TestConsumeLogs(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockLogsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -129,7 +129,7 @@ func TestConsumeLogs(t *testing.T) {
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return []string{"endpoint-1"}, nil
},
}
@@ -149,7 +149,7 @@ func TestConsumeLogs(t *testing.T) {
}
func TestConsumeLogsUnexpectedExporterType(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -164,7 +164,7 @@ func TestConsumeLogsUnexpectedExporterType(t *testing.T) {
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return []string{"endpoint-1"}, nil
},
}
@@ -186,7 +186,7 @@ func TestConsumeLogsUnexpectedExporterType(t *testing.T) {
func TestLogBatchWithTwoTraces(t *testing.T) {
sink := new(consumertest.LogsSink)
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newMockLogsExporter(sink.ConsumeLogs), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -258,7 +258,7 @@ func TestNoLogsInBatch(t *testing.T) {
func TestLogsWithoutTraceID(t *testing.T) {
sink := new(consumertest.LogsSink)
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newMockLogsExporter(sink.ConsumeLogs), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -287,6 +287,58 @@ func TestLogsWithoutTraceID(t *testing.T) {
assert.Len(t, sink.AllLogs(), 1)
}
+// this test validates that exporter is can concurrently change the endpoints while consuming logs.
+func TestConsumeLogs_ConcurrentResolverChange(t *testing.T) {
+ consumeStarted := make(chan struct{})
+ consumeDone := make(chan struct{})
+
+ // imitate a slow exporter
+ te := &mockLogsExporter{Component: mockComponent{}}
+ te.consumelogsfn = func(_ context.Context, _ plog.Logs) error {
+ close(consumeStarted)
+ time.Sleep(50 * time.Millisecond)
+ return te.consumeErr
+ }
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
+ return te, nil
+ }
+ lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
+ require.NotNil(t, lb)
+ require.NoError(t, err)
+
+ p, err := newLogsExporter(exportertest.NewNopCreateSettings(), simpleConfig())
+ require.NotNil(t, p)
+ require.NoError(t, err)
+
+ endpoints := []string{"endpoint-1"}
+ lb.res = &mockResolver{
+ triggerCallbacks: true,
+ onResolve: func(_ context.Context) ([]string, error) {
+ return endpoints, nil
+ },
+ }
+ p.loadBalancer = lb
+
+ err = p.Start(context.Background(), componenttest.NewNopHost())
+ require.NoError(t, err)
+ defer func() {
+ require.NoError(t, p.Shutdown(context.Background()))
+ }()
+
+ go func() {
+ assert.NoError(t, p.ConsumeLogs(context.Background(), simpleLogs()))
+ close(consumeDone)
+ }()
+
+ // update endpoint while consuming logs
+ <-consumeStarted
+ endpoints = []string{"endpoint-2"}
+ endpoint, err := lb.res.resolve(context.Background())
+ require.NoError(t, err)
+ require.Equal(t, endpoints, endpoint)
+ <-consumeDone
+}
+
func TestRollingUpdatesWhenConsumeLogs(t *testing.T) {
t.Skip("Flaky Test - See https://github.com/open-telemetry/opentelemetry-collector-contrib/issues/13331")
@@ -344,7 +396,7 @@ func TestRollingUpdatesWhenConsumeLogs(t *testing.T) {
DNS: &DNSResolver{Hostname: "service-1", Port: ""},
},
}
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockLogsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, componentFactory)
@@ -360,19 +412,17 @@ func TestRollingUpdatesWhenConsumeLogs(t *testing.T) {
counter1 := &atomic.Int64{}
counter2 := &atomic.Int64{}
- defaultExporters := map[string]component.Component{
- "127.0.0.1:4317": newMockLogsExporter(func(ctx context.Context, ld plog.Logs) error {
+ defaultExporters := map[string]*wrappedExporter{
+ "127.0.0.1:4317": newWrappedExporter(newMockLogsExporter(func(_ context.Context, _ plog.Logs) error {
counter1.Add(1)
// simulate an unreachable backend
time.Sleep(10 * time.Second)
return nil
- },
- ),
- "127.0.0.2:4317": newMockLogsExporter(func(ctx context.Context, ld plog.Logs) error {
+ })),
+ "127.0.0.2:4317": newWrappedExporter(newMockLogsExporter(func(_ context.Context, _ plog.Logs) error {
counter2.Add(1)
return nil
- },
- ),
+ })),
}
// test
@@ -385,7 +435,7 @@ func TestRollingUpdatesWhenConsumeLogs(t *testing.T) {
lb.updateLock.Lock()
lb.exporters = defaultExporters
lb.updateLock.Unlock()
- lb.res.onChange(func(endpoints []string) {
+ lb.res.onChange(func(_ []string) {
lb.updateLock.Lock()
lb.exporters = defaultExporters
lb.updateLock.Unlock()
@@ -458,15 +508,21 @@ func simpleLogWithoutID() plog.Logs {
type mockLogsExporter struct {
component.Component
consumelogsfn func(ctx context.Context, ld plog.Logs) error
+ consumeErr error
}
func (e *mockLogsExporter) Capabilities() consumer.Capabilities {
return consumer.Capabilities{MutatesData: false}
}
+func (e *mockLogsExporter) Shutdown(context.Context) error {
+ e.consumeErr = errors.New("exporter is shut down")
+ return nil
+}
+
func (e *mockLogsExporter) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
if e.consumelogsfn == nil {
- return nil
+ return e.consumeErr
}
return e.consumelogsfn(ctx, ld)
}
@@ -484,10 +540,5 @@ func newMockLogsExporter(consumelogsfn func(ctx context.Context, ld plog.Logs) e
}
func newNopMockLogsExporter() exporter.Logs {
- return &mockLogsExporter{
- Component: mockComponent{},
- consumelogsfn: func(ctx context.Context, ld plog.Logs) error {
- return nil
- },
- }
+ return &mockLogsExporter{Component: mockComponent{}}
}
diff --git a/exporter/loadbalancingexporter/metadata.yaml b/exporter/loadbalancingexporter/metadata.yaml
index 7d8166ab7d41..9918ca0e9bd8 100644
--- a/exporter/loadbalancingexporter/metadata.yaml
+++ b/exporter/loadbalancingexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: loadbalancing
+scope_name: otelcol/loadbalancing
status:
class: exporter
@@ -7,9 +8,20 @@ status:
development: [metrics]
distributions:
- contrib
- - grafana
- - observiq
- - sumo
- - aws
codeowners:
active: [jpkrohling]
+
+tests:
+ config:
+ routing_key: "service"
+ protocol:
+ otlp:
+ timeout: 1s
+ resolver:
+ static:
+ hostnames:
+ - backend-1:4317
+ - backend-2:4317
+ - backend-3:4317
+ - backend-4:4317
+ expect_consumer_error: true
diff --git a/exporter/loadbalancingexporter/metrics_exporter.go b/exporter/loadbalancingexporter/metrics_exporter.go
index f036bbd5cb20..9210723227d8 100644
--- a/exporter/loadbalancingexporter/metrics_exporter.go
+++ b/exporter/loadbalancingexporter/metrics_exporter.go
@@ -28,8 +28,10 @@ import (
var _ exporter.Metrics = (*metricExporterImp)(nil)
+type exporterMetrics map[*wrappedExporter]pmetric.Metrics
+
type metricExporterImp struct {
- loadBalancer loadBalancer
+ loadBalancer *loadBalancer
routingKey routingKey
stopped bool
@@ -72,58 +74,65 @@ func (e *metricExporterImp) Start(ctx context.Context, host component.Host) erro
return e.loadBalancer.Start(ctx, host)
}
-func (e *metricExporterImp) Shutdown(context.Context) error {
+func (e *metricExporterImp) Shutdown(ctx context.Context) error {
+ err := e.loadBalancer.Shutdown(ctx)
e.stopped = true
e.shutdownWg.Wait()
- return nil
+ return err
}
func (e *metricExporterImp) ConsumeMetrics(ctx context.Context, md pmetric.Metrics) error {
- var errs error
batches := batchpersignal.SplitMetrics(md)
- for _, batch := range batches {
- errs = multierr.Append(errs, e.consumeMetric(ctx, batch))
- }
- return errs
-}
+ exporterSegregatedMetrics := make(exporterMetrics)
+ endpoints := make(map[*wrappedExporter]string)
-func (e *metricExporterImp) consumeMetric(ctx context.Context, md pmetric.Metrics) error {
- var exp component.Component
- routingIds, err := routingIdentifiersFromMetrics(md, e.routingKey)
- if err != nil {
- return err
- }
- for rid := range routingIds {
- endpoint := e.loadBalancer.Endpoint([]byte(rid))
- exp, err = e.loadBalancer.Exporter(endpoint)
+ for _, batch := range batches {
+ routingIDs, err := routingIdentifiersFromMetrics(batch, e.routingKey)
if err != nil {
return err
}
- te, ok := exp.(exporter.Metrics)
- if !ok {
- return fmt.Errorf("unable to export metrics, unexpected exporter type: expected exporter.Metrics but got %T", exp)
+ for rid := range routingIDs {
+ exp, endpoint, err := e.loadBalancer.exporterAndEndpoint([]byte(rid))
+ if err != nil {
+ return err
+ }
+
+ _, ok := exporterSegregatedMetrics[exp]
+ if !ok {
+ exp.consumeWG.Add(1)
+ exporterSegregatedMetrics[exp] = pmetric.NewMetrics()
+ }
+ exporterSegregatedMetrics[exp] = mergeMetrics(exporterSegregatedMetrics[exp], batch)
+
+ endpoints[exp] = endpoint
}
+ }
+
+ var errs error
+ for exp, metrics := range exporterSegregatedMetrics {
start := time.Now()
- err = te.ConsumeMetrics(ctx, md)
+ err := exp.ConsumeMetrics(ctx, metrics)
+ exp.consumeWG.Done()
duration := time.Since(start)
+ errs = multierr.Append(errs, err)
if err == nil {
_ = stats.RecordWithTags(
ctx,
- []tag.Mutator{tag.Upsert(endpointTagKey, endpoint), successTrueMutator},
+ []tag.Mutator{tag.Upsert(endpointTagKey, endpoints[exp]), successTrueMutator},
mBackendLatency.M(duration.Milliseconds()))
} else {
_ = stats.RecordWithTags(
ctx,
- []tag.Mutator{tag.Upsert(endpointTagKey, endpoint), successFalseMutator},
+ []tag.Mutator{tag.Upsert(endpointTagKey, endpoints[exp]), successFalseMutator},
mBackendLatency.M(duration.Milliseconds()))
}
}
- return err
+ return errs
}
func routingIdentifiersFromMetrics(mds pmetric.Metrics, key routingKey) (map[string]bool, error) {
diff --git a/exporter/loadbalancingexporter/metrics_exporter_test.go b/exporter/loadbalancingexporter/metrics_exporter_test.go
index 510a1cac31de..fb2e319c2abc 100644
--- a/exporter/loadbalancingexporter/metrics_exporter_test.go
+++ b/exporter/loadbalancingexporter/metrics_exporter_test.go
@@ -163,7 +163,7 @@ func TestMetricsExporterShutdown(t *testing.T) {
}
func TestConsumeMetrics(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockMetricsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), serviceBasedRoutingConfig(), componentFactory)
@@ -176,11 +176,11 @@ func TestConsumeMetrics(t *testing.T) {
assert.Equal(t, p.routingKey, svcRouting)
// pre-load an exporter here, so that we don't use the actual OTLP exporter
- lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
+ lb.addMissingExporters(context.Background(), []string{"endpoint-1", "endpoint-2"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
- return []string{"endpoint-1"}, nil
+ onResolve: func(_ context.Context) ([]string, error) {
+ return []string{"endpoint-1", "endpoint-2"}, nil
},
}
p.loadBalancer = lb
@@ -199,8 +199,60 @@ func TestConsumeMetrics(t *testing.T) {
}
+// this test validates that exporter is can concurrently change the endpoints while consuming metrics.
+func TestConsumeMetrics_ConcurrentResolverChange(t *testing.T) {
+ consumeStarted := make(chan struct{})
+ consumeDone := make(chan struct{})
+
+ // imitate a slow exporter
+ te := &mockMetricsExporter{Component: mockComponent{}}
+ te.ConsumeMetricsFn = func(_ context.Context, _ pmetric.Metrics) error {
+ close(consumeStarted)
+ time.Sleep(50 * time.Millisecond)
+ return te.consumeErr
+ }
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
+ return te, nil
+ }
+ lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
+ require.NotNil(t, lb)
+ require.NoError(t, err)
+
+ p, err := newMetricsExporter(exportertest.NewNopCreateSettings(), simpleConfig())
+ require.NotNil(t, p)
+ require.NoError(t, err)
+
+ endpoints := []string{"endpoint-1"}
+ lb.res = &mockResolver{
+ triggerCallbacks: true,
+ onResolve: func(_ context.Context) ([]string, error) {
+ return endpoints, nil
+ },
+ }
+ p.loadBalancer = lb
+
+ err = p.Start(context.Background(), componenttest.NewNopHost())
+ require.NoError(t, err)
+ defer func() {
+ require.NoError(t, p.Shutdown(context.Background()))
+ }()
+
+ go func() {
+ assert.NoError(t, p.ConsumeMetrics(context.Background(), simpleMetricsWithResource()))
+ close(consumeDone)
+ }()
+
+ // update endpoint while consuming logs
+ <-consumeStarted
+ endpoints = []string{"endpoint-2"}
+ endpoint, err := lb.res.resolve(context.Background())
+ require.NoError(t, err)
+ require.Equal(t, endpoints, endpoint)
+ <-consumeDone
+}
+
func TestConsumeMetricsServiceBased(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockMetricsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), serviceBasedRoutingConfig(), componentFactory)
@@ -216,7 +268,7 @@ func TestConsumeMetricsServiceBased(t *testing.T) {
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return []string{"endpoint-1"}, nil
},
}
@@ -236,7 +288,7 @@ func TestConsumeMetricsServiceBased(t *testing.T) {
}
func TestConsumeMetricsResourceBased(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockMetricsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), resourceBasedRoutingConfig(), componentFactory)
@@ -252,7 +304,7 @@ func TestConsumeMetricsResourceBased(t *testing.T) {
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return []string{"endpoint-1"}, nil
},
}
@@ -272,7 +324,7 @@ func TestConsumeMetricsResourceBased(t *testing.T) {
}
func TestConsumeMetricsMetricNameBased(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockMetricsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), metricNameBasedRoutingConfig(), componentFactory)
@@ -288,7 +340,7 @@ func TestConsumeMetricsMetricNameBased(t *testing.T) {
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return []string{"endpoint-1"}, nil
},
}
@@ -331,7 +383,7 @@ func TestServiceBasedRoutingForSameMetricName(t *testing.T) {
}
func TestConsumeMetricsExporterNoEndpoint(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockMetricsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), serviceBasedRoutingConfig(), componentFactory)
@@ -344,7 +396,7 @@ func TestConsumeMetricsExporterNoEndpoint(t *testing.T) {
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return nil, nil
},
}
@@ -365,7 +417,7 @@ func TestConsumeMetricsExporterNoEndpoint(t *testing.T) {
}
func TestConsumeMetricsUnexpectedExporterType(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), serviceBasedRoutingConfig(), componentFactory)
@@ -378,10 +430,11 @@ func TestConsumeMetricsUnexpectedExporterType(t *testing.T) {
// pre-load an exporter here, so that we don't use the actual OTLP exporter
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
+ lb.addMissingExporters(context.Background(), []string{"endpoint-2"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
- return []string{"endpoint-1"}, nil
+ onResolve: func(_ context.Context) ([]string, error) {
+ return []string{"endpoint-1", "endpoint-2"}, nil
},
}
p.loadBalancer = lb
@@ -419,18 +472,18 @@ func TestBuildExporterConfigUnknown(t *testing.T) {
exporterCfg := buildExporterConfig(c.(*Config), "the-endpoint")
// verify
- grpcSettings := defaultCfg.GRPCClientSettings
+ grpcSettings := defaultCfg.ClientConfig
grpcSettings.Endpoint = "the-endpoint"
- assert.Equal(t, grpcSettings, exporterCfg.GRPCClientSettings)
+ assert.Equal(t, grpcSettings, exporterCfg.ClientConfig)
assert.Equal(t, defaultCfg.TimeoutSettings, exporterCfg.TimeoutSettings)
- assert.Equal(t, defaultCfg.QueueSettings, exporterCfg.QueueSettings)
- assert.Equal(t, defaultCfg.RetrySettings, exporterCfg.RetrySettings)
+ assert.Equal(t, defaultCfg.QueueConfig, exporterCfg.QueueConfig)
+ assert.Equal(t, defaultCfg.RetryConfig, exporterCfg.RetryConfig)
}
func TestBatchWithTwoMetrics(t *testing.T) {
sink := new(consumertest.MetricsSink)
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newMockMetricsExporter(sink.ConsumeMetrics), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), serviceBasedRoutingConfig(), componentFactory)
@@ -592,7 +645,7 @@ func TestRollingUpdatesWhenConsumeMetrics(t *testing.T) {
DNS: &DNSResolver{Hostname: "service-1", Port: ""},
},
}
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockMetricsExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, componentFactory)
@@ -608,19 +661,17 @@ func TestRollingUpdatesWhenConsumeMetrics(t *testing.T) {
counter1 := &atomic.Int64{}
counter2 := &atomic.Int64{}
- defaultExporters := map[string]component.Component{
- "127.0.0.1:4317": newMockMetricsExporter(func(ctx context.Context, td pmetric.Metrics) error {
+ defaultExporters := map[string]*wrappedExporter{
+ "127.0.0.1:4317": newWrappedExporter(newMockMetricsExporter(func(_ context.Context, _ pmetric.Metrics) error {
counter1.Add(1)
// simulate an unreachable backend
time.Sleep(10 * time.Second)
return nil
- },
- ),
- "127.0.0.2:4317": newMockMetricsExporter(func(ctx context.Context, td pmetric.Metrics) error {
+ })),
+ "127.0.0.2:4317": newWrappedExporter(newMockMetricsExporter(func(_ context.Context, _ pmetric.Metrics) error {
counter2.Add(1)
return nil
- },
- ),
+ })),
}
// test
@@ -633,7 +684,7 @@ func TestRollingUpdatesWhenConsumeMetrics(t *testing.T) {
lb.updateLock.Lock()
lb.exporters = defaultExporters
lb.updateLock.Unlock()
- lb.res.onChange(func(endpoints []string) {
+ lb.res.onChange(func(_ []string) {
lb.updateLock.Lock()
lb.exporters = defaultExporters
lb.updateLock.Unlock()
@@ -677,10 +728,101 @@ func TestRollingUpdatesWhenConsumeMetrics(t *testing.T) {
require.Greater(t, counter2.Load(), int64(0))
}
+func appendSimpleMetricWithServiceName(metric pmetric.Metrics, serviceName string, sigName string) {
+ metric.ResourceMetrics().EnsureCapacity(1)
+ rmetrics := metric.ResourceMetrics().AppendEmpty()
+ rmetrics.Resource().Attributes().PutStr(conventions.AttributeServiceName, serviceName)
+ rmetrics.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty().SetName(sigName)
+}
+
+func benchConsumeMetrics(b *testing.B, endpointsCount int, metricsCount int) {
+ sink := new(consumertest.MetricsSink)
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
+ return newMockMetricsExporter(sink.ConsumeMetrics), nil
+ }
+
+ endpoints := []string{}
+ for i := 0; i < endpointsCount; i++ {
+ endpoints = append(endpoints, fmt.Sprintf("endpoint-%d", i))
+ }
+
+ config := &Config{
+ Resolver: ResolverSettings{
+ Static: &StaticResolver{Hostnames: endpoints},
+ },
+ }
+
+ lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), config, componentFactory)
+ require.NotNil(b, lb)
+ require.NoError(b, err)
+
+ p, err := newMetricsExporter(exportertest.NewNopCreateSettings(), config)
+ require.NotNil(b, p)
+ require.NoError(b, err)
+
+ p.loadBalancer = lb
+
+ err = p.Start(context.Background(), componenttest.NewNopHost())
+ require.NoError(b, err)
+
+ metric1 := pmetric.NewMetrics()
+ metric2 := pmetric.NewMetrics()
+ for i := 0; i < endpointsCount; i++ {
+ for j := 0; j < metricsCount/endpointsCount; j++ {
+ appendSimpleMetricWithServiceName(metric2, fmt.Sprintf("service-%d", i), fmt.Sprintf("sig-%d", i))
+ }
+ }
+ simpleMetricsWithServiceName()
+ md := mergeMetrics(metric1, metric2)
+
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ err = p.ConsumeMetrics(context.Background(), md)
+ require.NoError(b, err)
+ }
+
+ b.StopTimer()
+ err = p.Shutdown(context.Background())
+ require.NoError(b, err)
+}
+
+func BenchmarkConsumeMetrics_1E100T(b *testing.B) {
+ benchConsumeMetrics(b, 1, 100)
+}
+
+func BenchmarkConsumeMetrics_1E1000T(b *testing.B) {
+ benchConsumeMetrics(b, 1, 1000)
+}
+
+func BenchmarkConsumeMetrics_5E100T(b *testing.B) {
+ benchConsumeMetrics(b, 5, 100)
+}
+
+func BenchmarkConsumeMetrics_5E500T(b *testing.B) {
+ benchConsumeMetrics(b, 5, 500)
+}
+
+func BenchmarkConsumeMetrics_5E1000T(b *testing.B) {
+ benchConsumeMetrics(b, 5, 1000)
+}
+
+func BenchmarkConsumeMetrics_10E100T(b *testing.B) {
+ benchConsumeMetrics(b, 10, 100)
+}
+
+func BenchmarkConsumeMetrics_10E500T(b *testing.B) {
+ benchConsumeMetrics(b, 10, 500)
+}
+
+func BenchmarkConsumeMetrics_10E1000T(b *testing.B) {
+ benchConsumeMetrics(b, 10, 1000)
+}
+
func endpoint2Config() *Config {
return &Config{
Resolver: ResolverSettings{
- Static: &StaticResolver{Hostnames: []string{"endpoint-2"}},
+ Static: &StaticResolver{Hostnames: []string{"endpoint-1", "endpoint-2"}},
},
RoutingKey: "service",
}
@@ -689,7 +831,7 @@ func endpoint2Config() *Config {
func resourceBasedRoutingConfig() *Config {
return &Config{
Resolver: ResolverSettings{
- Static: &StaticResolver{Hostnames: []string{"endpoint-1"}},
+ Static: &StaticResolver{Hostnames: []string{"endpoint-1", "endpoint-2"}},
},
RoutingKey: resourceRouteKey,
}
@@ -698,7 +840,7 @@ func resourceBasedRoutingConfig() *Config {
func metricNameBasedRoutingConfig() *Config {
return &Config{
Resolver: ResolverSettings{
- Static: &StaticResolver{Hostnames: []string{"endpoint-1"}},
+ Static: &StaticResolver{Hostnames: []string{"endpoint-1", "endpoint-2"}},
},
RoutingKey: metricRouteKey,
}
@@ -728,7 +870,6 @@ func simpleMetricsWithServiceName() pmetric.Metrics {
}
func simpleMetricsWithResource() pmetric.Metrics {
-
metrics := pmetric.NewMetrics()
metrics.ResourceMetrics().EnsureCapacity(1)
rmetrics := metrics.ResourceMetrics().AppendEmpty()
@@ -758,6 +899,7 @@ func appendSimpleMetricWithID(dest pmetric.ResourceMetrics, id string) {
type mockMetricsExporter struct {
component.Component
ConsumeMetricsFn func(ctx context.Context, td pmetric.Metrics) error
+ consumeErr error
}
func newMockMetricsExporter(consumeMetricsFn func(ctx context.Context, td pmetric.Metrics) error) exporter.Metrics {
@@ -768,21 +910,21 @@ func newMockMetricsExporter(consumeMetricsFn func(ctx context.Context, td pmetri
}
func newNopMockMetricsExporter() exporter.Metrics {
- return &mockMetricsExporter{
- Component: mockComponent{},
- ConsumeMetricsFn: func(ctx context.Context, md pmetric.Metrics) error {
- return nil
- },
- }
+ return &mockMetricsExporter{Component: mockComponent{}}
}
func (e *mockMetricsExporter) Capabilities() consumer.Capabilities {
return consumer.Capabilities{MutatesData: false}
}
+func (e *mockMetricsExporter) Shutdown(context.Context) error {
+ e.consumeErr = errors.New("exporter is shut down")
+ return nil
+}
+
func (e *mockMetricsExporter) ConsumeMetrics(ctx context.Context, md pmetric.Metrics) error {
if e.ConsumeMetricsFn == nil {
- return nil
+ return e.consumeErr
}
return e.ConsumeMetricsFn(ctx, md)
}
diff --git a/exporter/loadbalancingexporter/package_test.go b/exporter/loadbalancingexporter/package_test.go
new file mode 100644
index 000000000000..4e898c447576
--- /dev/null
+++ b/exporter/loadbalancingexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package loadbalancingexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/loadbalancingexporter/resolver_aws_cloudmap.go b/exporter/loadbalancingexporter/resolver_aws_cloudmap.go
new file mode 100644
index 000000000000..21d14107013f
--- /dev/null
+++ b/exporter/loadbalancingexporter/resolver_aws_cloudmap.go
@@ -0,0 +1,219 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package loadbalancingexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter"
+
+import (
+ "context"
+ "errors"
+ "fmt"
+ "log"
+ "sort"
+ "sync"
+ "time"
+
+ "github.com/aws/aws-sdk-go-v2/config"
+ "github.com/aws/aws-sdk-go-v2/service/servicediscovery"
+ "github.com/aws/aws-sdk-go-v2/service/servicediscovery/types"
+ "go.opencensus.io/stats"
+ "go.opencensus.io/tag"
+ "go.uber.org/zap"
+)
+
+const (
+ defaultAwsResInterval = 30 * time.Second
+ defaultAwsResTimeout = 5 * time.Second
+)
+
+var (
+ errNoNamespace = errors.New("no Cloud Map namespace specified to resolve the backends")
+ errNoServiceName = errors.New("no Cloud Map serviceName specified to resolve the backends")
+
+ awsResolverMutator = tag.Upsert(tag.MustNewKey("resolver"), "aws")
+
+ awsResolverSuccessTrueMutators = []tag.Mutator{awsResolverMutator, successTrueMutator}
+ awsResolverSuccessFalseMutators = []tag.Mutator{awsResolverMutator, successFalseMutator}
+)
+
+func createDiscoveryFunction(client *servicediscovery.Client) func(params *servicediscovery.DiscoverInstancesInput) (*servicediscovery.DiscoverInstancesOutput, error) {
+ return func(params *servicediscovery.DiscoverInstancesInput) (*servicediscovery.DiscoverInstancesOutput, error) {
+ return client.DiscoverInstances(context.TODO(), params)
+ }
+}
+
+type cloudMapResolver struct {
+ logger *zap.Logger
+
+ namespaceName *string
+ serviceName *string
+ port *uint16
+ healthStatus *types.HealthStatusFilter
+ resInterval time.Duration
+ resTimeout time.Duration
+
+ endpoints []string
+ onChangeCallbacks []func([]string)
+
+ stopCh chan struct{}
+ updateLock sync.Mutex
+ shutdownWg sync.WaitGroup
+ changeCallbackLock sync.RWMutex
+ discoveryFn func(params *servicediscovery.DiscoverInstancesInput) (*servicediscovery.DiscoverInstancesOutput, error)
+}
+
+func newCloudMapResolver(logger *zap.Logger, namespaceName *string, serviceName *string, port *uint16, healthStatus *types.HealthStatusFilter, interval time.Duration, timeout time.Duration) (*cloudMapResolver, error) {
+ // Using the SDK's default configuration, loading additional config
+ // and credentials values from the environment variables, shared
+ // credentials, and shared configuration files
+ cfg, err := config.LoadDefaultConfig(context.TODO(), config.WithDefaultRegion("us-east-1"))
+ if err != nil {
+ log.Fatalf("unable to load SDK config, %v", err)
+ return nil, err
+ }
+
+ // Using the Config value, create the DynamoDB client
+ svc := servicediscovery.NewFromConfig(cfg)
+
+ if namespaceName == nil || len(*namespaceName) == 0 {
+ return nil, errNoNamespace
+ }
+
+ if serviceName == nil || len(*serviceName) == 0 {
+ return nil, errNoServiceName
+ }
+
+ if interval == 0 {
+ interval = defaultAwsResInterval
+ }
+ if timeout == 0 {
+ timeout = defaultAwsResTimeout
+ }
+
+ if healthStatus == nil {
+ var healthStatusFilter = types.HealthStatusFilterHealthy
+ healthStatus = &healthStatusFilter
+ }
+
+ return &cloudMapResolver{
+ logger: logger,
+ namespaceName: namespaceName,
+ serviceName: serviceName,
+ port: port,
+ healthStatus: healthStatus,
+ resInterval: interval,
+ resTimeout: timeout,
+ stopCh: make(chan struct{}),
+ discoveryFn: createDiscoveryFunction(svc),
+ }, nil
+}
+
+func (r *cloudMapResolver) start(ctx context.Context) error {
+ if _, err := r.resolve(ctx); err != nil {
+ r.logger.Warn("failed initial resolve", zap.Error(err))
+ }
+
+ go r.periodicallyResolve()
+
+ r.logger.Info("AWS CloudMap resolver started",
+ zap.Stringp("serviceName", r.serviceName),
+ zap.Stringp("namespaceName", r.namespaceName),
+ zap.Uint16p("port", r.port),
+ zap.String("healthStatus", string(*r.healthStatus)),
+ zap.Duration("interval", r.resInterval), zap.Duration("timeout", r.resTimeout))
+ return nil
+}
+
+func (r *cloudMapResolver) shutdown(_ context.Context) error {
+ r.changeCallbackLock.Lock()
+ r.onChangeCallbacks = nil
+ r.changeCallbackLock.Unlock()
+
+ close(r.stopCh)
+ r.shutdownWg.Wait()
+ return nil
+}
+
+func (r *cloudMapResolver) periodicallyResolve() {
+ ticker := time.NewTicker(r.resInterval)
+
+ for {
+ select {
+ case <-ticker.C:
+ ctx, cancel := context.WithTimeout(context.Background(), r.resTimeout)
+ if _, err := r.resolve(ctx); err != nil {
+ r.logger.Warn("failed to resolve", zap.Error(err))
+ } else {
+ r.logger.Debug("resolved successfully")
+ }
+ cancel()
+ case <-r.stopCh:
+ return
+ }
+ }
+}
+
+func (r *cloudMapResolver) resolve(ctx context.Context) ([]string, error) {
+ r.shutdownWg.Add(1)
+ defer r.shutdownWg.Done()
+
+ discoverInstancesOutput, err := r.discoveryFn(&servicediscovery.DiscoverInstancesInput{
+ NamespaceName: r.namespaceName,
+ ServiceName: r.serviceName,
+ HealthStatus: *r.healthStatus,
+ MaxResults: nil,
+ OptionalParameters: nil,
+ QueryParameters: nil,
+ })
+ if err != nil {
+ _ = stats.RecordWithTags(ctx, awsResolverSuccessFalseMutators, mNumResolutions.M(1))
+ return nil, err
+ }
+
+ _ = stats.RecordWithTags(ctx, awsResolverSuccessTrueMutators, mNumResolutions.M(1))
+
+ r.logger.Debug("resolver has discovered instances ",
+ zap.Int("Instance Count", len(discoverInstancesOutput.Instances)))
+
+ var backends []string
+ for _, instance := range discoverInstancesOutput.Instances {
+ ipAddr := instance.Attributes["AWS_INSTANCE_IPV4"]
+ var endpoint string
+ if r.port == nil {
+ ipPort := instance.Attributes["AWS_INSTANCE_PORT"]
+ endpoint = fmt.Sprintf("%s:%s", ipAddr, ipPort)
+ } else {
+ endpoint = fmt.Sprintf("%s:%d", ipAddr, *r.port)
+ }
+ r.logger.Debug("resolved instance",
+ zap.String("Endpoint", endpoint))
+ backends = append(backends, endpoint)
+ }
+
+ // keep it always in the same order
+ sort.Strings(backends)
+
+ if equalStringSlice(r.endpoints, backends) {
+ return r.endpoints, nil
+ }
+
+ // the list has changed!
+ r.updateLock.Lock()
+ r.endpoints = backends
+ r.updateLock.Unlock()
+ _ = stats.RecordWithTags(ctx, awsResolverSuccessTrueMutators, mNumBackends.M(int64(len(backends))))
+
+ // propagate the change
+ r.changeCallbackLock.RLock()
+ for _, callback := range r.onChangeCallbacks {
+ callback(r.endpoints)
+ }
+ r.changeCallbackLock.RUnlock()
+
+ return r.endpoints, nil
+}
+
+func (r *cloudMapResolver) onChange(f func([]string)) {
+ r.changeCallbackLock.Lock()
+ defer r.changeCallbackLock.Unlock()
+ r.onChangeCallbacks = append(r.onChangeCallbacks, f)
+}
diff --git a/exporter/loadbalancingexporter/resolver_aws_cloudmap_test.go b/exporter/loadbalancingexporter/resolver_aws_cloudmap_test.go
new file mode 100644
index 000000000000..a236f14bce0b
--- /dev/null
+++ b/exporter/loadbalancingexporter/resolver_aws_cloudmap_test.go
@@ -0,0 +1,112 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package loadbalancingexporter
+
+import (
+ "context"
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/aws/aws-sdk-go-v2/service/servicediscovery"
+ "github.com/aws/aws-sdk-go-v2/service/servicediscovery/types"
+ "github.com/aws/smithy-go/middleware"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.uber.org/zap"
+)
+
+var instanceID = "test"
+var namespaceName = "cloudmap"
+var statusFilterHealthy = types.HealthStatusFilterHealthy
+
+var port uint16 = 1234
+
+func TestInitialCloudMapResolution(t *testing.T) {
+ // prepare
+
+ res := &cloudMapResolver{
+ logger: zap.NewNop(),
+ namespaceName: &namespaceName,
+ serviceName: &instanceID,
+ healthStatus: &statusFilterHealthy,
+ resInterval: 5 * time.Second,
+ resTimeout: 1 * time.Second,
+ stopCh: make(chan struct{}),
+ discoveryFn: mockDiscovery,
+ }
+
+ // test
+ var resolved []string
+ res.onChange(func(endpoints []string) {
+ resolved = endpoints
+ })
+ require.NoError(t, res.start(context.Background()))
+ defer func() {
+ require.NoError(t, res.shutdown(context.Background()))
+ }()
+
+ // verify
+ assert.Len(t, resolved, 3)
+ for i, value := range []string{"127.0.0.1:8080", "127.0.0.2:8080", "127.0.0.3:8080"} {
+ assert.Equal(t, value, resolved[i])
+ }
+}
+
+func TestInitialCloudMapResolutionWithPort(t *testing.T) {
+ // prepare
+
+ res := &cloudMapResolver{
+ logger: zap.NewNop(),
+ namespaceName: &namespaceName,
+ serviceName: &instanceID,
+ port: &port,
+ healthStatus: &statusFilterHealthy,
+ resInterval: 5 * time.Second,
+ resTimeout: 1 * time.Second,
+ stopCh: make(chan struct{}),
+ discoveryFn: mockDiscovery,
+ }
+
+ // test
+ var resolved []string
+ res.onChange(func(endpoints []string) {
+ resolved = endpoints
+ })
+ require.NoError(t, res.start(context.Background()))
+ defer func() {
+ require.NoError(t, res.shutdown(context.Background()))
+ }()
+
+ // verify
+ assert.Len(t, resolved, 3)
+ for i, value := range []string{"127.0.0.1:1234", "127.0.0.2:1234", "127.0.0.3:1234"} {
+ assert.Equal(t, value, resolved[i])
+ }
+}
+
+func makeSummary(i int) types.HttpInstanceSummary {
+ return types.HttpInstanceSummary{
+ Attributes: map[string]string{
+ "AWS_INSTANCE_IPV4": fmt.Sprintf("127.0.0.%d", i),
+ "AWS_INSTANCE_PORT": "8080",
+ },
+ HealthStatus: types.HealthStatusHealthy,
+ InstanceId: &instanceID,
+ NamespaceName: nil,
+ ServiceName: nil,
+ }
+}
+func mockDiscovery(*servicediscovery.DiscoverInstancesInput) (*servicediscovery.DiscoverInstancesOutput, error) {
+
+ s := &servicediscovery.DiscoverInstancesOutput{
+ Instances: []types.HttpInstanceSummary{
+ makeSummary(1),
+ makeSummary(2),
+ makeSummary(3),
+ },
+ ResultMetadata: middleware.Metadata{},
+ }
+ return s, nil
+}
diff --git a/exporter/loadbalancingexporter/resolver_dns_test.go b/exporter/loadbalancingexporter/resolver_dns_test.go
index 6f4ca264e403..0201c5a9cea5 100644
--- a/exporter/loadbalancingexporter/resolver_dns_test.go
+++ b/exporter/loadbalancingexporter/resolver_dns_test.go
@@ -107,6 +107,7 @@ func TestCantResolve(t *testing.T) {
// verify
assert.NoError(t, err)
+ assert.NoError(t, res.shutdown(context.Background()))
}
func TestOnChange(t *testing.T) {
@@ -125,7 +126,7 @@ func TestOnChange(t *testing.T) {
// test
counter := &atomic.Int64{}
- res.onChange(func(endpoints []string) {
+ res.onChange(func(_ []string) {
counter.Add(1)
})
require.NoError(t, res.start(context.Background()))
@@ -215,7 +216,7 @@ func TestPeriodicallyResolve(t *testing.T) {
}
wg := sync.WaitGroup{}
- res.onChange(func(backends []string) {
+ res.onChange(func(_ []string) {
wg.Done()
})
@@ -283,7 +284,7 @@ func TestShutdownClearsCallbacks(t *testing.T) {
require.NoError(t, err)
res.resolver = &mockDNSResolver{}
- res.onChange(func(s []string) {})
+ res.onChange(func(_ []string) {})
require.NoError(t, res.start(context.Background()))
// sanity check
@@ -297,7 +298,7 @@ func TestShutdownClearsCallbacks(t *testing.T) {
assert.Len(t, res.onChangeCallbacks, 0)
// check that we can add a new onChange before a new start
- res.onChange(func(s []string) {})
+ res.onChange(func(_ []string) {})
assert.Len(t, res.onChangeCallbacks, 1)
}
diff --git a/exporter/loadbalancingexporter/resolver_k8s.go b/exporter/loadbalancingexporter/resolver_k8s.go
index 1c0b14aa9436..4a2d64fb6a61 100644
--- a/exporter/loadbalancingexporter/resolver_k8s.go
+++ b/exporter/loadbalancingexporter/resolver_k8s.go
@@ -13,6 +13,7 @@ import (
"strconv"
"strings"
"sync"
+ "time"
"go.opencensus.io/stats"
"go.opencensus.io/tag"
@@ -23,7 +24,7 @@ import (
"k8s.io/apimachinery/pkg/watch"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/cache"
- "k8s.io/utils/pointer"
+ "k8s.io/utils/ptr"
"k8s.io/utils/strings/slices"
"sigs.k8s.io/controller-runtime/pkg/client/config"
)
@@ -37,6 +38,10 @@ var (
k8sResolverSuccessFalseMutators = []tag.Mutator{k8sResolverMutator, successFalseMutator}
)
+const (
+ defaultListWatchTimeout = 1 * time.Second
+)
+
type k8sResolver struct {
logger *zap.Logger
svcName string
@@ -48,6 +53,8 @@ type k8sResolver struct {
epsListWatcher cache.ListerWatcher
endpointsStore *sync.Map
+ lwTimeout time.Duration
+
endpoints []string
onChangeCallbacks []func([]string)
@@ -60,12 +67,16 @@ type k8sResolver struct {
func newK8sResolver(clt kubernetes.Interface,
logger *zap.Logger,
service string,
- ports []int32) (*k8sResolver, error) {
+ ports []int32, timeout time.Duration) (*k8sResolver, error) {
if len(service) == 0 {
return nil, errNoSvc
}
+ if timeout == 0 {
+ timeout = defaultListWatchTimeout
+ }
+
nAddr := strings.SplitN(service, ".", 2)
name, namespace := nAddr[0], "default"
if len(nAddr) > 1 {
@@ -84,12 +95,12 @@ func newK8sResolver(clt kubernetes.Interface,
epsListWatcher := &cache.ListWatch{
ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
options.FieldSelector = epsSelector
- options.TimeoutSeconds = pointer.Int64(1)
+ options.TimeoutSeconds = ptr.To[int64](int64(timeout.Seconds()))
return clt.CoreV1().Endpoints(namespace).List(context.Background(), options)
},
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
options.FieldSelector = epsSelector
- options.TimeoutSeconds = pointer.Int64(1)
+ options.TimeoutSeconds = ptr.To[int64](int64(timeout.Seconds()))
return clt.CoreV1().Endpoints(namespace).Watch(context.Background(), options)
},
}
@@ -106,6 +117,7 @@ func newK8sResolver(clt kubernetes.Interface,
epsListWatcher: epsListWatcher,
handler: h,
stopCh: make(chan struct{}),
+ lwTimeout: timeout,
}
h.callback = r.resolve
@@ -134,7 +146,8 @@ func (r *k8sResolver) start(_ context.Context) error {
r.logger.Debug("K8s service resolver started",
zap.String("service", r.svcName),
zap.String("namespace", r.svcNs),
- zap.Int32s("ports", r.port))
+ zap.Int32s("ports", r.port),
+ zap.Duration("timeout", r.lwTimeout))
return nil
}
@@ -160,7 +173,7 @@ func (r *k8sResolver) resolve(ctx context.Context) ([]string, error) {
defer r.shutdownWg.Done()
var backends []string
- r.endpointsStore.Range(func(address, value any) bool {
+ r.endpointsStore.Range(func(address, _ any) bool {
addr := address.(string)
if len(r.port) == 0 {
backends = append(backends, addr)
diff --git a/exporter/loadbalancingexporter/resolver_k8s_test.go b/exporter/loadbalancingexporter/resolver_k8s_test.go
index 9e7a1fe14b6d..b7faf8497743 100644
--- a/exporter/loadbalancingexporter/resolver_k8s_test.go
+++ b/exporter/loadbalancingexporter/resolver_k8s_test.go
@@ -56,7 +56,7 @@ func TestK8sResolve(t *testing.T) {
}
cl := fake.NewSimpleClientset(endpoint)
- res, err := newK8sResolver(cl, zap.NewNop(), service, ports)
+ res, err := newK8sResolver(cl, zap.NewNop(), service, ports, defaultListWatchTimeout)
require.NoError(t, err)
require.NoError(t, res.start(context.Background()))
@@ -101,7 +101,7 @@ func TestK8sResolve(t *testing.T) {
return err
},
- verifyFn: func(ctx *suiteContext, args args) error {
+ verifyFn: func(ctx *suiteContext, _ args) error {
if _, err := ctx.resolver.resolve(context.Background()); err != nil {
return err
}
@@ -139,7 +139,7 @@ func TestK8sResolve(t *testing.T) {
return err
},
- verifyFn: func(ctx *suiteContext, args args) error {
+ verifyFn: func(ctx *suiteContext, _ args) error {
if _, err := ctx.resolver.resolve(context.Background()); err != nil {
return err
}
@@ -163,7 +163,7 @@ func TestK8sResolve(t *testing.T) {
return suiteCtx.clientset.CoreV1().Endpoints(args.namespace).
Delete(context.TODO(), args.service, metav1.DeleteOptions{})
},
- verifyFn: func(suiteCtx *suiteContext, args args) error {
+ verifyFn: func(suiteCtx *suiteContext, _ args) error {
if _, err := suiteCtx.resolver.resolve(context.Background()); err != nil {
return err
}
@@ -241,7 +241,7 @@ func Test_newK8sResolver(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- got, err := newK8sResolver(fake.NewSimpleClientset(), tt.args.logger, tt.args.service, tt.args.ports)
+ got, err := newK8sResolver(fake.NewSimpleClientset(), tt.args.logger, tt.args.service, tt.args.ports, defaultListWatchTimeout)
if tt.wantErr != nil {
require.Error(t, err, tt.wantErr)
} else {
diff --git a/exporter/loadbalancingexporter/resolver_static.go b/exporter/loadbalancingexporter/resolver_static.go
index 8527669db834..86759f132bbe 100644
--- a/exporter/loadbalancingexporter/resolver_static.go
+++ b/exporter/loadbalancingexporter/resolver_static.go
@@ -49,7 +49,13 @@ func (r *staticResolver) start(ctx context.Context) error {
return err
}
-func (r *staticResolver) shutdown(_ context.Context) error {
+func (r *staticResolver) shutdown(context.Context) error {
+ r.endpoints = nil
+
+ for _, callback := range r.onChangeCallbacks {
+ callback(r.endpoints)
+ }
+
return nil
}
diff --git a/exporter/loadbalancingexporter/resolver_static_test.go b/exporter/loadbalancingexporter/resolver_static_test.go
index 4bdc0d815f17..63dda4be2367 100644
--- a/exporter/loadbalancingexporter/resolver_static_test.go
+++ b/exporter/loadbalancingexporter/resolver_static_test.go
@@ -39,7 +39,7 @@ func TestResolvedOnlyOnce(t *testing.T) {
require.NoError(t, err)
counter := 0
- res.onChange(func(endpoints []string) {
+ res.onChange(func(_ []string) {
counter++
})
diff --git a/exporter/loadbalancingexporter/testdata/config.yaml b/exporter/loadbalancingexporter/testdata/config.yaml
index a1ec52ed8d85..5d42674d79e3 100644
--- a/exporter/loadbalancingexporter/testdata/config.yaml
+++ b/exporter/loadbalancingexporter/testdata/config.yaml
@@ -27,3 +27,14 @@ loadbalancing/3:
dns:
hostname: service-1
port: 55690
+
+loadbalancing/4:
+ protocol:
+ otlp:
+
+ # how to get the list of backends: DNS
+ resolver:
+ awsCloudMap:
+ namespace: cloudmap-1
+ serviceName: service-1
+ port: 4319
diff --git a/exporter/loadbalancingexporter/testdata/test-build-exporter-config.yaml b/exporter/loadbalancingexporter/testdata/test-build-exporter-config.yaml
index b7e1b4475437..bce0c82f379b 100644
--- a/exporter/loadbalancingexporter/testdata/test-build-exporter-config.yaml
+++ b/exporter/loadbalancingexporter/testdata/test-build-exporter-config.yaml
@@ -7,7 +7,7 @@ exporters:
loadbalancing:
protocol:
otlp:
- endpoint: should-be-replaced
+ endpoint: should-be-replaced:4317
resolver:
static:
diff --git a/exporter/loadbalancingexporter/trace_exporter.go b/exporter/loadbalancingexporter/trace_exporter.go
index 06a67b142638..a6f955c69975 100644
--- a/exporter/loadbalancingexporter/trace_exporter.go
+++ b/exporter/loadbalancingexporter/trace_exporter.go
@@ -24,8 +24,10 @@ import (
var _ exporter.Traces = (*traceExporterImp)(nil)
+type exporterTraces map[*wrappedExporter]ptrace.Traces
+
type traceExporterImp struct {
- loadBalancer loadBalancer
+ loadBalancer *loadBalancer
routingKey routingKey
stopped bool
@@ -70,57 +72,64 @@ func (e *traceExporterImp) Start(ctx context.Context, host component.Host) error
return e.loadBalancer.Start(ctx, host)
}
-func (e *traceExporterImp) Shutdown(context.Context) error {
+func (e *traceExporterImp) Shutdown(ctx context.Context) error {
+ err := e.loadBalancer.Shutdown(ctx)
e.stopped = true
e.shutdownWg.Wait()
- return nil
+ return err
}
func (e *traceExporterImp) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
- var errs error
batches := batchpersignal.SplitTraces(td)
- for _, batch := range batches {
- errs = multierr.Append(errs, e.consumeTrace(ctx, batch))
- }
- return errs
-}
-
-func (e *traceExporterImp) consumeTrace(ctx context.Context, td ptrace.Traces) error {
- var exp component.Component
- routingIds, err := routingIdentifiersFromTraces(td, e.routingKey)
- if err != nil {
- return err
- }
- for rid := range routingIds {
- endpoint := e.loadBalancer.Endpoint([]byte(rid))
- exp, err = e.loadBalancer.Exporter(endpoint)
+ exporterSegregatedTraces := make(exporterTraces)
+ endpoints := make(map[*wrappedExporter]string)
+ for _, batch := range batches {
+ routingID, err := routingIdentifiersFromTraces(batch, e.routingKey)
if err != nil {
return err
}
- te, ok := exp.(exporter.Traces)
- if !ok {
- return fmt.Errorf("unable to export traces, unexpected exporter type: expected exporter.Traces but got %T", exp)
+ for rid := range routingID {
+ exp, endpoint, err := e.loadBalancer.exporterAndEndpoint([]byte(rid))
+ if err != nil {
+ return err
+ }
+
+ _, ok := exporterSegregatedTraces[exp]
+ if !ok {
+ exp.consumeWG.Add(1)
+ exporterSegregatedTraces[exp] = ptrace.NewTraces()
+ }
+ exporterSegregatedTraces[exp] = mergeTraces(exporterSegregatedTraces[exp], batch)
+
+ endpoints[exp] = endpoint
}
+ }
+ var errs error
+
+ for exp, td := range exporterSegregatedTraces {
start := time.Now()
- err = te.ConsumeTraces(ctx, td)
+ err := exp.ConsumeTraces(ctx, td)
+ exp.consumeWG.Done()
+ errs = multierr.Append(errs, err)
duration := time.Since(start)
if err == nil {
_ = stats.RecordWithTags(
ctx,
- []tag.Mutator{tag.Upsert(endpointTagKey, endpoint), successTrueMutator},
+ []tag.Mutator{tag.Upsert(endpointTagKey, endpoints[exp]), successTrueMutator},
mBackendLatency.M(duration.Milliseconds()))
} else {
_ = stats.RecordWithTags(
ctx,
- []tag.Mutator{tag.Upsert(endpointTagKey, endpoint), successFalseMutator},
+ []tag.Mutator{tag.Upsert(endpointTagKey, endpoints[exp]), successFalseMutator},
mBackendLatency.M(duration.Milliseconds()))
}
}
- return err
+
+ return errs
}
func routingIdentifiersFromTraces(td ptrace.Traces, key routingKey) (map[string]bool, error) {
diff --git a/exporter/loadbalancingexporter/trace_exporter_test.go b/exporter/loadbalancingexporter/trace_exporter_test.go
index ff0f606144ff..cb544d118291 100644
--- a/exporter/loadbalancingexporter/trace_exporter_test.go
+++ b/exporter/loadbalancingexporter/trace_exporter_test.go
@@ -120,7 +120,7 @@ func TestTracesExporterShutdown(t *testing.T) {
}
func TestConsumeTraces(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockTracesExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -136,7 +136,7 @@ func TestConsumeTraces(t *testing.T) {
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return []string{"endpoint-1"}, nil
},
}
@@ -155,8 +155,61 @@ func TestConsumeTraces(t *testing.T) {
assert.Nil(t, res)
}
+// This test validates that exporter is can concurrently change the endpoints while consuming traces.
+func TestConsumeTraces_ConcurrentResolverChange(t *testing.T) {
+ consumeStarted := make(chan struct{})
+ consumeDone := make(chan struct{})
+
+ // imitate a slow exporter
+ te := &mockTracesExporter{Component: mockComponent{}}
+ te.ConsumeTracesFn = func(_ context.Context, _ ptrace.Traces) error {
+ close(consumeStarted)
+ time.Sleep(50 * time.Millisecond)
+ return te.consumeErr
+ }
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
+ return te, nil
+ }
+ lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
+ require.NotNil(t, lb)
+ require.NoError(t, err)
+
+ p, err := newTracesExporter(exportertest.NewNopCreateSettings(), simpleConfig())
+ require.NotNil(t, p)
+ require.NoError(t, err)
+ assert.Equal(t, p.routingKey, traceIDRouting)
+
+ endpoints := []string{"endpoint-1"}
+ lb.res = &mockResolver{
+ triggerCallbacks: true,
+ onResolve: func(_ context.Context) ([]string, error) {
+ return endpoints, nil
+ },
+ }
+ p.loadBalancer = lb
+
+ err = p.Start(context.Background(), componenttest.NewNopHost())
+ require.NoError(t, err)
+ defer func() {
+ require.NoError(t, p.Shutdown(context.Background()))
+ }()
+
+ go func() {
+ assert.NoError(t, p.ConsumeTraces(context.Background(), simpleTraces()))
+ close(consumeDone)
+ }()
+
+ // update endpoint while consuming traces
+ <-consumeStarted
+ endpoints = []string{"endpoint-2"}
+ endpoint, err := lb.res.resolve(context.Background())
+ require.NoError(t, err)
+ require.Equal(t, endpoints, endpoint)
+ <-consumeDone
+}
+
func TestConsumeTracesServiceBased(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockTracesExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), serviceBasedRoutingConfig(), componentFactory)
@@ -170,10 +223,11 @@ func TestConsumeTracesServiceBased(t *testing.T) {
// pre-load an exporter here, so that we don't use the actual OTLP exporter
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
+ lb.addMissingExporters(context.Background(), []string{"endpoint-2"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
- return []string{"endpoint-1"}, nil
+ onResolve: func(_ context.Context) ([]string, error) {
+ return []string{"endpoint-1", "endpoint-2"}, nil
},
}
p.loadBalancer = lb
@@ -221,7 +275,7 @@ func TestServiceBasedRoutingForSameTraceId(t *testing.T) {
}
func TestConsumeTracesExporterNoEndpoint(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockTracesExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -234,7 +288,7 @@ func TestConsumeTracesExporterNoEndpoint(t *testing.T) {
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return nil, nil
},
}
@@ -255,7 +309,7 @@ func TestConsumeTracesExporterNoEndpoint(t *testing.T) {
}
func TestConsumeTracesUnexpectedExporterType(t *testing.T) {
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -270,7 +324,7 @@ func TestConsumeTracesUnexpectedExporterType(t *testing.T) {
lb.addMissingExporters(context.Background(), []string{"endpoint-1"})
lb.res = &mockResolver{
triggerCallbacks: true,
- onResolve: func(ctx context.Context) ([]string, error) {
+ onResolve: func(_ context.Context) ([]string, error) {
return []string{"endpoint-1"}, nil
},
}
@@ -309,18 +363,18 @@ func TestBuildExporterConfig(t *testing.T) {
exporterCfg := buildExporterConfig(c.(*Config), "the-endpoint")
// verify
- grpcSettings := defaultCfg.GRPCClientSettings
+ grpcSettings := defaultCfg.ClientConfig
grpcSettings.Endpoint = "the-endpoint"
- assert.Equal(t, grpcSettings, exporterCfg.GRPCClientSettings)
+ assert.Equal(t, grpcSettings, exporterCfg.ClientConfig)
assert.Equal(t, defaultCfg.TimeoutSettings, exporterCfg.TimeoutSettings)
- assert.Equal(t, defaultCfg.QueueSettings, exporterCfg.QueueSettings)
- assert.Equal(t, defaultCfg.RetrySettings, exporterCfg.RetrySettings)
+ assert.Equal(t, defaultCfg.QueueConfig, exporterCfg.QueueConfig)
+ assert.Equal(t, defaultCfg.RetryConfig, exporterCfg.RetryConfig)
}
func TestBatchWithTwoTraces(t *testing.T) {
sink := new(consumertest.TracesSink)
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newMockTracesExporter(sink.ConsumeTraces), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), simpleConfig(), componentFactory)
@@ -345,7 +399,8 @@ func TestBatchWithTwoTraces(t *testing.T) {
// verify
assert.NoError(t, err)
- assert.Len(t, sink.AllTraces(), 2)
+ assert.Len(t, sink.AllTraces(), 1)
+ assert.Equal(t, sink.AllTraces()[0].SpanCount(), 2)
}
func TestNoTracesInBatch(t *testing.T) {
@@ -447,7 +502,7 @@ func TestRollingUpdatesWhenConsumeTraces(t *testing.T) {
DNS: &DNSResolver{Hostname: "service-1", Port: ""},
},
}
- componentFactory := func(ctx context.Context, endpoint string) (component.Component, error) {
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
return newNopMockTracesExporter(), nil
}
lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), cfg, componentFactory)
@@ -463,19 +518,17 @@ func TestRollingUpdatesWhenConsumeTraces(t *testing.T) {
counter1 := &atomic.Int64{}
counter2 := &atomic.Int64{}
- defaultExporters := map[string]component.Component{
- "127.0.0.1:4317": newMockTracesExporter(func(ctx context.Context, td ptrace.Traces) error {
+ defaultExporters := map[string]*wrappedExporter{
+ "127.0.0.1:4317": newWrappedExporter(newMockTracesExporter(func(_ context.Context, _ ptrace.Traces) error {
counter1.Add(1)
// simulate an unreachable backend
time.Sleep(10 * time.Second)
return nil
- },
- ),
- "127.0.0.2:4317": newMockTracesExporter(func(ctx context.Context, td ptrace.Traces) error {
+ })),
+ "127.0.0.2:4317": newWrappedExporter(newMockTracesExporter(func(_ context.Context, _ ptrace.Traces) error {
counter2.Add(1)
return nil
- },
- ),
+ })),
}
// test
@@ -488,7 +541,7 @@ func TestRollingUpdatesWhenConsumeTraces(t *testing.T) {
lb.updateLock.Lock()
lb.exporters = defaultExporters
lb.updateLock.Unlock()
- lb.res.onChange(func(endpoints []string) {
+ lb.res.onChange(func(_ []string) {
lb.updateLock.Lock()
lb.exporters = defaultExporters
lb.updateLock.Unlock()
@@ -532,6 +585,89 @@ func TestRollingUpdatesWhenConsumeTraces(t *testing.T) {
require.Greater(t, counter2.Load(), int64(0))
}
+func benchConsumeTraces(b *testing.B, endpointsCount int, tracesCount int) {
+ sink := new(consumertest.TracesSink)
+ componentFactory := func(_ context.Context, _ string) (component.Component, error) {
+ return newMockTracesExporter(sink.ConsumeTraces), nil
+ }
+
+ endpoints := []string{}
+ for i := 0; i < endpointsCount; i++ {
+ endpoints = append(endpoints, fmt.Sprintf("endpoint-%d", i))
+ }
+
+ config := &Config{
+ Resolver: ResolverSettings{
+ Static: &StaticResolver{Hostnames: endpoints},
+ },
+ }
+
+ lb, err := newLoadBalancer(exportertest.NewNopCreateSettings(), config, componentFactory)
+ require.NotNil(b, lb)
+ require.NoError(b, err)
+
+ p, err := newTracesExporter(exportertest.NewNopCreateSettings(), config)
+ require.NotNil(b, p)
+ require.NoError(b, err)
+
+ p.loadBalancer = lb
+
+ err = p.Start(context.Background(), componenttest.NewNopHost())
+ require.NoError(b, err)
+
+ trace1 := ptrace.NewTraces()
+ trace2 := ptrace.NewTraces()
+ for i := 0; i < endpointsCount; i++ {
+ for j := 0; j < tracesCount/endpointsCount; j++ {
+ appendSimpleTraceWithID(trace2.ResourceSpans().AppendEmpty(), [16]byte{1, 2, 6, byte(i)})
+ }
+ }
+ td := mergeTraces(trace1, trace2)
+
+ b.ResetTimer()
+
+ for i := 0; i < b.N; i++ {
+ err = p.ConsumeTraces(context.Background(), td)
+ require.NoError(b, err)
+ }
+
+ b.StopTimer()
+ err = p.Shutdown(context.Background())
+ require.NoError(b, err)
+}
+
+func BenchmarkConsumeTraces_1E100T(b *testing.B) {
+ benchConsumeTraces(b, 1, 100)
+}
+
+func BenchmarkConsumeTraces_1E1000T(b *testing.B) {
+ benchConsumeTraces(b, 1, 1000)
+}
+
+func BenchmarkConsumeTraces_5E100T(b *testing.B) {
+ benchConsumeTraces(b, 5, 100)
+}
+
+func BenchmarkConsumeTraces_5E500T(b *testing.B) {
+ benchConsumeTraces(b, 5, 500)
+}
+
+func BenchmarkConsumeTraces_5E1000T(b *testing.B) {
+ benchConsumeTraces(b, 5, 1000)
+}
+
+func BenchmarkConsumeTraces_10E100T(b *testing.B) {
+ benchConsumeTraces(b, 10, 100)
+}
+
+func BenchmarkConsumeTraces_10E500T(b *testing.B) {
+ benchConsumeTraces(b, 10, 500)
+}
+
+func BenchmarkConsumeTraces_10E1000T(b *testing.B) {
+ benchConsumeTraces(b, 10, 1000)
+}
+
func randomTraces() ptrace.Traces {
v1 := uint8(rand.Intn(256))
v2 := uint8(rand.Intn(256))
@@ -551,9 +687,19 @@ func simpleTraces() ptrace.Traces {
func simpleTracesWithServiceName() ptrace.Traces {
traces := ptrace.NewTraces()
traces.ResourceSpans().EnsureCapacity(1)
+
rspans := traces.ResourceSpans().AppendEmpty()
rspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-1")
rspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 4})
+
+ bspans := traces.ResourceSpans().AppendEmpty()
+ bspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-2")
+ bspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 4})
+
+ aspans := traces.ResourceSpans().AppendEmpty()
+ aspans.Resource().Attributes().PutStr(conventions.AttributeServiceName, "service-name-3")
+ aspans.ScopeSpans().AppendEmpty().Spans().AppendEmpty().SetTraceID([16]byte{1, 2, 3, 5})
+
return traces
}
@@ -584,7 +730,7 @@ func simpleConfig() *Config {
func serviceBasedRoutingConfig() *Config {
return &Config{
Resolver: ResolverSettings{
- Static: &StaticResolver{Hostnames: []string{"endpoint-1"}},
+ Static: &StaticResolver{Hostnames: []string{"endpoint-1", "endpoint-2"}},
},
RoutingKey: "service",
}
@@ -593,6 +739,7 @@ func serviceBasedRoutingConfig() *Config {
type mockTracesExporter struct {
component.Component
ConsumeTracesFn func(ctx context.Context, td ptrace.Traces) error
+ consumeErr error
}
func newMockTracesExporter(consumeTracesFn func(ctx context.Context, td ptrace.Traces) error) exporter.Traces {
@@ -603,12 +750,12 @@ func newMockTracesExporter(consumeTracesFn func(ctx context.Context, td ptrace.T
}
func newNopMockTracesExporter() exporter.Traces {
- return &mockTracesExporter{
- Component: mockComponent{},
- ConsumeTracesFn: func(ctx context.Context, td ptrace.Traces) error {
- return nil
- },
- }
+ return &mockTracesExporter{Component: mockComponent{}}
+}
+
+func (e *mockTracesExporter) Shutdown(context.Context) error {
+ e.consumeErr = errors.New("exporter is shut down")
+ return nil
}
func (e *mockTracesExporter) Capabilities() consumer.Capabilities {
@@ -617,7 +764,7 @@ func (e *mockTracesExporter) Capabilities() consumer.Capabilities {
func (e *mockTracesExporter) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
if e.ConsumeTracesFn == nil {
- return nil
+ return e.consumeErr
}
return e.ConsumeTracesFn(ctx, td)
}
diff --git a/exporter/loadbalancingexporter/wrapped_exporter.go b/exporter/loadbalancingexporter/wrapped_exporter.go
new file mode 100644
index 000000000000..cb2491fc23ff
--- /dev/null
+++ b/exporter/loadbalancingexporter/wrapped_exporter.go
@@ -0,0 +1,56 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package loadbalancingexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/loadbalancingexporter"
+
+import (
+ "context"
+ "fmt"
+ "sync"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+// wrappedExporter is an exporter that waits for the data processing to complete before shutting down.
+// consumeWG has to be incremented explicitly by the consumer of the wrapped exporter.
+type wrappedExporter struct {
+ component.Component
+ consumeWG sync.WaitGroup
+}
+
+func newWrappedExporter(exp component.Component) *wrappedExporter {
+ return &wrappedExporter{Component: exp}
+}
+
+func (we *wrappedExporter) Shutdown(ctx context.Context) error {
+ we.consumeWG.Wait()
+ return we.Component.Shutdown(ctx)
+}
+
+func (we *wrappedExporter) ConsumeTraces(ctx context.Context, td ptrace.Traces) error {
+ te, ok := we.Component.(exporter.Traces)
+ if !ok {
+ return fmt.Errorf("unable to export traces, unexpected exporter type: expected exporter.Traces but got %T", we.Component)
+ }
+ return te.ConsumeTraces(ctx, td)
+}
+
+func (we *wrappedExporter) ConsumeMetrics(ctx context.Context, md pmetric.Metrics) error {
+ me, ok := we.Component.(exporter.Metrics)
+ if !ok {
+ return fmt.Errorf("unable to export metrics, unexpected exporter type: expected exporter.Metrics but got %T", we.Component)
+ }
+ return me.ConsumeMetrics(ctx, md)
+}
+
+func (we *wrappedExporter) ConsumeLogs(ctx context.Context, ld plog.Logs) error {
+ le, ok := we.Component.(exporter.Logs)
+ if !ok {
+ return fmt.Errorf("unable to export logs, unexpected exporter type: expected exporter.Logs but got %T", we.Component)
+ }
+ return le.ConsumeLogs(ctx, ld)
+}
diff --git a/exporter/logicmonitorexporter/README.md b/exporter/logicmonitorexporter/README.md
index 429aeef4296b..f46d814434a8 100644
--- a/exporter/logicmonitorexporter/README.md
+++ b/exporter/logicmonitorexporter/README.md
@@ -52,3 +52,21 @@ Set the environment variable `LOGICMONITOR_BEARER_TOKEN`
headers:
Authorization: Bearer
```
+## Resource Mapping for Logs
+
+As per the LogicMonitor's [Log Ingestion documentation](https://www.logicmonitor.com/support/lm-logs/sending-logs-to-the-lm-logs-ingestion-api), if more than one resource property exists, only the first property will be mapped. In case of OTLP logs, there can be multiple resource attributes and its order also cannot be guaranteed.
+
+Recently we have made the resource mapping for logs more flexible. With that, any of the resource attributes present in the log matches can be considered for resource mapping.
+But, this is not the default behaviour. In order to make the resource mapping flexible, you can configure the `resource_mapping_op` in the LogicMonitor's exporter.
+
+```yaml
+ exporters:
+ logicmonitor:
+ endpoint: https://company.logicmonitor.com/rest
+ headers:
+ Authorization: Bearer
+ logs:
+ resource_mapping_op: "OR"
+```
+
+The value for `resource_mapping_op` can be `AND` or `OR`. The values are case-insensitive.
\ No newline at end of file
diff --git a/exporter/logicmonitorexporter/config.go b/exporter/logicmonitorexporter/config.go
index c1675fafed70..f5625988288d 100644
--- a/exporter/logicmonitorexporter/config.go
+++ b/exporter/logicmonitorexporter/config.go
@@ -6,9 +6,11 @@ package logicmonitorexporter // import "github.com/open-telemetry/opentelemetry-
import (
"fmt"
"net/url"
+ "strings"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
@@ -16,14 +18,16 @@ import (
// Config defines configuration for LogicMonitor exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"`
+ confighttp.ClientConfig `mapstructure:",squash"`
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
ResourceToTelemetrySettings resourcetotelemetry.Settings `mapstructure:"resource_to_telemetry_conversion"`
// ApiToken of Logicmonitor Platform
APIToken APIToken `mapstructure:"api_token"`
+ // Logs defines the Logs exporter specific configuration
+ Logs LogsConfig `mapstructure:"logs"`
}
type APIToken struct {
@@ -31,14 +35,38 @@ type APIToken struct {
AccessKey configopaque.String `mapstructure:"access_key"`
}
+type MappingOperation string
+
+const (
+ And MappingOperation = "and"
+ Or MappingOperation = "or"
+)
+
+func (mop *MappingOperation) UnmarshalText(in []byte) error {
+ switch op := MappingOperation(strings.ToLower(string(in))); op {
+ case And, Or:
+ *mop = op
+ return nil
+
+ default:
+ return fmt.Errorf("unsupported mapping operation %q", op)
+ }
+}
+
+// LogsConfig defines the logs exporter specific configuration options
+type LogsConfig struct {
+ // Operation to be performed for resource mapping. Valid values are `and`, `or`.
+ ResourceMappingOperation MappingOperation `mapstructure:"resource_mapping_op"`
+}
+
func (c *Config) Validate() error {
if c.Endpoint == "" {
- return fmt.Errorf("Endpoint should not be empty")
+ return fmt.Errorf("endpoint should not be empty")
}
u, err := url.Parse(c.Endpoint)
if err != nil || u.Scheme == "" || u.Host == "" {
- return fmt.Errorf("Endpoint must be valid")
+ return fmt.Errorf("endpoint must be valid")
}
return nil
}
diff --git a/exporter/logicmonitorexporter/config_test.go b/exporter/logicmonitorexporter/config_test.go
index 549711a7ad32..2e9cf01edca7 100644
--- a/exporter/logicmonitorexporter/config_test.go
+++ b/exporter/logicmonitorexporter/config_test.go
@@ -13,6 +13,8 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -29,37 +31,37 @@ func TestConfigValidation(t *testing.T) {
{
name: "empty endpoint",
cfg: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
},
},
wantErr: true,
- errorMessage: "Endpoint should not be empty",
+ errorMessage: "endpoint should not be empty",
},
{
name: "missing http scheme",
cfg: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "test.com/dummy",
},
},
wantErr: true,
- errorMessage: "Endpoint must be valid",
+ errorMessage: "endpoint must be valid",
},
{
name: "invalid endpoint format",
cfg: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "invalid.com@#$%",
},
},
wantErr: true,
- errorMessage: "Endpoint must be valid",
+ errorMessage: "endpoint must be valid",
},
{
name: "valid config",
cfg: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://validurl.com/rest",
},
},
@@ -100,9 +102,9 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "apitoken"),
expected: &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://company.logicmonitor.com/rest",
},
APIToken: APIToken{
@@ -114,9 +116,9 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "bearertoken"),
expected: &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://company.logicmonitor.com/rest",
Headers: map[string]configopaque.String{
"Authorization": "Bearer ",
@@ -124,6 +126,22 @@ func TestLoadConfig(t *testing.T) {
},
},
},
+ {
+ id: component.NewIDWithName(metadata.Type, "resource-mapping-op"),
+ expected: &Config{
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ ClientConfig: confighttp.ClientConfig{
+ Endpoint: "https://company.logicmonitor.com/rest",
+ Headers: map[string]configopaque.String{
+ "Authorization": "Bearer ",
+ },
+ },
+ Logs: LogsConfig{
+ ResourceMappingOperation: "or",
+ },
+ },
+ },
}
for _, tt := range tests {
@@ -140,3 +158,35 @@ func TestLoadConfig(t *testing.T) {
})
}
}
+
+func TestUnmarshal(t *testing.T) {
+ tests := []struct {
+ name string
+ configMap *confmap.Conf
+ cfg *Config
+ err string
+ }{
+ {
+ name: "invalid resource mapping operation",
+ configMap: confmap.NewFromStringMap(map[string]any{
+ "logs": map[string]any{
+ "resource_mapping_op": "invalid_op",
+ },
+ }),
+ err: "1 error(s) decoding:\n\n* error decoding 'logs.resource_mapping_op': unsupported mapping operation \"invalid_op\"",
+ },
+ }
+
+ f := NewFactory()
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ cfg := f.CreateDefaultConfig().(*Config)
+ err := component.UnmarshalConfig(tt.configMap, cfg)
+ if err != nil || tt.err != "" {
+ assert.EqualError(t, err, tt.err)
+ } else {
+ assert.Equal(t, tt.cfg, cfg)
+ }
+ })
+ }
+}
diff --git a/exporter/logicmonitorexporter/factory.go b/exporter/logicmonitorexporter/factory.go
index efe75d72d425..e5c6e9c3f2db 100644
--- a/exporter/logicmonitorexporter/factory.go
+++ b/exporter/logicmonitorexporter/factory.go
@@ -9,6 +9,7 @@ import (
"context"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -28,7 +29,7 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
}
}
@@ -44,7 +45,8 @@ func createLogsExporter(ctx context.Context, set exporter.CreateSettings, cfg co
lmLogExp.PushLogData,
exporterhelper.WithStart(lmLogExp.start),
exporterhelper.WithQueue(c.QueueSettings),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
+ exporterhelper.WithShutdown(lmLogExp.shutdown),
)
}
@@ -59,6 +61,8 @@ func createTracesExporter(ctx context.Context, set exporter.CreateSettings, cfg
lmTraceExp.PushTraceData,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
exporterhelper.WithStart(lmTraceExp.start),
- exporterhelper.WithRetry(c.RetrySettings),
- exporterhelper.WithQueue(c.QueueSettings))
+ exporterhelper.WithRetry(c.BackOffConfig),
+ exporterhelper.WithQueue(c.QueueSettings),
+ exporterhelper.WithShutdown(lmTraceExp.shutdown),
+ )
}
diff --git a/exporter/logicmonitorexporter/factory_test.go b/exporter/logicmonitorexporter/factory_test.go
index b5e7af3a2778..4f03d0b61ad8 100644
--- a/exporter/logicmonitorexporter/factory_test.go
+++ b/exporter/logicmonitorexporter/factory_test.go
@@ -10,6 +10,7 @@ import (
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
)
@@ -20,7 +21,7 @@ func TestCreateDefaultConfig(t *testing.T) {
cfg := factory.CreateDefaultConfig()
assert.Equal(t, &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
}, cfg, "failed to create default config")
@@ -37,7 +38,7 @@ func TestCreateLogsExporter(t *testing.T) {
{
name: "valid config",
config: Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://example.logicmonitor.com/rest",
},
},
@@ -77,7 +78,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "valid config",
config: Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://example.logicmonitor.com/rest",
},
},
diff --git a/exporter/logicmonitorexporter/generated_component_test.go b/exporter/logicmonitorexporter/generated_component_test.go
new file mode 100644
index 000000000000..08361ca97790
--- /dev/null
+++ b/exporter/logicmonitorexporter/generated_component_test.go
@@ -0,0 +1,133 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package logicmonitorexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/logicmonitorexporter/go.mod b/exporter/logicmonitorexporter/go.mod
index 5553c740cce4..0515dbb8e093 100644
--- a/exporter/logicmonitorexporter/go.mod
+++ b/exporter/logicmonitorexporter/go.mod
@@ -1,68 +1,78 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logicmonitorexporter
-go 1.20
+go 1.21
require (
- github.com/logicmonitor/lm-data-sdk-go v1.0.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/logicmonitor/lm-data-sdk-go v1.3.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/logicmonitorexporter/go.sum b/exporter/logicmonitorexporter/go.sum
index 10f02b02690a..0640938b0a4e 100644
--- a/exporter/logicmonitorexporter/go.sum
+++ b/exporter/logicmonitorexporter/go.sum
@@ -1,86 +1,58 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/logicmonitor/lm-data-sdk-go v1.0.0 h1:2eiz7kq3G0rLc/hqVpsk1c2B0PMjp6nLhHzc5SmTn80=
-github.com/logicmonitor/lm-data-sdk-go v1.0.0/go.mod h1:XvYS9xp/0WrPpc6ge2O3ZPn2dgbKO46PnfCfbKaeUu8=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+github.com/logicmonitor/lm-data-sdk-go v1.3.0 h1:Obrexk35IKupFQezngkesR/kMfHQdAEUR1zYbJrOrzg=
+github.com/logicmonitor/lm-data-sdk-go v1.3.0/go.mod h1:nIHr4uOPfg6AM7mG1rewg3L4O3rfge34o7UYB7joBM4=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -90,119 +62,106 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -210,38 +169,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/logicmonitorexporter/internal/logs/package_test.go b/exporter/logicmonitorexporter/internal/logs/package_test.go
new file mode 100644
index 000000000000..1158f120b289
--- /dev/null
+++ b/exporter/logicmonitorexporter/internal/logs/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package logs
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/logicmonitorexporter/internal/logs/sender.go b/exporter/logicmonitorexporter/internal/logs/sender.go
index e372be7614fc..426ec04d6898 100644
--- a/exporter/logicmonitorexporter/internal/logs/sender.go
+++ b/exporter/logicmonitorexporter/internal/logs/sender.go
@@ -11,7 +11,6 @@ import (
lmsdklogs "github.com/logicmonitor/lm-data-sdk-go/api/logs"
"github.com/logicmonitor/lm-data-sdk-go/model"
- "github.com/logicmonitor/lm-data-sdk-go/utils"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.uber.org/zap"
@@ -23,15 +22,8 @@ type Sender struct {
}
// NewSender creates a new Sender
-func NewSender(ctx context.Context, endpoint string, client *http.Client, authParams utils.AuthParams, logger *zap.Logger) (*Sender, error) {
- options := []lmsdklogs.Option{
- lmsdklogs.WithLogBatchingDisabled(),
- lmsdklogs.WithAuthentication(authParams),
- lmsdklogs.WithHTTPClient(client),
- lmsdklogs.WithEndpoint(endpoint),
- }
-
- logIngestClient, err := lmsdklogs.NewLMLogIngest(ctx, options...)
+func NewSender(ctx context.Context, logger *zap.Logger, opts ...lmsdklogs.Option) (*Sender, error) {
+ logIngestClient, err := lmsdklogs.NewLMLogIngest(ctx, opts...)
if err != nil {
return nil, fmt.Errorf("failed to create logIngestClient: %w", err)
}
@@ -44,27 +36,23 @@ func NewSender(ctx context.Context, endpoint string, client *http.Client, authPa
func (s *Sender) SendLogs(ctx context.Context, payload []model.LogInput) error {
ingestResponse, err := s.logIngestClient.SendLogs(ctx, payload)
if err != nil {
- return consumererror.NewPermanent(err)
- }
- if ingestResponse != nil {
-
- if ingestResponse.Success {
- return nil
- }
- if ingestResponse.RetryAfter > 0 {
- return exporterhelper.NewThrottleRetry(ingestResponse.Error, time.Duration(ingestResponse.RetryAfter)*time.Second)
- }
- if ingestResponse.StatusCode == http.StatusMultiStatus {
- for _, status := range ingestResponse.MultiStatus {
- if isPermanentClientFailure(int(status.Code)) {
- return consumererror.NewPermanent(fmt.Errorf("permanent failure error %s, complete error log %w", status.Error, ingestResponse.Error))
+ if ingestResponse != nil {
+ if ingestResponse.RetryAfter > 0 {
+ return exporterhelper.NewThrottleRetry(ingestResponse.Error, time.Duration(ingestResponse.RetryAfter)*time.Second)
+ }
+ if ingestResponse.StatusCode == http.StatusMultiStatus {
+ for _, status := range ingestResponse.MultiStatus {
+ if isPermanentClientFailure(int(status.Code)) {
+ return consumererror.NewPermanent(fmt.Errorf("permanent failure error %s, complete error log %w", status.Error, ingestResponse.Error))
+ }
}
}
+ if isPermanentClientFailure(ingestResponse.StatusCode) {
+ return consumererror.NewPermanent(ingestResponse.Error)
+ }
+ return ingestResponse.Error
}
- if isPermanentClientFailure(ingestResponse.StatusCode) {
- return consumererror.NewPermanent(ingestResponse.Error)
- }
- return ingestResponse.Error
+ return consumererror.NewPermanent(err)
}
return nil
}
diff --git a/exporter/logicmonitorexporter/internal/logs/sender_test.go b/exporter/logicmonitorexporter/internal/logs/sender_test.go
index 67f7355a6355..03624995987a 100644
--- a/exporter/logicmonitorexporter/internal/logs/sender_test.go
+++ b/exporter/logicmonitorexporter/internal/logs/sender_test.go
@@ -21,13 +21,9 @@ import (
)
func TestSendLogs(t *testing.T) {
- authParams := utils.AuthParams{
- AccessID: "testId",
- AccessKey: "testKey",
- BearerToken: "testToken",
- }
+
t.Run("should not return error", func(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdklogs.LMLogIngestResponse{
Success: true,
Message: "Accepted",
@@ -39,7 +35,7 @@ func TestSendLogs(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
- sender, err := NewSender(ctx, ts.URL, ts.Client(), authParams, zap.NewNop())
+ sender, err := NewSender(ctx, zap.NewNop(), buildLogIngestTestOpts(ts.URL, ts.Client())...)
assert.NoError(t, err)
logInput := translator.ConvertToLMLogInput("test msg", utils.NewTimestampFromTime(time.Now()).String(), map[string]any{"system.hostname": "test"}, map[string]any{"cloud.provider": "aws"})
@@ -49,7 +45,7 @@ func TestSendLogs(t *testing.T) {
})
t.Run("should return permanent failure error", func(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdklogs.LMLogIngestResponse{
Success: false,
Message: "The request is invalid. For example, it may be missing headers or the request body is incorrectly formatted.",
@@ -61,7 +57,7 @@ func TestSendLogs(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
- sender, err := NewSender(ctx, ts.URL, ts.Client(), authParams, zap.NewNop())
+ sender, err := NewSender(ctx, zap.NewNop(), buildLogIngestTestOpts(ts.URL, ts.Client())...)
assert.NoError(t, err)
logInput := translator.ConvertToLMLogInput("test msg", utils.NewTimestampFromTime(time.Now()).String(), map[string]any{"system.hostname": "test"}, map[string]any{"cloud.provider": "aws"})
@@ -72,7 +68,7 @@ func TestSendLogs(t *testing.T) {
})
t.Run("should not return permanent failure error", func(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdklogs.LMLogIngestResponse{
Success: false,
Message: "A dependency failed to respond within a reasonable time.",
@@ -84,7 +80,7 @@ func TestSendLogs(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
- sender, err := NewSender(ctx, ts.URL, ts.Client(), authParams, zap.NewNop())
+ sender, err := NewSender(ctx, zap.NewNop(), buildLogIngestTestOpts(ts.URL, ts.Client())...)
assert.NoError(t, err)
logInput := translator.ConvertToLMLogInput("test msg", utils.NewTimestampFromTime(time.Now()).String(), map[string]any{"system.hostname": "test"}, map[string]any{"cloud.provider": "aws"})
@@ -94,3 +90,19 @@ func TestSendLogs(t *testing.T) {
assert.Equal(t, false, consumererror.IsPermanent(err))
})
}
+
+func buildLogIngestTestOpts(endpoint string, client *http.Client) []lmsdklogs.Option {
+ authParams := utils.AuthParams{
+ AccessID: "testId",
+ AccessKey: "testKey",
+ BearerToken: "testToken",
+ }
+
+ opts := []lmsdklogs.Option{
+ lmsdklogs.WithLogBatchingDisabled(),
+ lmsdklogs.WithAuthentication(authParams),
+ lmsdklogs.WithHTTPClient(client),
+ lmsdklogs.WithEndpoint(endpoint),
+ }
+ return opts
+}
diff --git a/exporter/logicmonitorexporter/internal/metadata/generated_status.go b/exporter/logicmonitorexporter/internal/metadata/generated_status.go
index 0ebb1cbf0f50..08e3f10aaabf 100644
--- a/exporter/logicmonitorexporter/internal/metadata/generated_status.go
+++ b/exporter/logicmonitorexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("logicmonitor")
)
const (
- Type = "logicmonitor"
TracesStability = component.StabilityLevelAlpha
LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/logicmonitor")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/logicmonitor")
+}
diff --git a/exporter/logicmonitorexporter/internal/traces/package_test.go b/exporter/logicmonitorexporter/internal/traces/package_test.go
new file mode 100644
index 000000000000..d1398ba09b9b
--- /dev/null
+++ b/exporter/logicmonitorexporter/internal/traces/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package traces
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/logicmonitorexporter/internal/traces/sender.go b/exporter/logicmonitorexporter/internal/traces/sender.go
index b7ecc4cbefe2..208ca69a4b13 100644
--- a/exporter/logicmonitorexporter/internal/traces/sender.go
+++ b/exporter/logicmonitorexporter/internal/traces/sender.go
@@ -44,27 +44,23 @@ func NewSender(ctx context.Context, endpoint string, client *http.Client, authPa
func (s *Sender) SendTraces(ctx context.Context, td ptrace.Traces) error {
ingestResponse, err := s.traceIngestClient.SendTraces(ctx, td)
if err != nil {
- return consumererror.NewPermanent(err)
- }
- if ingestResponse != nil {
-
- if ingestResponse.Success {
- return nil
- }
- if ingestResponse.RetryAfter > 0 {
- return exporterhelper.NewThrottleRetry(ingestResponse.Error, time.Duration(ingestResponse.RetryAfter)*time.Second)
- }
- if ingestResponse.StatusCode == http.StatusMultiStatus {
- for _, status := range ingestResponse.MultiStatus {
- if isPermanentClientFailure(int(status.Code)) {
- return consumererror.NewPermanent(fmt.Errorf("permanent failure error %s, complete error log %w", status.Error, ingestResponse.Error))
+ if ingestResponse != nil {
+ if ingestResponse.RetryAfter > 0 {
+ return exporterhelper.NewThrottleRetry(ingestResponse.Error, time.Duration(ingestResponse.RetryAfter)*time.Second)
+ }
+ if ingestResponse.StatusCode == http.StatusMultiStatus {
+ for _, status := range ingestResponse.MultiStatus {
+ if isPermanentClientFailure(int(status.Code)) {
+ return consumererror.NewPermanent(fmt.Errorf("permanent failure error %s, complete error log %w", status.Error, ingestResponse.Error))
+ }
}
}
+ if isPermanentClientFailure(ingestResponse.StatusCode) {
+ return consumererror.NewPermanent(ingestResponse.Error)
+ }
+ return ingestResponse.Error
}
- if isPermanentClientFailure(ingestResponse.StatusCode) {
- return consumererror.NewPermanent(ingestResponse.Error)
- }
- return ingestResponse.Error
+ return consumererror.NewPermanent(err)
}
return nil
}
diff --git a/exporter/logicmonitorexporter/internal/traces/sender_test.go b/exporter/logicmonitorexporter/internal/traces/sender_test.go
index 59806dbead6a..c9b07aafdf5f 100644
--- a/exporter/logicmonitorexporter/internal/traces/sender_test.go
+++ b/exporter/logicmonitorexporter/internal/traces/sender_test.go
@@ -14,9 +14,8 @@ import (
"github.com/logicmonitor/lm-data-sdk-go/utils"
"github.com/stretchr/testify/assert"
"go.opentelemetry.io/collector/consumer/consumererror"
+ "go.opentelemetry.io/collector/pdata/testdata"
"go.uber.org/zap"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
)
func TestSendTraces(t *testing.T) {
@@ -26,7 +25,7 @@ func TestSendTraces(t *testing.T) {
BearerToken: "testToken",
}
t.Run("should not return error", func(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdktraces.LMTraceIngestResponse{
Success: true,
Message: "Accepted",
@@ -41,13 +40,13 @@ func TestSendTraces(t *testing.T) {
sender, err := NewSender(ctx, ts.URL, ts.Client(), authParams, zap.NewNop())
assert.NoError(t, err)
- err = sender.SendTraces(ctx, testdata.GenerateTracesOneSpan())
+ err = sender.SendTraces(ctx, testdata.GenerateTraces(1))
cancel()
assert.NoError(t, err)
})
t.Run("should return permanent failure error", func(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdktraces.LMTraceIngestResponse{
Success: false,
Message: "The request is invalid. For example, it may be missing headers or the request body is incorrectly formatted.",
@@ -62,14 +61,14 @@ func TestSendTraces(t *testing.T) {
sender, err := NewSender(ctx, ts.URL, ts.Client(), authParams, zap.NewNop())
assert.NoError(t, err)
- err = sender.SendTraces(ctx, testdata.GenerateTracesOneSpan())
+ err = sender.SendTraces(ctx, testdata.GenerateTraces(1))
cancel()
assert.Error(t, err)
assert.Equal(t, true, consumererror.IsPermanent(err))
})
t.Run("should not return permanent failure error", func(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdktraces.LMTraceIngestResponse{
Success: false,
Message: "A dependency failed to respond within a reasonable time.",
@@ -84,7 +83,7 @@ func TestSendTraces(t *testing.T) {
sender, err := NewSender(ctx, ts.URL, ts.Client(), authParams, zap.NewNop())
assert.NoError(t, err)
- err = sender.SendTraces(ctx, testdata.GenerateTracesOneSpan())
+ err = sender.SendTraces(ctx, testdata.GenerateTraces(1))
cancel()
assert.Error(t, err)
assert.Equal(t, false, consumererror.IsPermanent(err))
diff --git a/exporter/logicmonitorexporter/logs_exporter.go b/exporter/logicmonitorexporter/logs_exporter.go
index d79b500d8c95..5e25f40ad9d8 100644
--- a/exporter/logicmonitorexporter/logs_exporter.go
+++ b/exporter/logicmonitorexporter/logs_exporter.go
@@ -6,8 +6,10 @@ package logicmonitorexporter // import "github.com/open-telemetry/opentelemetry-
import (
"context"
"fmt"
+ "net/http"
"time"
+ lmsdklogs "github.com/logicmonitor/lm-data-sdk-go/api/logs"
"github.com/logicmonitor/lm-data-sdk-go/model"
"github.com/logicmonitor/lm-data-sdk-go/utils"
"github.com/logicmonitor/lm-data-sdk-go/utils/translator"
@@ -30,6 +32,7 @@ type logExporter struct {
config *Config
sender *logs.Sender
settings component.TelemetrySettings
+ cancel context.CancelFunc
}
// Create new logicmonitor logs exporter
@@ -43,18 +46,15 @@ func newLogsExporter(_ context.Context, cfg component.Config, set exporter.Creat
}
func (e *logExporter) start(ctx context.Context, host component.Host) error {
- client, err := e.config.HTTPClientSettings.ToClient(host, e.settings)
+ client, err := e.config.ClientConfig.ToClientContext(ctx, host, e.settings)
if err != nil {
return fmt.Errorf("failed to create http client: %w", err)
}
- authParams := utils.AuthParams{
- AccessID: e.config.APIToken.AccessID,
- AccessKey: string(e.config.APIToken.AccessKey),
- BearerToken: string(e.config.Headers["Authorization"]),
- }
+ opts := buildLogIngestOpts(e.config, client)
- e.sender, err = logs.NewSender(ctx, e.config.Endpoint, client, authParams, e.settings.Logger)
+ ctx, e.cancel = context.WithCancel(ctx)
+ e.sender, err = logs.NewSender(ctx, e.settings.Logger, opts...)
if err != nil {
return err
}
@@ -97,6 +97,35 @@ func (e *logExporter) PushLogData(ctx context.Context, lg plog.Logs) error {
return e.sender.SendLogs(ctx, payload)
}
+func (e *logExporter) shutdown(_ context.Context) error {
+ if e.cancel != nil {
+ e.cancel()
+ }
+
+ return nil
+}
+
+func buildLogIngestOpts(config *Config, client *http.Client) []lmsdklogs.Option {
+ authParams := utils.AuthParams{
+ AccessID: config.APIToken.AccessID,
+ AccessKey: string(config.APIToken.AccessKey),
+ BearerToken: string(config.Headers["Authorization"]),
+ }
+
+ opts := []lmsdklogs.Option{
+ lmsdklogs.WithLogBatchingDisabled(),
+ lmsdklogs.WithAuthentication(authParams),
+ lmsdklogs.WithHTTPClient(client),
+ lmsdklogs.WithEndpoint(config.Endpoint),
+ }
+
+ if config.Logs.ResourceMappingOperation != "" {
+ opts = append(opts, lmsdklogs.WithResourceMappingOperation(string(config.Logs.ResourceMappingOperation)))
+ }
+
+ return opts
+}
+
func timestampFromLogRecord(lr plog.LogRecord) pcommon.Timestamp {
if lr.Timestamp() != 0 {
return lr.Timestamp()
diff --git a/exporter/logicmonitorexporter/logs_exporter_test.go b/exporter/logicmonitorexporter/logs_exporter_test.go
index cab32946ffa8..2fbace5657cb 100644
--- a/exporter/logicmonitorexporter/logs_exporter_test.go
+++ b/exporter/logicmonitorexporter/logs_exporter_test.go
@@ -38,7 +38,7 @@ func Test_NewLogsExporter(t *testing.T) {
logger *zap.Logger
}{
config: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://example.logicmonitor.com/rest",
},
APIToken: APIToken{AccessID: "testid", AccessKey: "testkey"},
@@ -57,7 +57,7 @@ func Test_NewLogsExporter(t *testing.T) {
}
func TestPushLogData(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdklogs.LMLogIngestResponse{
Success: true,
Message: "Accepted",
@@ -68,7 +68,7 @@ func TestPushLogData(t *testing.T) {
defer ts.Close()
cfg := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: ts.URL,
},
APIToken: APIToken{AccessID: "testid", AccessKey: "testkey"},
@@ -110,6 +110,7 @@ func TestPushLogData(t *testing.T) {
exp := newLogsExporter(test.args.ctx, test.fields.config, set)
require.NoError(t, exp.start(test.args.ctx, componenttest.NewNopHost()))
+ defer func() { require.NoError(t, exp.shutdown(test.args.ctx)) }()
err := exp.PushLogData(test.args.ctx, test.args.lg)
assert.NoError(t, err)
})
diff --git a/exporter/logicmonitorexporter/metadata.yaml b/exporter/logicmonitorexporter/metadata.yaml
index b1c3f73a59ba..3934ecea1bed 100644
--- a/exporter/logicmonitorexporter/metadata.yaml
+++ b/exporter/logicmonitorexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: logicmonitor
+scope_name: otelcol/logicmonitor
status:
class: exporter
@@ -7,3 +8,11 @@ status:
distributions: [contrib]
codeowners:
active: [bogdandrutu, khyatigandhi6, avadhut123pisal]
+
+tests:
+ config:
+ endpoint: https://company.logicmonitor.com/rest
+ api_token:
+ access_id: "accessid"
+ access_key: "accesskey"
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/logicmonitorexporter/package_test.go b/exporter/logicmonitorexporter/package_test.go
new file mode 100644
index 000000000000..babe01d0f205
--- /dev/null
+++ b/exporter/logicmonitorexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package logicmonitorexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/logicmonitorexporter/testdata/config.yaml b/exporter/logicmonitorexporter/testdata/config.yaml
index fc6f2c4379dc..9dfeb246f3bc 100644
--- a/exporter/logicmonitorexporter/testdata/config.yaml
+++ b/exporter/logicmonitorexporter/testdata/config.yaml
@@ -13,3 +13,11 @@ logicmonitor/bearertoken:
endpoint: https://company.logicmonitor.com/rest
headers:
Authorization: Bearer
+# The following entry demonstrates how to set resource mapping operation (AND / OR).
+# The values are case-insensitive
+logicmonitor/resource-mapping-op:
+ logs:
+ resource_mapping_op: "OR"
+ endpoint: https://company.logicmonitor.com/rest
+ headers:
+ Authorization: Bearer
diff --git a/exporter/logicmonitorexporter/traces_exporter.go b/exporter/logicmonitorexporter/traces_exporter.go
index 6150535a3da6..e2cd8cb8d248 100644
--- a/exporter/logicmonitorexporter/traces_exporter.go
+++ b/exporter/logicmonitorexporter/traces_exporter.go
@@ -19,6 +19,7 @@ type tracesExporter struct {
config *Config
sender *traces.Sender
settings component.TelemetrySettings
+ cancel context.CancelFunc
}
// newTracesExporter creates new Logicmonitor Traces Exporter.
@@ -33,7 +34,7 @@ func newTracesExporter(_ context.Context, cfg component.Config, set exporter.Cre
}
func (e *tracesExporter) start(ctx context.Context, host component.Host) error {
- client, err := e.config.HTTPClientSettings.ToClient(host, e.settings)
+ client, err := e.config.ClientConfig.ToClientContext(ctx, host, e.settings)
if err != nil {
return fmt.Errorf("failed to create http client: %w", err)
}
@@ -43,6 +44,8 @@ func (e *tracesExporter) start(ctx context.Context, host component.Host) error {
AccessKey: string(e.config.APIToken.AccessKey),
BearerToken: string(e.config.Headers["Authorization"]),
}
+
+ ctx, e.cancel = context.WithCancel(ctx)
e.sender, err = traces.NewSender(ctx, e.config.Endpoint, client, authParams, e.settings.Logger)
if err != nil {
return err
@@ -53,3 +56,11 @@ func (e *tracesExporter) start(ctx context.Context, host component.Host) error {
func (e *tracesExporter) PushTraceData(ctx context.Context, td ptrace.Traces) error {
return e.sender.SendTraces(ctx, td)
}
+
+func (e *tracesExporter) shutdown(_ context.Context) error {
+ if e.cancel != nil {
+ e.cancel()
+ }
+
+ return nil
+}
diff --git a/exporter/logicmonitorexporter/traces_exporter_test.go b/exporter/logicmonitorexporter/traces_exporter_test.go
index ab914129eabf..27ce15ede5f0 100644
--- a/exporter/logicmonitorexporter/traces_exporter_test.go
+++ b/exporter/logicmonitorexporter/traces_exporter_test.go
@@ -21,7 +21,7 @@ import (
func Test_NewTracesExporter(t *testing.T) {
t.Run("should create Traces exporter", func(t *testing.T) {
config := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://example.logicmonitor.com/rest",
},
APIToken: APIToken{AccessID: "testid", AccessKey: "testkey"},
@@ -33,7 +33,7 @@ func Test_NewTracesExporter(t *testing.T) {
}
func TestPushTraceData(t *testing.T) {
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
response := lmsdktraces.LMTraceIngestResponse{
Success: true,
Message: "",
@@ -45,7 +45,7 @@ func TestPushTraceData(t *testing.T) {
params := exportertest.NewNopCreateSettings()
f := NewFactory()
config := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: ts.URL,
},
APIToken: APIToken{AccessID: "testid", AccessKey: "testkey"},
@@ -54,6 +54,7 @@ func TestPushTraceData(t *testing.T) {
exp, err := f.CreateTracesExporter(ctx, params, config)
assert.NoError(t, err)
assert.NoError(t, exp.Start(ctx, componenttest.NewNopHost()))
+ defer func() { assert.NoError(t, exp.Shutdown(ctx)) }()
testTraces := ptrace.NewTraces()
generateTraces().CopyTo(testTraces)
diff --git a/exporter/logzioexporter/README.md b/exporter/logzioexporter/README.md
index 0c0c6ff9d62c..7becbc6f090a 100644
--- a/exporter/logzioexporter/README.md
+++ b/exporter/logzioexporter/README.md
@@ -4,14 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, logs |
-| Distributions | [contrib], [aws], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Flogzio%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Flogzio) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Flogzio%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Flogzio) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@Doron-Bargo](https://www.github.com/Doron-Bargo), [@yotamloe](https://www.github.com/yotamloe) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@yotamloe](https://www.github.com/yotamloe) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
This exporter supports sending trace and log data to [Logz.io](https://www.logz.io)
@@ -172,3 +170,7 @@ service:
logs:
level: debug #activate debug mode
```
+
+#### Scope Name
+When using the logs exporter with logs originating from instrumentation library (i.e opentelemetry log4j2 appender), the scopeName field will be added (if the field is populated in the original log).
+```
\ No newline at end of file
diff --git a/exporter/logzioexporter/config.go b/exporter/logzioexporter/config.go
index 26e7e4c2f976..d0d12bfacc8e 100644
--- a/exporter/logzioexporter/config.go
+++ b/exporter/logzioexporter/config.go
@@ -9,20 +9,21 @@ import (
"github.com/hashicorp/go-hclog"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
// Config contains Logz.io specific configuration such as Account TracesToken, Region, etc.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"` // confighttp client settings https://pkg.go.dev/go.opentelemetry.io/collector/config/confighttp#HTTPClientSettings
- exporterhelper.QueueSettings `mapstructure:"sending_queue"` // exporter helper queue settings https://pkg.go.dev/go.opentelemetry.io/collector/exporter/exporterhelper#QueueSettings
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"` // exporter helper retry settings https://pkg.go.dev/go.opentelemetry.io/collector/exporter/exporterhelper#RetrySettings
- Token configopaque.String `mapstructure:"account_token"` // Your Logz.io Account Token, can be found at https://app.logz.io/#/dashboard/settings/general
- Region string `mapstructure:"region"` // Your Logz.io 2-letter region code, can be found at https://docs.logz.io/user-guide/accounts/account-region.html#available-regions
- CustomEndpoint string `mapstructure:"custom_endpoint"` // **Deprecation** Custom endpoint to ship traces to. Use only for dev and tests.
- DrainInterval int `mapstructure:"drain_interval"` // **Deprecation** Queue drain interval in seconds. Defaults to `3`.
- QueueCapacity int64 `mapstructure:"queue_capacity"` // **Deprecation** Queue capacity in bytes. Defaults to `20 * 1024 * 1024` ~ 20mb.
- QueueMaxLength int `mapstructure:"queue_max_length"` // **Deprecation** Max number of items allowed in the queue. Defaults to `500000`.
+ confighttp.ClientConfig `mapstructure:",squash"` // confighttp client settings https://pkg.go.dev/go.opentelemetry.io/collector/config/confighttp#ClientConfig
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"` // exporter helper queue settings https://pkg.go.dev/go.opentelemetry.io/collector/exporter/exporterhelper#QueueSettings
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"` // exporter helper retry settings https://pkg.go.dev/go.opentelemetry.io/collector/exporter/exporterhelper#RetrySettings
+ Token configopaque.String `mapstructure:"account_token"` // Your Logz.io Account Token, can be found at https://app.logz.io/#/dashboard/settings/general
+ Region string `mapstructure:"region"` // Your Logz.io 2-letter region code, can be found at https://docs.logz.io/user-guide/accounts/account-region.html#available-regions
+ CustomEndpoint string `mapstructure:"custom_endpoint"` // **Deprecation** Custom endpoint to ship traces to. Use only for dev and tests.
+ DrainInterval int `mapstructure:"drain_interval"` // **Deprecation** Queue drain interval in seconds. Defaults to `3`.
+ QueueCapacity int64 `mapstructure:"queue_capacity"` // **Deprecation** Queue capacity in bytes. Defaults to `20 * 1024 * 1024` ~ 20mb.
+ QueueMaxLength int `mapstructure:"queue_max_length"` // **Deprecation** Max number of items allowed in the queue. Defaults to `500000`.
}
func (c *Config) Validate() error {
@@ -51,6 +52,6 @@ func (c *Config) checkAndWarnDeprecatedOptions(logger hclog.Logger) {
if c.CustomEndpoint != "" {
logger.Warn("You are using the deprecated `custom_endpoint` option that will be removed in the next release; please use `endpoint` configuration instead: https://github.com/open-telemetry/opentelemetry-collector/tree/main/config/confighttp")
logger.Warn("Mapping `custom_endpoint` -> `Endpoint`")
- c.HTTPClientSettings.Endpoint = c.CustomEndpoint
+ c.ClientConfig.Endpoint = c.CustomEndpoint
}
}
diff --git a/exporter/logzioexporter/config_test.go b/exporter/logzioexporter/config_test.go
index 839a501956e9..a85ca894239d 100644
--- a/exporter/logzioexporter/config_test.go
+++ b/exporter/logzioexporter/config_test.go
@@ -14,6 +14,7 @@ import (
"go.opentelemetry.io/collector/config/configcompression"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
@@ -35,16 +36,16 @@ func TestLoadConfig(t *testing.T) {
Token: "token",
Region: "eu",
}
- expected.RetrySettings = exporterhelper.NewDefaultRetrySettings()
- expected.RetrySettings.MaxInterval = 5 * time.Second
+ expected.BackOffConfig = configretry.NewDefaultBackOffConfig()
+ expected.BackOffConfig.MaxInterval = 5 * time.Second
expected.QueueSettings = exporterhelper.NewDefaultQueueSettings()
expected.QueueSettings.Enabled = false
- expected.HTTPClientSettings = confighttp.HTTPClientSettings{
+ expected.ClientConfig = confighttp.ClientConfig{
Endpoint: "",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
// Default to gzip compression
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
}
@@ -64,14 +65,14 @@ func TestDefaultLoadConfig(t *testing.T) {
expected := &Config{
Token: "logzioTESTtoken",
}
- expected.RetrySettings = exporterhelper.NewDefaultRetrySettings()
+ expected.BackOffConfig = configretry.NewDefaultBackOffConfig()
expected.QueueSettings = exporterhelper.NewDefaultQueueSettings()
- expected.HTTPClientSettings = confighttp.HTTPClientSettings{
+ expected.ClientConfig = confighttp.ClientConfig{
Endpoint: "",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
// Default to gzip compression
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
}
@@ -82,17 +83,17 @@ func TestCheckAndWarnDeprecatedOptions(t *testing.T) {
// Config with legacy options
actualCfg := &Config{
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
Token: "logzioTESTtoken",
CustomEndpoint: "https://api.example.com",
QueueMaxLength: 10,
DrainInterval: 10,
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
Timeout: 10 * time.Second,
Headers: map[string]configopaque.String{},
// Default to gzip compression
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
},
@@ -109,14 +110,14 @@ func TestCheckAndWarnDeprecatedOptions(t *testing.T) {
CustomEndpoint: "https://api.example.com",
QueueMaxLength: 10,
DrainInterval: 10,
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://api.example.com",
Timeout: 10 * time.Second,
Headers: map[string]configopaque.String{},
// Default to gzip compression
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
},
diff --git a/exporter/logzioexporter/example/config.yaml b/exporter/logzioexporter/example/config.yaml
index 2e11ba7d6c05..57f47ffd4b4c 100644
--- a/exporter/logzioexporter/example/config.yaml
+++ b/exporter/logzioexporter/example/config.yaml
@@ -1,5 +1,6 @@
receivers:
opencensus:
+ endpoint: :55678
zipkin:
endpoint: :9411
jaeger:
diff --git a/exporter/logzioexporter/exporter.go b/exporter/logzioexporter/exporter.go
index df726d33f175..2b00d86e57ce 100644
--- a/exporter/logzioexporter/exporter.go
+++ b/exporter/logzioexporter/exporter.go
@@ -11,6 +11,7 @@ import (
"fmt"
"io"
"net/http"
+ "reflect"
"strconv"
"time"
@@ -21,6 +22,7 @@ import (
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/ptrace"
"google.golang.org/genproto/googleapis/rpc/status"
@@ -70,7 +72,7 @@ func newLogzioTracesExporter(config *Config, set exporter.CreateSettings) (expor
if err != nil {
return nil, err
}
- exporter.config.HTTPClientSettings.Endpoint, err = generateEndpoint(config)
+ exporter.config.ClientConfig.Endpoint, err = generateEndpoint(config)
if err != nil {
return nil, err
}
@@ -84,7 +86,7 @@ func newLogzioTracesExporter(config *Config, set exporter.CreateSettings) (expor
// disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
exporterhelper.WithQueue(config.QueueSettings),
- exporterhelper.WithRetry(config.RetrySettings),
+ exporterhelper.WithRetry(config.BackOffConfig),
)
}
func newLogzioLogsExporter(config *Config, set exporter.CreateSettings) (exporter.Logs, error) {
@@ -92,7 +94,7 @@ func newLogzioLogsExporter(config *Config, set exporter.CreateSettings) (exporte
if err != nil {
return nil, err
}
- exporter.config.HTTPClientSettings.Endpoint, err = generateEndpoint(config)
+ exporter.config.ClientConfig.Endpoint, err = generateEndpoint(config)
if err != nil {
return nil, err
}
@@ -106,12 +108,12 @@ func newLogzioLogsExporter(config *Config, set exporter.CreateSettings) (exporte
// disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
exporterhelper.WithQueue(config.QueueSettings),
- exporterhelper.WithRetry(config.RetrySettings),
+ exporterhelper.WithRetry(config.BackOffConfig),
)
}
-func (exporter *logzioExporter) start(_ context.Context, host component.Host) error {
- client, err := exporter.config.HTTPClientSettings.ToClient(host, exporter.settings)
+func (exporter *logzioExporter) start(ctx context.Context, host component.Host) error {
+ client, err := exporter.config.ClientConfig.ToClientContext(ctx, host, exporter.settings)
if err != nil {
return err
}
@@ -127,26 +129,56 @@ func (exporter *logzioExporter) pushLogData(ctx context.Context, ld plog.Logs) e
scopeLogs := resourceLogs.At(i).ScopeLogs()
for j := 0; j < scopeLogs.Len(); j++ {
logRecords := scopeLogs.At(j).LogRecords()
+ scope := scopeLogs.At(j).Scope()
+ details := mergeMapEntries(resource.Attributes(), scope.Attributes())
+ details.PutStr(`scopeName`, scope.Name())
for k := 0; k < logRecords.Len(); k++ {
log := logRecords.At(k)
- jsonLog := convertLogRecordToJSON(log, resource)
- logzioLog, err := json.Marshal(jsonLog)
+ jsonLog, err := json.Marshal(convertLogRecordToJSON(log, details))
if err != nil {
return err
}
- _, err = dataBuffer.Write(append(logzioLog, '\n'))
+ _, err = dataBuffer.Write(append(jsonLog, '\n'))
if err != nil {
return err
}
}
}
}
- err := exporter.export(ctx, exporter.config.HTTPClientSettings.Endpoint, dataBuffer.Bytes())
+ err := exporter.export(ctx, exporter.config.ClientConfig.Endpoint, dataBuffer.Bytes())
// reset the data buffer after each export to prevent duplicated data
dataBuffer.Reset()
return err
}
+func mergeMapEntries(maps ...pcommon.Map) pcommon.Map {
+ res := map[string]any{}
+ for _, m := range maps {
+ for key, val := range m.AsRaw() {
+ // Check if the key was already added
+ if resMapValue, keyExists := res[key]; keyExists {
+ rt := reflect.TypeOf(resMapValue)
+ switch rt.Kind() {
+ case reflect.Slice:
+ res[key] = append(resMapValue.([]any), val)
+ default:
+ // Create a new slice and append values if the key exists:
+ valslice := []any{}
+ res[key] = append(valslice, resMapValue, val)
+ }
+ } else {
+ res[key] = val
+ }
+ }
+ }
+ pcommonRes := pcommon.NewMap()
+ err := pcommonRes.FromRaw(res)
+ if err != nil {
+ return pcommon.Map{}
+ }
+ return pcommonRes
+}
+
func (exporter *logzioExporter) pushTraceData(ctx context.Context, traces ptrace.Traces) error {
// a buffer to store logzio span and services bytes
var dataBuffer bytes.Buffer
@@ -188,7 +220,7 @@ func (exporter *logzioExporter) pushTraceData(ctx context.Context, traces ptrace
}
}
}
- err = exporter.export(ctx, exporter.config.HTTPClientSettings.Endpoint, dataBuffer.Bytes())
+ err = exporter.export(ctx, exporter.config.ClientConfig.Endpoint, dataBuffer.Bytes())
// reset the data buffer after each export to prevent duplicated data
dataBuffer.Reset()
return err
diff --git a/exporter/logzioexporter/exporter_test.go b/exporter/logzioexporter/exporter_test.go
index d37e138bf77f..190afaa825c6 100644
--- a/exporter/logzioexporter/exporter_test.go
+++ b/exporter/logzioexporter/exporter_test.go
@@ -25,9 +25,8 @@ import (
"go.opentelemetry.io/collector/pdata/pcommon"
"go.opentelemetry.io/collector/pdata/plog"
"go.opentelemetry.io/collector/pdata/ptrace"
+ "go.opentelemetry.io/collector/pdata/testdata"
conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
)
const (
@@ -51,11 +50,9 @@ func fillLogOne(log plog.LogRecord) {
log.SetSeverityText("Info")
log.SetSpanID([8]byte{0x01, 0x02, 0x04, 0x08})
log.SetTraceID([16]byte{0x08, 0x04, 0x02, 0x01})
-
attrs := log.Attributes()
attrs.PutStr("app", "server")
attrs.PutDouble("instance_num", 1)
-
// nested body map
attMap := log.Body().SetEmptyMap()
attMap.PutDouble("23", 45)
@@ -71,7 +68,6 @@ func fillLogTwo(log plog.LogRecord) {
log.SetDroppedAttributesCount(1)
log.SetSeverityNumber(plog.SeverityNumberInfo)
log.SetSeverityText("Info")
-
attrs := log.Attributes()
attrs.PutStr("customer", "acme")
attrs.PutDouble("number", 64)
@@ -79,11 +75,11 @@ func fillLogTwo(log plog.LogRecord) {
attrs.PutStr("env", "dev")
log.Body().SetStr("something happened")
}
+
func fillLogNoTimestamp(log plog.LogRecord) {
log.SetDroppedAttributesCount(1)
log.SetSeverityNumber(plog.SeverityNumberInfo)
log.SetSeverityText("Info")
-
attrs := log.Attributes()
attrs.PutStr("customer", "acme")
attrs.PutDouble("number", 64)
@@ -93,8 +89,9 @@ func fillLogNoTimestamp(log plog.LogRecord) {
}
func generateLogsOneEmptyTimestamp() plog.Logs {
- ld := testdata.GenerateLogsOneEmptyLogRecord()
+ ld := testdata.GenerateLogs(1)
logs := ld.ResourceLogs().At(0).ScopeLogs().At(0).LogRecords()
+ ld.ResourceLogs().At(0).ScopeLogs().At(0).Scope().SetName("logScopeName")
fillLogOne(logs.At(0))
fillLogNoTimestamp(logs.AppendEmpty())
return ld
@@ -186,18 +183,18 @@ func TestExportErrors(tester *testing.T) {
{http.StatusBadRequest},
}
for _, test := range ExportErrorsTests {
- server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+ server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
rw.WriteHeader(test.status)
}))
cfg := &Config{
Region: "",
Token: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: server.URL,
},
}
td := newTestTracesWithAttributes()
- ld := testdata.GenerateLogsManyLogRecordsSameResource(10)
+ ld := testdata.GenerateLogs(10)
err := testTracesExporter(td, tester, cfg)
fmt.Println(err.Error())
require.Error(tester, err)
@@ -223,13 +220,11 @@ func TestNullExporterConfig(tester *testing.T) {
func gUnzipData(data []byte) (resData []byte, err error) {
b := bytes.NewBuffer(data)
-
var r io.Reader
r, err = gzip.NewReader(b)
if err != nil {
return
}
-
var resB bytes.Buffer
_, err = resB.ReadFrom(r)
if err != nil {
@@ -248,9 +243,9 @@ func TestPushTraceData(tester *testing.T) {
cfg := Config{
Token: "token",
Region: "",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: server.URL,
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
}
defer server.Close()
@@ -281,13 +276,13 @@ func TestPushLogsData(tester *testing.T) {
cfg := Config{
Token: "token",
Region: "",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: server.URL,
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
}
defer server.Close()
- ld := testdata.GenerateLogsManyLogRecordsSameResource(2)
+ ld := testdata.GenerateLogs(2)
res := ld.ResourceLogs().At(0).Resource()
res.Attributes().PutStr(conventions.AttributeServiceName, testService)
res.Attributes().PutStr(conventions.AttributeHostName, testHost)
@@ -299,5 +294,33 @@ func TestPushLogsData(tester *testing.T) {
assert.NoError(tester, json.Unmarshal([]byte(requests[0]), &jsonLog))
assert.Equal(tester, testHost, jsonLog["host.name"])
assert.Equal(tester, testService, jsonLog["service.name"])
+}
+func TestMergeMapEntries(tester *testing.T) {
+ var firstMap = pcommon.NewMap()
+ var secondMap = pcommon.NewMap()
+ var expectedMap = pcommon.NewMap()
+ firstMap.PutStr("name", "exporter")
+ firstMap.PutStr("host", "localhost")
+ firstMap.PutStr("instanceNum", "1")
+ firstMap.PutInt("id", 4)
+ secondMap.PutStr("tag", "test")
+ secondMap.PutStr("host", "ec2")
+ secondMap.PutInt("instanceNum", 3)
+ secondMap.PutEmptyMap("id").PutInt("instance_a", 1)
+ expectedMap.PutStr("name", "exporter")
+ expectedMap.PutStr("tag", "test")
+ var slice = expectedMap.PutEmptySlice("host")
+ slice.AppendEmpty().SetStr("localhost")
+ slice.AppendEmpty().SetStr("ec2")
+ slice = expectedMap.PutEmptySlice("instanceNum")
+ var val = slice.AppendEmpty()
+ val.SetStr("1")
+ val = slice.AppendEmpty()
+ val.SetInt(3)
+ slice = expectedMap.PutEmptySlice("id")
+ slice.AppendEmpty().SetInt(4)
+ slice.AppendEmpty().SetEmptyMap().PutInt("instance_a", 1)
+ var mergedMap = mergeMapEntries(firstMap, secondMap)
+ assert.Equal(tester, expectedMap.AsRaw(), mergedMap.AsRaw())
}
diff --git a/exporter/logzioexporter/factory.go b/exporter/logzioexporter/factory.go
index 8733ff082c71..6b65fcd83fb8 100644
--- a/exporter/logzioexporter/factory.go
+++ b/exporter/logzioexporter/factory.go
@@ -16,6 +16,7 @@ import (
"go.opentelemetry.io/collector/config/configcompression"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -36,14 +37,14 @@ func createDefaultConfig() component.Config {
return &Config{
Region: "",
Token: "",
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
// Default to gzip compression
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
},
@@ -75,13 +76,13 @@ func getListenerURL(region string) string {
}
func generateEndpoint(cfg *Config) (string, error) {
- defaultURL := fmt.Sprintf("%s/?token=%s", getListenerURL(""), cfg.Token)
+ defaultURL := fmt.Sprintf("%s/?token=%s", getListenerURL(""), string(cfg.Token))
switch {
- case cfg.HTTPClientSettings.Endpoint != "":
- return cfg.HTTPClientSettings.Endpoint, nil
+ case cfg.ClientConfig.Endpoint != "":
+ return cfg.ClientConfig.Endpoint, nil
case cfg.Region != "":
- return fmt.Sprintf("%s/?token=%s", getListenerURL(cfg.Region), cfg.Token), nil
- case cfg.HTTPClientSettings.Endpoint == "" && cfg.Region == "":
+ return fmt.Sprintf("%s/?token=%s", getListenerURL(cfg.Region), string(cfg.Token)), nil
+ case cfg.ClientConfig.Endpoint == "" && cfg.Region == "":
return defaultURL, errors.New("failed to generate endpoint, Endpoint or Region must be set")
default:
return defaultURL, nil
diff --git a/exporter/logzioexporter/factory_test.go b/exporter/logzioexporter/factory_test.go
index b42cb23da224..60624fa977cd 100644
--- a/exporter/logzioexporter/factory_test.go
+++ b/exporter/logzioexporter/factory_test.go
@@ -38,7 +38,7 @@ func TestCreateTracesExporter(t *testing.T) {
params := exportertest.NewNopCreateSettings()
exporter, err := factory.CreateTracesExporter(context.Background(), params, cfg)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, exporter)
}
@@ -63,7 +63,7 @@ func TestGenerateUrl(t *testing.T) {
cfg := &Config{
Region: test.region,
Token: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: test.endpoint,
},
}
diff --git a/exporter/logzioexporter/generated_component_test.go b/exporter/logzioexporter/generated_component_test.go
new file mode 100644
index 000000000000..a9cb10971d20
--- /dev/null
+++ b/exporter/logzioexporter/generated_component_test.go
@@ -0,0 +1,133 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package logzioexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/logzioexporter/go.mod b/exporter/logzioexporter/go.mod
index 14e2aa7f8aa2..2fda17b46d2a 100644
--- a/exporter/logzioexporter/go.mod
+++ b/exporter/logzioexporter/go.mod
@@ -1,77 +1,85 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/logzioexporter
-go 1.20
+go 1.21
require (
- github.com/hashicorp/go-hclog v1.5.0
- github.com/jaegertracing/jaeger v1.41.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configcompression v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d
- google.golang.org/protobuf v1.31.0
+ github.com/hashicorp/go-hclog v1.6.3
+ github.com/jaegertracing/jaeger v1.55.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configcompression v1.5.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80
+ google.golang.org/protobuf v1.33.0
)
require (
github.com/apache/thrift v0.19.0 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/fatih/color v1.13.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/fatih/color v1.14.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/mattn/go-colorable v0.1.12 // indirect
- github.com/mattn/go-isatty v0.0.14 // indirect
+ github.com/knadh/koanf/v2 v2.1.1 // indirect
+ github.com/mattn/go-colorable v0.1.13 // indirect
+ github.com/mattn/go-isatty v0.0.17 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.49.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/atomic v1.10.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/grpc v1.59.0 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/logzioexporter/go.sum b/exporter/logzioexporter/go.sum
index 9f06878f1ddd..791dc08e4d2b 100644
--- a/exporter/logzioexporter/go.sum
+++ b/exporter/logzioexporter/go.sum
@@ -1,99 +1,75 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
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/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
+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/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
+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.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
+github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M=
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/jaegertracing/jaeger v1.41.0 h1:vVNky8dP46M2RjGaZ7qRENqylW+tBFay3h57N16Ip7M=
-github.com/jaegertracing/jaeger v1.41.0/go.mod h1:SIkAT75iVmA9U+mESGYuMH6UQv6V9Qy4qxo0lwfCQAc=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
-github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40=
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.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
-github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y=
github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+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/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -101,119 +77,102 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
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/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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.49.0 h1:ToNTdK4zSnPVJmh698mGFkDor9wBI/iGaJy5dbH1EgI=
+github.com/prometheus/common v0.49.0/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
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.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
-go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -222,17 +181,14 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -240,38 +196,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/logzioexporter/internal/metadata/generated_status.go b/exporter/logzioexporter/internal/metadata/generated_status.go
index 53e889139196..0a0ec9b10118 100644
--- a/exporter/logzioexporter/internal/metadata/generated_status.go
+++ b/exporter/logzioexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("logzio")
)
const (
- Type = "logzio"
TracesStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/logzio")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/logzio")
+}
diff --git a/exporter/logzioexporter/jsonlog.go b/exporter/logzioexporter/jsonlog.go
index 54a9341ef268..391b61e166ea 100644
--- a/exporter/logzioexporter/jsonlog.go
+++ b/exporter/logzioexporter/jsonlog.go
@@ -11,7 +11,7 @@ import (
)
// convertLogRecordToJSON Takes `plog.LogRecord` and `pcommon.Resource` input, outputs byte array that represents the log record as json string
-func convertLogRecordToJSON(log plog.LogRecord, resource pcommon.Resource) map[string]any {
+func convertLogRecordToJSON(log plog.LogRecord, attributes pcommon.Map) map[string]any {
jsonLog := map[string]any{}
if spanID := log.SpanID(); !spanID.IsEmpty() {
jsonLog["spanID"] = hex.EncodeToString(spanID[:])
@@ -26,13 +26,9 @@ func convertLogRecordToJSON(log plog.LogRecord, resource pcommon.Resource) map[s
if log.Timestamp().AsTime().UnixMilli() != 0 {
jsonLog["@timestamp"] = log.Timestamp().AsTime().UnixMilli()
}
- // add resource attributes to each json log
- resource.Attributes().Range(func(k string, v pcommon.Value) bool {
- jsonLog[k] = v.AsRaw()
- return true
- })
- // add log record attributes to each json log
- log.Attributes().Range(func(k string, v pcommon.Value) bool {
+
+ // Add merged attributed to each json log
+ attributes.Range(func(k string, v pcommon.Value) bool {
jsonLog[k] = v.AsRaw()
return true
})
diff --git a/exporter/logzioexporter/jsonlog_test.go b/exporter/logzioexporter/jsonlog_test.go
index c95fb7059ac9..6d75ceecc148 100644
--- a/exporter/logzioexporter/jsonlog_test.go
+++ b/exporter/logzioexporter/jsonlog_test.go
@@ -70,24 +70,25 @@ func TestConvertLogRecordToJSON(t *testing.T) {
},
}
for _, test := range convertLogRecordToJSONTests {
- output := convertLogRecordToJSON(test.log, test.resource)
+ output := convertLogRecordToJSON(test.log, test.log.Attributes())
require.Equal(t, output, test.expected)
}
-
}
+
func TestSetTimeStamp(t *testing.T) {
var recordedRequests []byte
server := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
recordedRequests, _ = io.ReadAll(req.Body)
rw.WriteHeader(http.StatusOK)
}))
+ defer func() { server.Close() }()
ld := generateLogsOneEmptyTimestamp()
cfg := &Config{
Region: "us",
Token: "token",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: server.URL,
- Compression: configcompression.Gzip,
+ Compression: configcompression.TypeGzip,
},
}
var err error
diff --git a/exporter/logzioexporter/metadata.yaml b/exporter/logzioexporter/metadata.yaml
index 28d24cc9d2ad..1b4fb9cd2046 100644
--- a/exporter/logzioexporter/metadata.yaml
+++ b/exporter/logzioexporter/metadata.yaml
@@ -1,9 +1,15 @@
type: logzio
+scope_name: otelcol/logzio
status:
class: exporter
stability:
beta: [traces, logs]
- distributions: [contrib, observiq, aws]
+ distributions: [contrib]
codeowners:
- active: [Doron-Bargo, yotamloe]
+ active: [yotamloe]
+
+tests:
+ config:
+ endpoint: "172.0.0.1:8080:"
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/logzioexporter/package_test.go b/exporter/logzioexporter/package_test.go
new file mode 100644
index 000000000000..475e5299340f
--- /dev/null
+++ b/exporter/logzioexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package logzioexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/lokiexporter/README.md b/exporter/lokiexporter/README.md
index 8a1f4a3485af..d7e711f821dc 100644
--- a/exporter/lokiexporter/README.md
+++ b/exporter/lokiexporter/README.md
@@ -4,13 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: logs |
-| Distributions | [contrib], [observiq] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Floki%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Floki) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Floki%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Floki) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@gramidt](https://www.github.com/gramidt), [@gouthamve](https://www.github.com/gouthamve), [@jpkrohling](https://www.github.com/jpkrohling), [@mar4uk](https://www.github.com/mar4uk) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
Exports data via HTTP to [Loki](https://grafana.com/docs/loki/latest/).
diff --git a/exporter/lokiexporter/config.go b/exporter/lokiexporter/config.go
index 4067cdf989d6..1ac225728286 100644
--- a/exporter/lokiexporter/config.go
+++ b/exporter/lokiexporter/config.go
@@ -8,14 +8,15 @@ import (
"net/url"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
// Config defines configuration for Loki exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ confighttp.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
DefaultLabelsEnabled map[string]bool `mapstructure:"default_labels_enabled"`
}
diff --git a/exporter/lokiexporter/config_test.go b/exporter/lokiexporter/config_test.go
index 656a6e510b5c..dfdda9c34e26 100644
--- a/exporter/lokiexporter/config_test.go
+++ b/exporter/lokiexporter/config_test.go
@@ -15,6 +15,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -35,13 +36,13 @@ func TestLoadConfigNewExporter(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "allsettings"),
expected: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Headers: map[string]configopaque.String{
"X-Custom-Header": "loki_rocks",
},
Endpoint: "https://loki:3100/loki/api/v1/push",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/var/lib/mycert.pem",
CertFile: "certfile",
KeyFile: "keyfile",
@@ -52,7 +53,7 @@ func TestLoadConfigNewExporter(t *testing.T) {
WriteBufferSize: 345,
Timeout: time.Second * 10,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -109,7 +110,7 @@ func TestConfigValidate(t *testing.T) {
{
desc: "Config is valid",
cfg: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://loki.example.com",
},
},
diff --git a/exporter/lokiexporter/exporter.go b/exporter/lokiexporter/exporter.go
index dddf72606099..c037c5244d95 100644
--- a/exporter/lokiexporter/exporter.go
+++ b/exporter/lokiexporter/exporter.go
@@ -15,13 +15,14 @@ import (
"github.com/gogo/protobuf/proto"
"github.com/golang/snappy"
- "go.opencensus.io/stats"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/otel/metric"
"go.uber.org/multierr"
"go.uber.org/zap"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter/internal/metadata"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/loki"
)
@@ -35,15 +36,28 @@ type lokiExporter struct {
settings component.TelemetrySettings
client *http.Client
wg sync.WaitGroup
+
+ lokiExporterFailedToSendLogRecordsDueToMissingLabels metric.Int64Counter
}
-func newExporter(config *Config, settings component.TelemetrySettings) *lokiExporter {
+func newExporter(config *Config, settings component.TelemetrySettings) (*lokiExporter, error) {
settings.Logger.Info("using the new Loki exporter")
+ count, err := metadata.Meter(settings).Int64Counter(
+ "lokiexporter_send_failed_due_to_missing_labels",
+ metric.WithDescription("Number of log records failed to send because labels were missing"),
+ metric.WithUnit("1"),
+ )
+
+ if err != nil {
+ return nil, err
+ }
+
return &lokiExporter{
config: config,
settings: settings,
- }
+ lokiExporterFailedToSendLogRecordsDueToMissingLabels: count,
+ }, nil
}
func (l *lokiExporter) pushLogData(ctx context.Context, ld plog.Logs) error {
@@ -53,7 +67,7 @@ func (l *lokiExporter) pushLogData(ctx context.Context, ld plog.Logs) error {
for tenant, request := range requests {
err := l.sendPushRequest(ctx, tenant, request, ld)
if isErrMissingLabels(err) {
- stats.Record(ctx, lokiExporterFailedToSendLogRecordsDueToMissingLabels.M(int64(ld.LogRecordCount())))
+ l.lokiExporterFailedToSendLogRecordsDueToMissingLabels.Add(ctx, int64(ld.LogRecordCount()))
}
errs = multierr.Append(errs, err)
@@ -81,12 +95,12 @@ func (l *lokiExporter) sendPushRequest(ctx context.Context, tenant string, reque
return consumererror.NewPermanent(err)
}
- req, err := http.NewRequestWithContext(ctx, "POST", l.config.HTTPClientSettings.Endpoint, bytes.NewReader(buf))
+ req, err := http.NewRequestWithContext(ctx, "POST", l.config.ClientConfig.Endpoint, bytes.NewReader(buf))
if err != nil {
return consumererror.NewPermanent(err)
}
- for k, v := range l.config.HTTPClientSettings.Headers {
+ for k, v := range l.config.ClientConfig.Headers {
req.Header.Set(k, string(v))
}
req.Header.Set("Content-Type", "application/x-protobuf")
@@ -134,8 +148,8 @@ func encode(pb proto.Message) ([]byte, error) {
return buf, nil
}
-func (l *lokiExporter) start(_ context.Context, host component.Host) (err error) {
- client, err := l.config.HTTPClientSettings.ToClient(host, l.settings)
+func (l *lokiExporter) start(ctx context.Context, host component.Host) (err error) {
+ client, err := l.config.ClientConfig.ToClientContext(ctx, host, l.settings)
if err != nil {
return err
}
diff --git a/exporter/lokiexporter/exporter_test.go b/exporter/lokiexporter/exporter_test.go
index 6473f7f9cabe..6fbb09b3b3f0 100644
--- a/exporter/lokiexporter/exporter_test.go
+++ b/exporter/lokiexporter/exporter_test.go
@@ -63,7 +63,7 @@ func TestPushLogData(t *testing.T) {
actualPushRequest := &push.PushRequest{}
// prepare
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {
encPayload, err := io.ReadAll(r.Body)
require.NoError(t, err)
@@ -76,7 +76,7 @@ func TestPushLogData(t *testing.T) {
defer ts.Close()
cfg := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: ts.URL,
},
}
@@ -239,7 +239,7 @@ func TestLogsToLokiRequestWithGroupingByTenant(t *testing.T) {
actualPushRequestPerTenant := map[string]*push.PushRequest{}
// prepare
- ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ ts := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {
encPayload, err := io.ReadAll(r.Body)
require.NoError(t, err)
@@ -255,7 +255,7 @@ func TestLogsToLokiRequestWithGroupingByTenant(t *testing.T) {
defer ts.Close()
cfg := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: ts.URL,
},
}
diff --git a/exporter/lokiexporter/factory.go b/exporter/lokiexporter/factory.go
index dce14b140890..d82d0ee1355f 100644
--- a/exporter/lokiexporter/factory.go
+++ b/exporter/lokiexporter/factory.go
@@ -9,10 +9,10 @@ import (
"context"
"time"
- "go.opencensus.io/stats/view"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -21,8 +21,6 @@ import (
// NewFactory creates a factory for the legacy Loki exporter.
func NewFactory() exporter.Factory {
- _ = view.Register(metricViews()...)
-
return exporter.NewFactory(
metadata.Type,
createDefaultConfig,
@@ -32,14 +30,14 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
Timeout: 30 * time.Second,
Headers: map[string]configopaque.String{},
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
},
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
DefaultLabelsEnabled: map[string]bool{
"exporter": true,
@@ -52,7 +50,11 @@ func createDefaultConfig() component.Config {
func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config component.Config) (exporter.Logs, error) {
exporterConfig := config.(*Config)
- exp := newExporter(exporterConfig, set.TelemetrySettings)
+ exp, err := newExporter(exporterConfig, set.TelemetrySettings)
+
+ if err != nil {
+ return nil, err
+ }
return exporterhelper.NewLogsExporter(
ctx,
@@ -61,7 +63,7 @@ func createLogsExporter(ctx context.Context, set exporter.CreateSettings, config
exp.pushLogData,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(exporterConfig.RetrySettings),
+ exporterhelper.WithRetry(exporterConfig.BackOffConfig),
exporterhelper.WithQueue(exporterConfig.QueueSettings),
exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.stop),
diff --git a/exporter/lokiexporter/factory_test.go b/exporter/lokiexporter/factory_test.go
index 9eee92d276d1..a3779f53a4e7 100644
--- a/exporter/lokiexporter/factory_test.go
+++ b/exporter/lokiexporter/factory_test.go
@@ -22,47 +22,51 @@ func TestExporter_new(t *testing.T) {
t.Run("with valid config", func(t *testing.T) {
config := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: validEndpoint,
},
}
- exp := newExporter(config, componenttest.NewNopTelemetrySettings())
+ exp, err := newExporter(config, componenttest.NewNopTelemetrySettings())
+ require.NoError(t, err)
require.NotNil(t, exp)
})
}
func TestExporter_startReturnsNillWhenValidConfig(t *testing.T) {
config := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: validEndpoint,
},
}
- exp := newExporter(config, componenttest.NewNopTelemetrySettings())
+ exp, err := newExporter(config, componenttest.NewNopTelemetrySettings())
+ require.NoError(t, err)
require.NotNil(t, exp)
require.NoError(t, exp.start(context.Background(), componenttest.NewNopHost()))
}
func TestExporter_startReturnsErrorWhenInvalidHttpClientSettings(t *testing.T) {
config := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
- CustomRoundTripper: func(next http.RoundTripper) (http.RoundTripper, error) {
- return nil, fmt.Errorf("this causes HTTPClientSettings.ToClient() to error")
+ CustomRoundTripper: func(_ http.RoundTripper) (http.RoundTripper, error) {
+ return nil, fmt.Errorf("this causes ClientConfig.ToClient() to error")
},
},
}
- exp := newExporter(config, componenttest.NewNopTelemetrySettings())
+ exp, err := newExporter(config, componenttest.NewNopTelemetrySettings())
+ require.NoError(t, err)
require.NotNil(t, exp)
require.Error(t, exp.start(context.Background(), componenttest.NewNopHost()))
}
func TestExporter_stopAlwaysReturnsNil(t *testing.T) {
config := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: validEndpoint,
},
}
- exp := newExporter(config, componenttest.NewNopTelemetrySettings())
+ exp, err := newExporter(config, componenttest.NewNopTelemetrySettings())
+ require.NoError(t, err)
require.NotNil(t, exp)
require.NoError(t, exp.stop(context.Background()))
}
diff --git a/exporter/lokiexporter/generated_component_test.go b/exporter/lokiexporter/generated_component_test.go
new file mode 100644
index 000000000000..7f18cd15120d
--- /dev/null
+++ b/exporter/lokiexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package lokiexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/lokiexporter/go.mod b/exporter/lokiexporter/go.mod
index 3d24c9629a89..a3c5ca8038d3 100644
--- a/exporter/lokiexporter/go.mod
+++ b/exporter/lokiexporter/go.mod
@@ -1,84 +1,87 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/gogo/protobuf v1.3.2
github.com/golang/snappy v0.0.4
- github.com/grafana/loki/pkg/push v0.0.0-20230127072203-4e8cc8d71928
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/loki v0.89.0
- github.com/prometheus/common v0.45.0
- github.com/stretchr/testify v1.8.4
- go.opencensus.io v0.24.0
- go.opentelemetry.io/collector v0.89.0
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/loki v0.98.0
+ github.com/prometheus/common v0.52.2
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector v0.98.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
)
require (
github.com/beorn7/perks v1.0.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dennwc/varint v1.0.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
+ github.com/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.89.0 // indirect
- github.com/pkg/errors v0.9.1 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/prometheus v0.47.2 // indirect
+ github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e // indirect
github.com/rs/cors v1.10.1 // 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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
- golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/lokiexporter/go.sum b/exporter/lokiexporter/go.sum
index d8d31d24772b..731f64c30f8e 100644
--- a/exporter/lokiexporter/go.sum
+++ b/exporter/lokiexporter/go.sum
@@ -1,32 +1,29 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
-github.com/aws/aws-sdk-go v1.44.302 h1:ST3ko6GrJKn3Xi+nAvxjG3uk/V1pW8KC52WLeIxqqNk=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
+github.com/aws/aws-sdk-go v1.50.32 h1:POt81DvegnpQKM4DMDLlHz1CO6OBnEoQ1gRhYFd7QRY=
+github.com/aws/aws-sdk-go v1.50.32/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
@@ -36,71 +33,55 @@ github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBj
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/grafana/loki/pkg/push v0.0.0-20230127072203-4e8cc8d71928 h1:KCbGfs9SGr3lL3RWc+c+njCYyWUOa++Oas6McnwdQ2I=
-github.com/grafana/loki/pkg/push v0.0.0-20230127072203-4e8cc8d71928/go.mod h1:DhJMrd2QInI/1CNtTN43BZuTmkccdizW1jZ+F6aHkhY=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37 h1:w59bmBeLOk4enGtyX4kTBNY3FCw/nwDTYUqcjC4vKhg=
+github.com/grafana/loki/pkg/push v0.0.0-20231127162423-bd505f8e2d37/go.mod h1:f3JSoxBTPXX5ec4FxxeC19nTBSxoTz+cBgS3cYLMcr0=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
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/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
+github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA=
+github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
-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/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -109,142 +90,132 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
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/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/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
+github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/prometheus v0.47.2 h1:jWcnuQHz1o1Wu3MZ6nMJDuTI0kU5yJp9pkxh8XEkNvI=
-github.com/prometheus/prometheus v0.47.2/go.mod h1:J/bmOSjgH7lFxz2gZhrWEZs2i64vMS+HIuZfmYNhJ/M=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw=
-golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4=
-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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -252,39 +223,27 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 h1:Xs9lu+tLXxLIfuci70nG4cpwaRC+mRQPUL7LoIeDJC4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
+k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
diff --git a/exporter/lokiexporter/internal/metadata/generated_status.go b/exporter/lokiexporter/internal/metadata/generated_status.go
index 8ac8d582873a..49aedda31bcf 100644
--- a/exporter/lokiexporter/internal/metadata/generated_status.go
+++ b/exporter/lokiexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("loki")
)
const (
- Type = "loki"
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/loki")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/loki")
+}
diff --git a/exporter/lokiexporter/internal/tenant/package_test.go b/exporter/lokiexporter/internal/tenant/package_test.go
new file mode 100644
index 000000000000..ec35a023094f
--- /dev/null
+++ b/exporter/lokiexporter/internal/tenant/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package tenant
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/lokiexporter/metadata.yaml b/exporter/lokiexporter/metadata.yaml
index b5b1c2c7cab2..15b15fd707ea 100644
--- a/exporter/lokiexporter/metadata.yaml
+++ b/exporter/lokiexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: loki
+scope_name: otelcol/loki
status:
class: exporter
@@ -6,6 +7,8 @@ status:
beta: [logs]
distributions:
- contrib
- - observiq
codeowners:
active: [gramidt, gouthamve, jpkrohling, mar4uk]
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/lokiexporter/metrics.go b/exporter/lokiexporter/metrics.go
deleted file mode 100644
index 456bbe2307d4..000000000000
--- a/exporter/lokiexporter/metrics.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package lokiexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/lokiexporter"
-
-import (
- "go.opencensus.io/stats"
- "go.opencensus.io/stats/view"
-)
-
-var (
- lokiExporterFailedToSendLogRecordsDueToMissingLabels = stats.Int64("lokiexporter_send_failed_due_to_missing_labels", "Number of log records failed to send because labels were missing", stats.UnitDimensionless)
-)
-
-func metricViews() []*view.View {
- return []*view.View{
- {
- Name: "lokiexporter_send_failed_due_to_missing_labels",
- Description: "Number of log records failed to send because labels were missing",
- Measure: lokiExporterFailedToSendLogRecordsDueToMissingLabels,
- Aggregation: view.Count(),
- },
- }
-}
diff --git a/exporter/lokiexporter/package_test.go b/exporter/lokiexporter/package_test.go
new file mode 100644
index 000000000000..eba5a730e48e
--- /dev/null
+++ b/exporter/lokiexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package lokiexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/mezmoexporter/config.go b/exporter/mezmoexporter/config.go
index 4f028ddff0ea..691f19f54094 100644
--- a/exporter/mezmoexporter/config.go
+++ b/exporter/mezmoexporter/config.go
@@ -10,6 +10,7 @@ import (
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -32,9 +33,9 @@ const (
// Config defines configuration for Mezmo exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ confighttp.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// IngestURL is the URL to send telemetry to.
IngestURL string `mapstructure:"ingest_url"`
@@ -44,8 +45,8 @@ type Config struct {
}
// returns default http client settings
-func createDefaultHTTPClientSettings() confighttp.HTTPClientSettings {
- return confighttp.HTTPClientSettings{
+func createDefaultClientConfig() confighttp.ClientConfig {
+ return confighttp.ClientConfig{
Timeout: defaultTimeout,
}
}
diff --git a/exporter/mezmoexporter/config_test.go b/exporter/mezmoexporter/config_test.go
index dca59ef2b1e5..953ea71aa778 100644
--- a/exporter/mezmoexporter/config_test.go
+++ b/exporter/mezmoexporter/config_test.go
@@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -40,10 +41,10 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "allsettings"),
expected: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 5 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: false,
InitialInterval: 99 * time.Second,
MaxInterval: 199 * time.Second,
diff --git a/exporter/mezmoexporter/exporter.go b/exporter/mezmoexporter/exporter.go
index b58845b31b98..0c4689957d8f 100644
--- a/exporter/mezmoexporter/exporter.go
+++ b/exporter/mezmoexporter/exporter.go
@@ -58,13 +58,18 @@ func (m *mezmoExporter) pushLogData(_ context.Context, ld plog.Logs) error {
return m.logDataToMezmo(ld)
}
-func (m *mezmoExporter) start(_ context.Context, host component.Host) (err error) {
- m.client, err = m.config.HTTPClientSettings.ToClient(host, m.settings)
+func (m *mezmoExporter) start(ctx context.Context, host component.Host) (err error) {
+ m.client, err = m.config.ClientConfig.ToClientContext(ctx, host, m.settings)
return err
}
func (m *mezmoExporter) stop(context.Context) (err error) {
+ if m.client == nil {
+ return nil
+ }
m.wg.Wait()
+ m.client.CloseIdleConnections()
+ m.client = nil
return nil
}
diff --git a/exporter/mezmoexporter/exporter_test.go b/exporter/mezmoexporter/exporter_test.go
index f38c89196b9b..9722a20b3cc0 100644
--- a/exporter/mezmoexporter/exporter_test.go
+++ b/exporter/mezmoexporter/exporter_test.go
@@ -169,7 +169,7 @@ func createLogger() (*zap.Logger, *observer.ObservedLogs) {
func TestLogsExporter(t *testing.T) {
httpServerParams := testServerParams{
t: t,
- assertionsCallback: func(req *http.Request, body mezmoLogBody) (int, string) {
+ assertionsCallback: func(req *http.Request, _ mezmoLogBody) (int, string) {
assert.Equal(t, "application/json", req.Header.Get("Content-Type"))
assert.Equal(t, "mezmo-otel-exporter/"+buildInfo.Version, req.Header.Get("User-Agent"))
return http.StatusOK, ""
@@ -240,7 +240,7 @@ func Test404IngestError(t *testing.T) {
httpServerParams := testServerParams{
t: t,
- assertionsCallback: func(req *http.Request, body mezmoLogBody) (int, string) {
+ assertionsCallback: func(_ *http.Request, _ mezmoLogBody) (int, string) {
return http.StatusNotFound, `{"foo":"bar"}`
},
}
diff --git a/exporter/mezmoexporter/factory.go b/exporter/mezmoexporter/factory.go
index 370f084d6a78..f771189aad26 100644
--- a/exporter/mezmoexporter/factory.go
+++ b/exporter/mezmoexporter/factory.go
@@ -8,6 +8,7 @@ import (
"errors"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -26,10 +27,10 @@ func NewFactory() exporter.Factory {
// Create a default Memzo config
func createDefaultConfig() component.Config {
return &Config{
- HTTPClientSettings: createDefaultHTTPClientSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- IngestURL: defaultIngestURL,
+ ClientConfig: createDefaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+ IngestURL: defaultIngestURL,
}
}
@@ -51,7 +52,7 @@ func createLogsExporter(ctx context.Context, settings exporter.CreateSettings, e
exp.pushLogData,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(expCfg.RetrySettings),
+ exporterhelper.WithRetry(expCfg.BackOffConfig),
exporterhelper.WithQueue(expCfg.QueueSettings),
exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.stop),
diff --git a/exporter/mezmoexporter/factory_test.go b/exporter/mezmoexporter/factory_test.go
index b6372780b4df..d68d4b7df8b4 100644
--- a/exporter/mezmoexporter/factory_test.go
+++ b/exporter/mezmoexporter/factory_test.go
@@ -9,9 +9,9 @@ import (
"time"
"github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
@@ -21,7 +21,7 @@ import (
func TestType(t *testing.T) {
factory := NewFactory()
pType := factory.Type()
- assert.Equal(t, pType, component.Type(metadata.Type))
+ assert.Equal(t, pType, metadata.Type)
}
func TestCreateDefaultConfig(t *testing.T) {
@@ -32,10 +32,10 @@ func TestCreateDefaultConfig(t *testing.T) {
IngestURL: defaultIngestURL,
IngestKey: "",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 5 * time.Second,
},
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
})
assert.NoError(t, componenttest.CheckConfigStruct(cfg))
diff --git a/exporter/mezmoexporter/generated_component_test.go b/exporter/mezmoexporter/generated_component_test.go
new file mode 100644
index 000000000000..0d2dbd025443
--- /dev/null
+++ b/exporter/mezmoexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package mezmoexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/mezmoexporter/go.mod b/exporter/mezmoexporter/go.mod
index 11d7f268dd89..3863d49c6538 100644
--- a/exporter/mezmoexporter/go.mod
+++ b/exporter/mezmoexporter/go.mod
@@ -1,65 +1,76 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/mezmoexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/cenkalti/backoff/v4 v4.3.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/mezmoexporter/go.sum b/exporter/mezmoexporter/go.sum
index dadc64deca8e..aa7ec0ae96d4 100644
--- a/exporter/mezmoexporter/go.sum
+++ b/exporter/mezmoexporter/go.sum
@@ -1,82 +1,56 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -86,121 +60,108 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -208,38 +169,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/mezmoexporter/internal/metadata/generated_status.go b/exporter/mezmoexporter/internal/metadata/generated_status.go
index 0cd555eb9901..85638edd4136 100644
--- a/exporter/mezmoexporter/internal/metadata/generated_status.go
+++ b/exporter/mezmoexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("mezmo")
)
const (
- Type = "mezmo"
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/mezmo")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/mezmo")
+}
diff --git a/exporter/mezmoexporter/metadata.yaml b/exporter/mezmoexporter/metadata.yaml
index 5255f57e8e53..457faeeb2b31 100644
--- a/exporter/mezmoexporter/metadata.yaml
+++ b/exporter/mezmoexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: mezmo
+scope_name: otelcol/mezmo
status:
class: exporter
@@ -7,3 +8,8 @@ status:
distributions: [contrib]
codeowners:
active: [dashpole, billmeyer, gjanco]
+
+tests:
+ config:
+ disable_keep_alives: true
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/mezmoexporter/package_test.go b/exporter/mezmoexporter/package_test.go
new file mode 100644
index 000000000000..e768b14cb712
--- /dev/null
+++ b/exporter/mezmoexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package mezmoexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/opencensusexporter/README.md b/exporter/opencensusexporter/README.md
index 86726ae83570..f4fb787a6f90 100644
--- a/exporter/opencensusexporter/README.md
+++ b/exporter/opencensusexporter/README.md
@@ -4,13 +4,13 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics |
-| Distributions | [contrib], [observiq] |
+| Distributions | [core], [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fopencensus%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fopencensus) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fopencensus%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fopencensus) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@open-telemetry/collector-approvers](https://github.com/orgs/open-telemetry/teams/collector-approvers) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
+[core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
Exports traces and/or metrics via gRPC using
diff --git a/exporter/opencensusexporter/config.go b/exporter/opencensusexporter/config.go
index 142150d4239f..7890a95609c0 100644
--- a/exporter/opencensusexporter/config.go
+++ b/exporter/opencensusexporter/config.go
@@ -6,14 +6,15 @@ package opencensusexporter // import "github.com/open-telemetry/opentelemetry-co
import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
// Config defines configuration for OpenCensus exporter.
type Config struct {
- configgrpc.GRPCClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configgrpc.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// The number of workers that send the gRPC requests.
NumWorkers int `mapstructure:"num_workers"`
diff --git a/exporter/opencensusexporter/config_test.go b/exporter/opencensusexporter/config_test.go
index 62b2595b13bf..323fdd64ed11 100644
--- a/exporter/opencensusexporter/config_test.go
+++ b/exporter/opencensusexporter/config_test.go
@@ -13,6 +13,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -37,7 +38,7 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "2"),
expected: &Config{
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -48,7 +49,7 @@ func TestLoadConfig(t *testing.T) {
NumConsumers: 2,
QueueSize: 10,
},
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Headers: map[string]configopaque.String{
"can you have a . here?": "F0000000-0000-0000-0000-000000000000",
"header1": "234",
@@ -56,8 +57,8 @@ func TestLoadConfig(t *testing.T) {
},
Endpoint: "1.2.3.4:1234",
Compression: "gzip",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/var/lib/mycert.pem",
},
Insecure: false,
diff --git a/exporter/opencensusexporter/factory.go b/exporter/opencensusexporter/factory.go
index 6a726398a287..4cf079f447dc 100644
--- a/exporter/opencensusexporter/factory.go
+++ b/exporter/opencensusexporter/factory.go
@@ -26,7 +26,7 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
},
@@ -47,7 +47,7 @@ func createTracesExporter(ctx context.Context, set exporter.CreateSettings, cfg
cfg,
oce.pushTraces,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
exporterhelper.WithStart(oce.start),
exporterhelper.WithShutdown(oce.shutdown))
@@ -66,7 +66,7 @@ func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, cfg
cfg,
oce.pushMetrics,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
exporterhelper.WithStart(oce.start),
exporterhelper.WithShutdown(oce.shutdown))
diff --git a/exporter/opencensusexporter/factory_test.go b/exporter/opencensusexporter/factory_test.go
index b291fb98e92b..5b4be53f952e 100644
--- a/exporter/opencensusexporter/factory_test.go
+++ b/exporter/opencensusexporter/factory_test.go
@@ -37,7 +37,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "NoEndpoint",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: "",
},
NumWorkers: 3,
@@ -47,9 +47,9 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "ZeroNumWorkers",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: false,
},
},
@@ -60,9 +60,9 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "UseSecure",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: false,
},
},
@@ -72,7 +72,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "Keepalive",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Keepalive: &configgrpc.KeepaliveClientConfig{
Time: 30 * time.Second,
@@ -86,7 +86,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "Compression",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Compression: "gzip",
},
@@ -96,7 +96,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "Headers",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Headers: map[string]configopaque.String{
"hdr1": "val1",
@@ -109,7 +109,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "CompressionError",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Compression: "unknown compression",
},
@@ -121,10 +121,10 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "CaCert",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "testdata/test_cert.pem",
},
},
@@ -135,10 +135,10 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "CertPemFileError",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "nosuchfile",
},
},
@@ -163,7 +163,7 @@ func TestCreateTracesExporter(t *testing.T) {
func checkErrorsAndStartAndShutdown(t *testing.T, exporter component.Component, err error, mustFailOnCreate, mustFailOnStart bool) {
if mustFailOnCreate {
- assert.NotNil(t, err)
+ assert.Error(t, err)
return
}
assert.NoError(t, err)
diff --git a/exporter/opencensusexporter/generated_component_test.go b/exporter/opencensusexporter/generated_component_test.go
new file mode 100644
index 000000000000..d84aadc3e869
--- /dev/null
+++ b/exporter/opencensusexporter/generated_component_test.go
@@ -0,0 +1,133 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package opencensusexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/opencensusexporter/go.mod b/exporter/opencensusexporter/go.mod
index d2dae08dffa1..5386cc634d9f 100644
--- a/exporter/opencensusexporter/go.mod
+++ b/exporter/opencensusexporter/go.mod
@@ -1,77 +1,89 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opencensusexporter
-go 1.20
+go 1.21
require (
github.com/census-instrumentation/opencensus-proto v0.4.1
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configgrpc v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/receiver v0.89.0
- google.golang.org/grpc v1.59.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/opencensus v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/pdata/testdata v0.98.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ google.golang.org/grpc v1.63.2
)
require (
- cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/sharedcomponent v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/opencensusexporter/go.sum b/exporter/opencensusexporter/go.sum
index 7f42fb4b3a05..4bbee03091ca 100644
--- a/exporter/opencensusexporter/go.sum
+++ b/exporter/opencensusexporter/go.sum
@@ -1,20 +1,16 @@
-cloud.google.com/go v0.26.0 h1:e0WKqKTd5BnrG8aKH3J3h+QvEIQtSUcf2n5UZ5ZgLtQ=
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-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/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g=
github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
github.com/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=
@@ -22,16 +18,15 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -48,9 +43,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -59,12 +53,14 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1 h1:/c3QmbOGMGTOumP2iT/rCwB7b0QDGLKzqOmktBjT+Is=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.1/go.mod h1:5SN9VR2LTsRFsrEC6FHgRbTWrTHu6tqPeKxEQv15giM=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
@@ -77,15 +73,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -97,13 +92,17 @@ github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0b
github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/soheilhy/cmux v0.1.5 h1:jjzc5WVemNEDTLwv9tlmemhC73tI08BNOIGwBOo10Js=
@@ -115,66 +114,74 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
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.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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -194,10 +201,9 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
-golang.org/x/oauth2 v0.13.0 h1:jDDenyj+WgFtmV3zYVoi8aE2BwtXFLWOA67ZfNWftiY=
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-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -207,8 +213,8 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -227,22 +233,22 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY=
+google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0=
+google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -252,13 +258,11 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/exporter/opencensusexporter/internal/metadata/generated_status.go b/exporter/opencensusexporter/internal/metadata/generated_status.go
index 081df994310b..4b095c2f69fa 100644
--- a/exporter/opencensusexporter/internal/metadata/generated_status.go
+++ b/exporter/opencensusexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("opencensus")
)
const (
- Type = "opencensus"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/opencensus")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/opencensus")
+}
diff --git a/exporter/opencensusexporter/metadata.yaml b/exporter/opencensusexporter/metadata.yaml
index 03f1bdbded1a..496eed6c698a 100644
--- a/exporter/opencensusexporter/metadata.yaml
+++ b/exporter/opencensusexporter/metadata.yaml
@@ -1,9 +1,15 @@
type: opencensus
+scope_name: otelcol/opencensus
status:
class: exporter
stability:
beta: [traces, metrics]
- distributions: [contrib, observiq]
+ distributions: [core, contrib]
codeowners:
active: [open-telemetry/collector-approvers]
+
+tests:
+ config:
+ endpoint: opencensus2:55678
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/opencensusexporter/opencensus.go b/exporter/opencensusexporter/opencensus.go
index 530241478abc..0cedb5130ab6 100644
--- a/exporter/opencensusexporter/opencensus.go
+++ b/exporter/opencensusexporter/opencensus.go
@@ -64,7 +64,7 @@ func newOcExporter(_ context.Context, cfg *Config, settings component.TelemetryS
metadata: metadata.New(nil),
settings: settings,
}
- for k, v := range cfg.GRPCClientSettings.Headers {
+ for k, v := range cfg.ClientConfig.Headers {
oce.metadata.Set(k, string(v))
}
return oce, nil
@@ -72,7 +72,7 @@ func newOcExporter(_ context.Context, cfg *Config, settings component.TelemetryS
// start creates the gRPC client Connection
func (oce *ocExporter) start(ctx context.Context, host component.Host) error {
- clientConn, err := oce.cfg.GRPCClientSettings.ToClientConn(ctx, host, oce.settings)
+ clientConn, err := oce.cfg.ClientConfig.ToClientConn(ctx, host, oce.settings)
if err != nil {
return err
}
diff --git a/exporter/opencensusexporter/opencensus_test.go b/exporter/opencensusexporter/opencensus_test.go
index 11f5a403893a..607ed49ca75c 100644
--- a/exporter/opencensusexporter/opencensus_test.go
+++ b/exporter/opencensusexporter/opencensus_test.go
@@ -16,10 +16,10 @@ import (
"go.opentelemetry.io/collector/consumer/consumertest"
"go.opentelemetry.io/collector/exporter/exportertest"
"go.opentelemetry.io/collector/pdata/ptrace"
+ "go.opentelemetry.io/collector/pdata/testdata"
"go.opentelemetry.io/collector/receiver/receivertest"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/common/testutil"
- "github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal/testdata"
"github.com/open-telemetry/opentelemetry-collector-contrib/receiver/opencensusreceiver"
)
@@ -28,7 +28,7 @@ func TestSendTraces(t *testing.T) {
rFactory := opencensusreceiver.NewFactory()
rCfg := rFactory.CreateDefaultConfig().(*opencensusreceiver.Config)
endpoint := testutil.GetAvailableLocalAddress(t)
- rCfg.GRPCServerSettings.NetAddr.Endpoint = endpoint
+ rCfg.ServerConfig.NetAddr.Endpoint = endpoint
set := receivertest.NewNopCreateSettings()
recv, err := rFactory.CreateTracesReceiver(context.Background(), set, rCfg, sink)
assert.NoError(t, err)
@@ -39,9 +39,9 @@ func TestSendTraces(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
}
@@ -55,7 +55,7 @@ func TestSendTraces(t *testing.T) {
assert.NoError(t, exp.Shutdown(context.Background()))
})
- td := testdata.GenerateTracesOneSpan()
+ td := testdata.GenerateTraces(1)
assert.NoError(t, exp.ConsumeTraces(context.Background(), td))
assert.Eventually(t, func() bool {
return len(sink.AllTraces()) == 1
@@ -81,9 +81,9 @@ func TestSendTraces(t *testing.T) {
func TestSendTraces_NoBackend(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: "localhost:56569",
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
}
@@ -96,7 +96,7 @@ func TestSendTraces_NoBackend(t *testing.T) {
assert.NoError(t, exp.Shutdown(context.Background()))
})
- td := testdata.GenerateTracesOneSpan()
+ td := testdata.GenerateTraces(1)
for i := 0; i < 10000; i++ {
assert.Error(t, exp.ConsumeTraces(context.Background(), td))
}
@@ -105,9 +105,9 @@ func TestSendTraces_NoBackend(t *testing.T) {
func TestSendTraces_AfterStop(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: "localhost:56569",
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
}
@@ -118,7 +118,7 @@ func TestSendTraces_AfterStop(t *testing.T) {
require.NoError(t, exp.Start(context.Background(), host))
assert.NoError(t, exp.Shutdown(context.Background()))
- td := testdata.GenerateTracesOneSpan()
+ td := testdata.GenerateTraces(1)
assert.Error(t, exp.ConsumeTraces(context.Background(), td))
}
@@ -127,7 +127,7 @@ func TestSendMetrics(t *testing.T) {
rFactory := opencensusreceiver.NewFactory()
rCfg := rFactory.CreateDefaultConfig().(*opencensusreceiver.Config)
endpoint := testutil.GetAvailableLocalAddress(t)
- rCfg.GRPCServerSettings.NetAddr.Endpoint = endpoint
+ rCfg.ServerConfig.NetAddr.Endpoint = endpoint
set := receivertest.NewNopCreateSettings()
recv, err := rFactory.CreateMetricsReceiver(context.Background(), set, rCfg, sink)
assert.NoError(t, err)
@@ -138,9 +138,9 @@ func TestSendMetrics(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
}
@@ -154,7 +154,7 @@ func TestSendMetrics(t *testing.T) {
assert.NoError(t, exp.Shutdown(context.Background()))
})
- md := testdata.GenerateMetricsOneMetric()
+ md := testdata.GenerateMetrics(1)
assert.NoError(t, exp.ConsumeMetrics(context.Background(), md))
assert.Eventually(t, func() bool {
return len(sink.AllMetrics()) == 1
@@ -178,9 +178,9 @@ func TestSendMetrics(t *testing.T) {
func TestSendMetrics_NoBackend(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: "localhost:56569",
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
}
@@ -193,7 +193,7 @@ func TestSendMetrics_NoBackend(t *testing.T) {
assert.NoError(t, exp.Shutdown(context.Background()))
})
- md := testdata.GenerateMetricsOneMetric()
+ md := testdata.GenerateMetrics(1)
for i := 0; i < 10000; i++ {
assert.Error(t, exp.ConsumeMetrics(context.Background(), md))
}
@@ -202,9 +202,9 @@ func TestSendMetrics_NoBackend(t *testing.T) {
func TestSendMetrics_AfterStop(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.GRPCClientSettings = configgrpc.GRPCClientSettings{
+ cfg.ClientConfig = configgrpc.ClientConfig{
Endpoint: "localhost:56569",
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
}
@@ -215,6 +215,6 @@ func TestSendMetrics_AfterStop(t *testing.T) {
require.NoError(t, exp.Start(context.Background(), host))
assert.NoError(t, exp.Shutdown(context.Background()))
- md := testdata.GenerateMetricsOneMetric()
+ md := testdata.GenerateMetrics(1)
assert.Error(t, exp.ConsumeMetrics(context.Background(), md))
}
diff --git a/exporter/opencensusexporter/package_test.go b/exporter/opencensusexporter/package_test.go
new file mode 100644
index 000000000000..c5b21ea873b4
--- /dev/null
+++ b/exporter/opencensusexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package opencensusexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/opensearchexporter/README.md b/exporter/opensearchexporter/README.md
index 4b01d248c9c1..47c7bd705f87 100644
--- a/exporter/opensearchexporter/README.md
+++ b/exporter/opensearchexporter/README.md
@@ -3,12 +3,15 @@
| Status | |
| ------------- |-----------|
-| Stability | [development]: logs, traces |
-| Distributions | [] |
+| Stability | [development]: logs |
+| | [alpha]: traces |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fopensearch%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fopensearch) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fopensearch%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fopensearch) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@Aneurysm9](https://www.github.com/Aneurysm9), [@MitchellGale](https://www.github.com/MitchellGale), [@MaxKsyunz](https://www.github.com/MaxKsyunz), [@YANG-DB](https://www.github.com/YANG-DB) |
[development]: https://github.com/open-telemetry/opentelemetry-collector#development
+[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
+[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
OpenSearch exporter supports sending OpenTelemetry signals as documents to [OpenSearch](https://www.opensearch.org).
@@ -21,7 +24,7 @@ The documents are sent using [observability catalog](https://github.com/opensear
- `namespace` (default=`namespace`) a user-provided label to group telemetry. It is used to construct the name of the destination index or data stream.
### HTTP Connection Options
-OpenSearch export supports standard (HTTP client settings](https://github.com/open-telemetry/opentelemetry-collector/tree/main/config/confighttp#client-configuration).
+OpenSearch export supports standard [HTTP client settings](https://github.com/open-telemetry/opentelemetry-collector/tree/main/config/confighttp#client-configuration).
- `http.endpoint` (required) `:` of OpenSearch node to send data to.
### TLS settings
diff --git a/exporter/opensearchexporter/config.go b/exporter/opensearchexporter/config.go
index 9fb127748eb4..c8546a6d407a 100644
--- a/exporter/opensearchexporter/config.go
+++ b/exporter/opensearchexporter/config.go
@@ -8,6 +8,7 @@ import (
"strings"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -27,8 +28,8 @@ const (
// Config defines configuration for OpenSearch exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:"http"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ confighttp.ClientConfig `mapstructure:"http"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
exporterhelper.TimeoutSettings `mapstructure:",squash"`
MappingsSettings `mapstructure:"mapping"`
diff --git a/exporter/opensearchexporter/config_test.go b/exporter/opensearchexporter/config_test.go
index 6ce3c8ddc3bd..68d9abd6b681 100644
--- a/exporter/opensearchexporter/config_test.go
+++ b/exporter/opensearchexporter/config_test.go
@@ -14,8 +14,8 @@ import (
"go.opentelemetry.io/collector/config/configauth"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter/internal/metadata"
)
@@ -49,7 +49,7 @@ func TestLoadConfig(t *testing.T) {
expected: &Config{
Dataset: "ngnix",
Namespace: "eu",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: sampleEndpoint,
Timeout: 2 * time.Minute,
Headers: map[string]configopaque.String{
@@ -57,9 +57,9 @@ func TestLoadConfig(t *testing.T) {
},
MaxIdleConns: &maxIdleConns,
IdleConnTimeout: &idleConnTimeout,
- Auth: &configauth.Authentication{AuthenticatorID: component.NewID("sample_basic_auth")},
+ Auth: &configauth.Authentication{AuthenticatorID: component.MustNewID("sample_basic_auth")},
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 100 * time.Millisecond,
MaxInterval: 30 * time.Second,
@@ -81,7 +81,7 @@ func TestLoadConfig(t *testing.T) {
config.Dataset = ""
config.Namespace = "eu"
}),
- configValidateAssert: func(t assert.TestingT, err error, i ...any) bool {
+ configValidateAssert: func(t assert.TestingT, err error, _ ...any) bool {
return assert.ErrorContains(t, err, errDatasetNoValue.Error())
},
},
@@ -92,7 +92,7 @@ func TestLoadConfig(t *testing.T) {
config.Dataset = "ngnix"
config.Namespace = ""
}),
- configValidateAssert: func(t assert.TestingT, err error, i ...any) bool {
+ configValidateAssert: func(t assert.TestingT, err error, _ ...any) bool {
return assert.ErrorContains(t, err, errNamespaceNoValue.Error())
},
},
@@ -102,7 +102,7 @@ func TestLoadConfig(t *testing.T) {
config.Endpoint = sampleEndpoint
config.BulkAction = "delete"
}),
- configValidateAssert: func(t assert.TestingT, err error, i ...any) bool {
+ configValidateAssert: func(t assert.TestingT, err error, _ ...any) bool {
return assert.ErrorContains(t, err, errBulkActionInvalid.Error())
},
},
diff --git a/exporter/opensearchexporter/factory.go b/exporter/opensearchexporter/factory.go
index b4bfdd2e359d..75a74580f7f0 100644
--- a/exporter/opensearchexporter/factory.go
+++ b/exporter/opensearchexporter/factory.go
@@ -10,6 +10,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -29,12 +30,12 @@ func NewFactory() exporter.Factory {
func newDefaultConfig() component.Config {
return &Config{
- HTTPClientSettings: confighttp.NewDefaultHTTPClientSettings(),
- Dataset: defaultDataset,
- Namespace: defaultNamespace,
- BulkAction: defaultBulkAction,
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- MappingsSettings: MappingsSettings{Mode: defaultMappingMode},
+ ClientConfig: confighttp.NewDefaultClientConfig(),
+ Dataset: defaultDataset,
+ Namespace: defaultNamespace,
+ BulkAction: defaultBulkAction,
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ MappingsSettings: MappingsSettings{Mode: defaultMappingMode},
}
}
@@ -51,7 +52,7 @@ func createTracesExporter(ctx context.Context,
te.pushTraceData,
exporterhelper.WithStart(te.Start),
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
exporterhelper.WithTimeout(c.TimeoutSettings))
}
@@ -68,6 +69,6 @@ func createLogsExporter(ctx context.Context,
le.pushLogData,
exporterhelper.WithStart(le.Start),
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: true}),
- exporterhelper.WithRetry(c.RetrySettings),
+ exporterhelper.WithRetry(c.BackOffConfig),
exporterhelper.WithTimeout(c.TimeoutSettings))
}
diff --git a/exporter/opensearchexporter/generated_component_test.go b/exporter/opensearchexporter/generated_component_test.go
new file mode 100644
index 000000000000..f3abc6a94cca
--- /dev/null
+++ b/exporter/opensearchexporter/generated_component_test.go
@@ -0,0 +1,133 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package opensearchexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/opensearchexporter/go.mod b/exporter/opensearchexporter/go.mod
index 124e5c1c8704..16d3b099dab9 100644
--- a/exporter/opensearchexporter/go.mod
+++ b/exporter/opensearchexporter/go.mod
@@ -1,73 +1,83 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/opensearchexporter
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.0.0-00010101000000-000000000000
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.98.0
github.com/opensearch-project/opensearch-go/v2 v2.3.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configauth v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configauth v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/elastic/go-structform v0.0.10
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configcompression v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
)
replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil => ../../pkg/pdatautil
diff --git a/exporter/opensearchexporter/go.sum b/exporter/opensearchexporter/go.sum
index 2edd4b5cc10b..ea7d1564bcb2 100644
--- a/exporter/opensearchexporter/go.sum
+++ b/exporter/opensearchexporter/go.sum
@@ -1,6 +1,3 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/aws/aws-sdk-go v1.44.263/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
github.com/aws/aws-sdk-go-v2 v1.18.0/go.mod h1:uzbQtefpm44goOPmdKyAlXSNcwlRgF3ePWVW6EtJvvw=
github.com/aws/aws-sdk-go-v2/config v1.18.25/go.mod h1:dZnYpD5wTW/dQF0rRNLVypB396zWCcPiBIvdvSWHEg4=
@@ -15,64 +12,41 @@ github.com/aws/aws-sdk-go-v2/service/ssooidc v1.14.10/go.mod h1:AFvkxc8xfBe8XA+5
github.com/aws/aws-sdk-go-v2/service/sts v1.19.0/go.mod h1:BgQOMsg8av8jset59jelyPW7NoZcZXLVpDsXunGDrk8=
github.com/aws/smithy-go v1.13.5/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
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/elastic/go-structform v0.0.10 h1:oy08o/Ih2hHTkNcRY/1HhaYvIp5z6t8si8gnCJPDo1w=
github.com/elastic/go-structform v0.0.10/go.mod h1:CZWf9aIRYY5SuKSmOhtXScE5uQiLZNqAFnwKR4OrIM4=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
@@ -81,21 +55,20 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -108,13 +81,16 @@ github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5E
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -124,99 +100,91 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
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.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=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
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.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -226,8 +194,8 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/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.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
-golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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=
@@ -240,10 +208,6 @@ golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -252,39 +216,18 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/opensearchexporter/internal/metadata/generated_status.go b/exporter/opensearchexporter/internal/metadata/generated_status.go
index fb407b74435c..94060398ab71 100644
--- a/exporter/opensearchexporter/internal/metadata/generated_status.go
+++ b/exporter/opensearchexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("opensearch")
)
const (
- Type = "opensearch"
LogsStability = component.StabilityLevelDevelopment
- TracesStability = component.StabilityLevelDevelopment
+ TracesStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/opensearch")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/opensearch")
+}
diff --git a/exporter/opensearchexporter/internal/objmodel/package_test.go b/exporter/opensearchexporter/internal/objmodel/package_test.go
new file mode 100644
index 000000000000..1828b58a7ea3
--- /dev/null
+++ b/exporter/opensearchexporter/internal/objmodel/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package objmodel
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/opensearchexporter/log_bulk_indexer.go b/exporter/opensearchexporter/log_bulk_indexer.go
index 99b9747b7743..ccf548bb8d67 100644
--- a/exporter/opensearchexporter/log_bulk_indexer.go
+++ b/exporter/opensearchexporter/log_bulk_indexer.go
@@ -64,7 +64,7 @@ func (lbi *logBulkIndexer) submit(ctx context.Context, ld plog.Logs) {
if err != nil {
lbi.appendPermanentError(err)
} else {
- ItemFailureHandler := func(ctx context.Context, item opensearchutil.BulkIndexerItem, resp opensearchutil.BulkIndexerResponseItem, itemErr error) {
+ ItemFailureHandler := func(_ context.Context, _ opensearchutil.BulkIndexerItem, resp opensearchutil.BulkIndexerResponseItem, itemErr error) {
// Setup error handler. The handler handles the per item response status based on the
// selective ACKing in the bulk response.
lbi.processItemFailure(resp, itemErr, makeLog(resource, resourceSchemaURL, scope, scopeSchemaURL, log))
diff --git a/exporter/opensearchexporter/metadata.yaml b/exporter/opensearchexporter/metadata.yaml
index 96fa9a12928c..81899f33adbd 100644
--- a/exporter/opensearchexporter/metadata.yaml
+++ b/exporter/opensearchexporter/metadata.yaml
@@ -1,8 +1,17 @@
type: opensearch
+scope_name: otelcol/opensearch
status:
class: exporter
stability:
- development: [logs, traces]
+ alpha: [traces]
+ development: [logs]
+ distributions: [contrib]
codeowners:
- active: [Aneurysm9, MitchellGale, MaxKsyunz, YANG-DB]
\ No newline at end of file
+ active: [Aneurysm9, MitchellGale, MaxKsyunz, YANG-DB]
+
+tests:
+ expect_consumer_error: true
+ config:
+ http:
+ endpoint: https://opensearch.example.com:9200
\ No newline at end of file
diff --git a/exporter/opensearchexporter/package_test.go b/exporter/opensearchexporter/package_test.go
new file mode 100644
index 000000000000..9b90d8760fdf
--- /dev/null
+++ b/exporter/opensearchexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package opensearchexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/opensearchexporter/sso_log_exporter.go b/exporter/opensearchexporter/sso_log_exporter.go
index 24c709bbc1b2..7ab0ec9447e5 100644
--- a/exporter/opensearchexporter/sso_log_exporter.go
+++ b/exporter/opensearchexporter/sso_log_exporter.go
@@ -19,7 +19,7 @@ type logExporter struct {
Index string
bulkAction string
model mappingModel
- httpSettings confighttp.HTTPClientSettings
+ httpSettings confighttp.ClientConfig
telemetry component.TelemetrySettings
}
@@ -43,13 +43,13 @@ func newLogExporter(cfg *Config, set exporter.CreateSettings) (*logExporter, err
telemetry: set.TelemetrySettings,
Index: getIndexName(cfg.Dataset, cfg.Namespace, cfg.LogsIndex),
bulkAction: cfg.BulkAction,
- httpSettings: cfg.HTTPClientSettings,
+ httpSettings: cfg.ClientConfig,
model: model,
}, nil
}
-func (l *logExporter) Start(_ context.Context, host component.Host) error {
- httpClient, err := l.httpSettings.ToClient(host, l.telemetry)
+func (l *logExporter) Start(ctx context.Context, host component.Host) error {
+ httpClient, err := l.httpSettings.ToClientContext(ctx, host, l.telemetry)
if err != nil {
return err
}
diff --git a/exporter/opensearchexporter/sso_trace_exporter.go b/exporter/opensearchexporter/sso_trace_exporter.go
index 1b2885766c36..1b791a1c772b 100644
--- a/exporter/opensearchexporter/sso_trace_exporter.go
+++ b/exporter/opensearchexporter/sso_trace_exporter.go
@@ -21,7 +21,7 @@ type ssoTracesExporter struct {
Dataset string
bulkAction string
model mappingModel
- httpSettings confighttp.HTTPClientSettings
+ httpSettings confighttp.ClientConfig
telemetry component.TelemetrySettings
}
@@ -41,12 +41,12 @@ func newSSOTracesExporter(cfg *Config, set exporter.CreateSettings) (*ssoTracesE
Dataset: cfg.Dataset,
bulkAction: cfg.BulkAction,
model: model,
- httpSettings: cfg.HTTPClientSettings,
+ httpSettings: cfg.ClientConfig,
}, nil
}
-func (s *ssoTracesExporter) Start(_ context.Context, host component.Host) error {
- httpClient, err := s.httpSettings.ToClient(host, s.telemetry)
+func (s *ssoTracesExporter) Start(ctx context.Context, host component.Host) error {
+ httpClient, err := s.httpSettings.ToClientContext(ctx, host, s.telemetry)
if err != nil {
return err
}
diff --git a/exporter/opensearchexporter/trace_bulk_indexer.go b/exporter/opensearchexporter/trace_bulk_indexer.go
index 6f373f5a00f8..b6e7f5132e1e 100644
--- a/exporter/opensearchexporter/trace_bulk_indexer.go
+++ b/exporter/opensearchexporter/trace_bulk_indexer.go
@@ -67,7 +67,7 @@ func (tbi *traceBulkIndexer) submit(ctx context.Context, td ptrace.Traces) {
if err != nil {
tbi.appendPermanentError(err)
} else {
- ItemFailureHandler := func(ctx context.Context, item opensearchutil.BulkIndexerItem, resp opensearchutil.BulkIndexerResponseItem, itemErr error) {
+ ItemFailureHandler := func(_ context.Context, _ opensearchutil.BulkIndexerItem, resp opensearchutil.BulkIndexerResponseItem, itemErr error) {
// Setup error handler. The handler handles the per item response status based on the
// selective ACKing in the bulk response.
tbi.processItemFailure(resp, itemErr, makeTrace(resource, resourceSchemaURL, scope, scopeSchemaURL, span))
diff --git a/exporter/tanzuobservabilityexporter/Makefile b/exporter/otelarrowexporter/Makefile
similarity index 100%
rename from exporter/tanzuobservabilityexporter/Makefile
rename to exporter/otelarrowexporter/Makefile
diff --git a/exporter/otelarrowexporter/README.md b/exporter/otelarrowexporter/README.md
new file mode 100644
index 000000000000..4fdc86c1896f
--- /dev/null
+++ b/exporter/otelarrowexporter/README.md
@@ -0,0 +1,243 @@
+# OpenTelemetry Protocol with Apache Arrow Exporter
+
+
+| Status | |
+| ------------- |-----------|
+| Stability | [development]: traces, metrics, logs |
+| Distributions | [] |
+| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fotelarrow%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fotelarrow) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fotelarrow%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fotelarrow) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@jmacd](https://www.github.com/jmacd), [@moh-osman3](https://www.github.com/moh-osman3) |
+
+[development]: https://github.com/open-telemetry/opentelemetry-collector#development
+
+
+Exports telemetry data using [OpenTelemetry Protocol with Apache
+Arrow](https://github.com/open-telemetry/otel-arrow) components with
+support for both OpenTelemetry Protocol with Apache
+Arrow and standard [OpenTelemetry Protocol](
+https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/otlp.md)
+(OTLP) protocol via gRPC.
+
+## Getting Started
+
+The [OpenTelemetry Protocol with Apache
+Arrow](https://github.com/open-telemetry/otel-arrow) exporter combines
+the features and configuration syntax of the core OpenTelemetry
+Collector [OTLP
+exporter](https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/otlpexporter)
+component with additional support for the OpenTelemetry Protocol with
+Apache Arrow.
+
+OpenTelemetry Protocol with Apache Arrow supports column-oriented data
+transport using the Apache Arrow data format. This component converts
+OTLP data into an optimized representation and then sends batches of
+data using Apache Arrow to encode the stream. The OpenTelemetry
+Protocol with Apache Arrow receiver component contains logic to reverse the process used in this
+component.
+
+The use of an OpenTelemetry Protocol with Apache Arrow
+exporter-receiver pair is recommended when the network is expensive.
+Typically, expect to see a 50% reduction in bandwidth compared with
+the same data being sent using standard OTLP/gRPC with Zstd
+compression, batch sizes being equal.
+
+This component includes all the features and configuration of the core
+OTLP exporter, making it possible to upgrade from the core OTLP
+exporter component. This is as simple as replacing "otlp" with
+"otelarrow" as the component name in the collector configuration.
+
+To enable the OpenTelemetry Protocol with Apache Arrow exporter,
+include it in the list of exporters for a pipeline. The `endpoint`
+setting is required. The `tls` setting is requirede for insecure
+transport.
+
+- `endpoint` (no default): host:port to which the exporter is going to send OTLP trace data,
+using the gRPC protocol. The valid syntax is described
+[here](https://github.com/grpc/grpc/blob/master/doc/naming.md).
+If a scheme of `https` is used then client transport security is enabled and overrides the `insecure` setting.
+- `tls`: see [TLS Configuration Settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/configtls/README.md) for the full set of available options.
+
+Example:
+
+```yaml
+exporters:
+ otelarrow/secure:
+ endpoint: external-collector:4317
+ tls:
+ cert_file: file.cert
+ key_file: file.key
+ otelarrow/insecure:
+ endpoint: internal-collector:4317
+ tls:
+ insecure: true
+```
+
+By default, `zstd` compression is enabled at the gRPC level. See
+[compression configuration](#compression-configuration) below. To
+disable gRPC-level compression, configure "none":
+
+```yaml
+exporters:
+ otelarrow:
+ compression: none
+ endpoint: ...
+ tls: ...
+```
+
+## Configuration
+
+Several helper files are leveraged to provide additional capabilities automatically:
+
+- [gRPC settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/configgrpc/README.md)
+- [TLS and mTLS settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/configtls/README.md)
+- [Queuing, retry and timeout settings](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md)
+
+### Arrow-specific Configuration
+
+In the `arrow` configuration block, the following settings enable and
+disable the use of OpenTelemetry Protocol with Apache Arrow as opposed
+to standard OTLP.
+
+- `disabled` (default: false): disables use of Arrow, causing the exporter to use standard OTLP
+- `disable_downgrade` (default: false): prevents this exporter from using standard OTLP.
+
+The following settings determine the resources that the exporter will use:
+
+- `num_streams` (default: number of CPUs): the number of concurrent Arrow streams
+- `max_stream_lifetime` (default: unlimited): duration after which streams are recycled.
+
+### Network Configuration
+
+This component uses `round_robin` by default as the gRPC load
+balancer. This can be modified using the `balancer_name` setting, for
+example, to configure the `pick_first` balancer:
+
+```yaml
+exporters:
+ otelarrow:
+ balancer_name: pick_first
+ endpoint: ...
+ tls: ...
+```
+
+When the server or an intermediate proxy uses a keepalive setting, the
+Arrow-specific `max_stream_lifetime` setting is critical to avoiding
+abrupt termination of Arrow streams, which causes retries of the
+in-flight requests. The maximum stream lifetime should be set to a
+value less than the minimum of the server's keepalive parameter (and
+any of the intermediate proxies), plus the export timeout.
+
+```yaml
+exporters:
+ otelarrow:
+ timeout: 30s
+ arrow:
+ max_stream_lifetime: 9m30s
+ endpoint: ...
+ tls: ...
+```
+
+When this is configured, the stream will terminate cleanly without
+causing retries, with `OK` gRPC status.
+
+The corresponding `otelarrowreceiver` keepalive setting, that is
+compatible with the one above, reads:
+
+
+
+```
+receivers:
+ otelarrow:
+ protocols:
+ grpc:
+ keepalive:
+ server_parameters:
+ max_connection_age: 1m
+ max_connection_age_grace: 10m
+```
+
+### Exporter metrics
+
+In addition to the the standard
+[exporterhelper](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md)
+and
+[obsreport](https://pkg.go.dev/go.opentelemetry.io/collector/obsreport)
+metrics, this component provides network-level measurement instruments
+which we anticipate will become part of `exporterhelper` and/or
+`obsreport` in the future. At the `normal` level of metrics detail:
+
+- `exporter_sent`: uncompressed bytes sent, prior to compression
+- `exporter_sent_wire`: compressed bytes sent, on the wire.
+
+Arrow's compression performance can be derived by dividing the average
+`exporter_sent` value by the average `exporter_sent_wire` value.
+
+At the `detailed` metrics detail level, information about the stream
+of data being returned to the exporter will be instrumented:
+
+- `exporter_recv`: uncompressed bytes received, prior to compression
+- `exporter_recv_wire`: compressed bytes received, on the wire.
+
+### Compression Configuration
+
+The exporter supports configuring Zstd compression at both the gRPC
+and the Arrow level. The exporter metrics described above will be
+correct in either case. The default settings are subject to change as
+we gain experience.
+
+See the Collector [compression
+comparison](https://github.com/open-telemetry/opentelemetry-collector/blob/main/config/configgrpc/README.md#compression-comparison)
+for general information about the choice of Zstd by default, for other
+general compression configuration and benchmark information.
+
+For the OpenTelemetry Protocol with Apache Arrow streams specifically,
+gRPC-level the Zstd compression level can be configured. However,
+there is an important caveat: the gRPC-Go library requires that
+compressor implementations be registered statically. These libraries
+use compressors named `zstdarrow1`, `zstdarrow2`, ..., `zstdarrow10`,
+supporting 10 configurable compression levels. Note, however that
+these configurations are static and only one unique configuration is
+possible per level. It is possible to configure multiple
+OpenTelemetry Protocol with Apache Arrow exporters with different Zstd
+configuration simply by using distinct levels.
+
+Under `arrow`, the `zstd` sub-configuration has the following fields:
+
+- `level`: in the range 1-10 determines a number of defaults (default 5)
+- `window_size_mib`: size of the Zstd window in MiB, 0 indicates to determine based on level (default 0)
+- `concurrency`: controls background CPU used for compression, 0 indicates to let `zstd` library decide (default 1)
+
+The exporter supports configuring compression at the [Arrow
+columnar-protocol
+level](https://arrow.apache.org/docs/format/Columnar.html#format-ipc).
+
+- `payload_compression`: compression applied at the Arrow IPC level, "none" by default, "zstd" supported.
+
+ payload_compression: zstd # describes Arrow-IPC compression (default "none")
+
+Compression settings at the Arrow IPC level cannot be further
+configured. We do not recommend configuring both payload and
+gRPC-level compression at once, hwoever these settings are
+independent.
+
+For example, two exporters may be configured with multiple zstd
+configurations, provided they use different levels:
+
+```yaml
+exporters:
+ otelarrow/best:
+ compression: zstd # describes gRPC-level compression (default "zstd")
+ arrow:
+ zstd:
+ level: 10 # describes gRPC-level compression level (default 5)
+ otelarrow/fastest:
+ compression: zstd
+ arrow:
+ zstd:
+ level: 1 # 1 is the "fastest" compression level
+```
diff --git a/exporter/otelarrowexporter/config.go b/exporter/otelarrowexporter/config.go
new file mode 100644
index 000000000000..96f5cb7d7c06
--- /dev/null
+++ b/exporter/otelarrowexporter/config.go
@@ -0,0 +1,126 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package otelarrowexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter"
+
+import (
+ "fmt"
+ "time"
+
+ "github.com/open-telemetry/otel-arrow/collector/compression/zstd"
+ "github.com/open-telemetry/otel-arrow/pkg/config"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configcompression"
+ "go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "google.golang.org/grpc"
+)
+
+// Config defines configuration for OTLP exporter.
+type Config struct {
+ // Timeout, Retry, Queue, and gRPC client settings are
+ // inherited from exporterhelper using field names
+ // intentionally identical to the core OTLP exporter.
+
+ exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+
+ RetrySettings configretry.BackOffConfig `mapstructure:"retry_on_failure"`
+
+ configgrpc.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+
+ // Arrow includes settings specific to OTel Arrow.
+ Arrow ArrowSettings `mapstructure:"arrow"`
+
+ // UserDialOptions cannot be configured via `mapstructure`
+ // schemes. This is useful for custom purposes where the
+ // exporter is built and configured via code instead of yaml.
+ // Uses include custom dialer, custom user-agent, etc.
+ UserDialOptions []grpc.DialOption `mapstructure:"-"`
+}
+
+// ArrowSettings includes whether Arrow is enabled and the number of
+// concurrent Arrow streams.
+type ArrowSettings struct {
+ // NumStreams determines the number of OTel Arrow streams.
+ NumStreams int `mapstructure:"num_streams"`
+
+ // MaxStreamLifetime should be set to less than the value of
+ // grpc: keepalive: max_connection_age_grace plus the timeout.
+ MaxStreamLifetime time.Duration `mapstructure:"max_stream_lifetime"`
+
+ // Zstd settings apply to OTel-Arrow use of gRPC specifically.
+ // Note that when multiple Otel-Arrow exporters are configured
+ // their settings will be applied in arbitrary order.
+ // Identical Zstd settings are recommended when multiple
+ // OTel-Arrow exporters are in use.
+ Zstd zstd.EncoderConfig `mapstructure:"zstd"`
+
+ // PayloadCompression is applied on the Arrow IPC stream
+ // internally and may have different results from using
+ // gRPC-level compression. This is disabled by default, since
+ // gRPC-level compression is enabled by default. This can be
+ // set to "zstd" to turn on Arrow-Zstd compression.
+ // Note that `Zstd` applies to gRPC, not Arrow compression.
+ PayloadCompression configcompression.Type `mapstructure:"payload_compression"`
+
+ // Disabled prevents using OTel Arrow streams. The exporter
+ // falls back to standard OTLP.
+ Disabled bool `mapstructure:"disabled"`
+
+ // DisableDowngrade prevents this exporter from fallback back
+ // to standard OTLP. If the Arrow service is unavailable, it
+ // will retry and/or fail.
+ DisableDowngrade bool `mapstructure:"disable_downgrade"`
+}
+
+var _ component.Config = (*Config)(nil)
+
+// Validate checks if the exporter configuration is valid
+func (cfg *Config) Validate() error {
+ if err := cfg.QueueSettings.Validate(); err != nil {
+ return fmt.Errorf("queue settings has invalid configuration: %w", err)
+ }
+ if err := cfg.Arrow.Validate(); err != nil {
+ return fmt.Errorf("arrow settings has invalid configuration: %w", err)
+ }
+
+ return nil
+}
+
+// Validate returns an error when the number of streams is less than 1.
+func (cfg *ArrowSettings) Validate() error {
+ if cfg.NumStreams < 1 {
+ return fmt.Errorf("stream count must be > 0: %d", cfg.NumStreams)
+ }
+
+ if cfg.MaxStreamLifetime.Seconds() < 1 {
+ return fmt.Errorf("max stream life must be >= 1s: %d", cfg.MaxStreamLifetime)
+ }
+
+ if err := cfg.Zstd.Validate(); err != nil {
+ return fmt.Errorf("zstd encoder: invalid configuration: %w", err)
+ }
+
+ // The cfg.PayloadCompression field is validated by the underlying library,
+ // but we only support Zstd or none.
+ switch cfg.PayloadCompression {
+ case "none", "", configcompression.TypeZstd:
+ default:
+ return fmt.Errorf("unsupported payload compression: %s", cfg.PayloadCompression)
+ }
+ return nil
+}
+
+func (cfg *ArrowSettings) toArrowProducerOptions() (arrowOpts []config.Option) {
+ switch cfg.PayloadCompression {
+ case configcompression.TypeZstd:
+ arrowOpts = append(arrowOpts, config.WithZstd())
+ case "none", "":
+ arrowOpts = append(arrowOpts, config.WithNoZstd())
+ default:
+ // Should have failed in validate, nothing we can do.
+ }
+ return
+}
diff --git a/exporter/otelarrowexporter/config_test.go b/exporter/otelarrowexporter/config_test.go
new file mode 100644
index 000000000000..e855fa078d57
--- /dev/null
+++ b/exporter/otelarrowexporter/config_test.go
@@ -0,0 +1,151 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package otelarrowexporter
+
+import (
+ "math"
+ "path/filepath"
+ "testing"
+ "time"
+
+ "github.com/open-telemetry/otel-arrow/collector/compression/zstd"
+ "github.com/open-telemetry/otel-arrow/pkg/config"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configauth"
+ "go.opentelemetry.io/collector/config/configcompression"
+ "go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/config/configtls"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
+)
+
+func TestUnmarshalDefaultConfig(t *testing.T) {
+ cm, err := confmaptest.LoadConf(filepath.Join("testdata", "default.yaml"))
+ require.NoError(t, err)
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+ assert.NoError(t, component.UnmarshalConfig(cm, cfg))
+ assert.Equal(t, factory.CreateDefaultConfig(), cfg)
+ assert.Equal(t, "round_robin", cfg.(*Config).ClientConfig.BalancerName)
+}
+
+func TestUnmarshalConfig(t *testing.T) {
+ cm, err := confmaptest.LoadConf(filepath.Join("testdata", "config.yaml"))
+ require.NoError(t, err)
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+ assert.NoError(t, component.UnmarshalConfig(cm, cfg))
+ assert.Equal(t,
+ &Config{
+ TimeoutSettings: exporterhelper.TimeoutSettings{
+ Timeout: 10 * time.Second,
+ },
+ RetrySettings: configretry.BackOffConfig{
+ Enabled: true,
+ InitialInterval: 10 * time.Second,
+ RandomizationFactor: 0.7,
+ Multiplier: 1.3,
+ MaxInterval: 1 * time.Minute,
+ MaxElapsedTime: 10 * time.Minute,
+ },
+ QueueSettings: exporterhelper.QueueSettings{
+ Enabled: true,
+ NumConsumers: 2,
+ QueueSize: 10,
+ },
+ ClientConfig: configgrpc.ClientConfig{
+ Headers: map[string]configopaque.String{
+ "can you have a . here?": "F0000000-0000-0000-0000-000000000000",
+ "header1": "234",
+ "another": "somevalue",
+ },
+ Endpoint: "1.2.3.4:1234",
+ Compression: "none",
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
+ CAFile: "/var/lib/mycert.pem",
+ },
+ Insecure: false,
+ },
+ Keepalive: &configgrpc.KeepaliveClientConfig{
+ Time: 20 * time.Second,
+ PermitWithoutStream: true,
+ Timeout: 30 * time.Second,
+ },
+ WriteBufferSize: 512 * 1024,
+ BalancerName: "experimental",
+ Auth: &configauth.Authentication{AuthenticatorID: component.MustNewID("nop")},
+ },
+ Arrow: ArrowSettings{
+ NumStreams: 2,
+ MaxStreamLifetime: 2 * time.Hour,
+ PayloadCompression: configcompression.TypeZstd,
+ Zstd: zstd.DefaultEncoderConfig(),
+ },
+ }, cfg)
+}
+
+func TestArrowSettingsValidate(t *testing.T) {
+ settings := func(enabled bool, numStreams int, maxStreamLifetime time.Duration, level zstd.Level) *ArrowSettings {
+ return &ArrowSettings{
+ Disabled: !enabled,
+ NumStreams: numStreams,
+ MaxStreamLifetime: maxStreamLifetime,
+ Zstd: zstd.EncoderConfig{
+ Level: level,
+ },
+ }
+ }
+ require.NoError(t, settings(true, 1, 10*time.Second, zstd.DefaultLevel).Validate())
+ require.NoError(t, settings(false, 1, 10*time.Second, zstd.DefaultLevel).Validate())
+ require.NoError(t, settings(true, 2, 1*time.Second, zstd.DefaultLevel).Validate())
+ require.NoError(t, settings(true, math.MaxInt, 10*time.Second, zstd.DefaultLevel).Validate())
+ require.NoError(t, settings(true, math.MaxInt, 10*time.Second, zstd.MaxLevel).Validate())
+ require.NoError(t, settings(true, math.MaxInt, 10*time.Second, zstd.MinLevel).Validate())
+
+ require.Error(t, settings(true, 0, 10*time.Second, zstd.DefaultLevel).Validate())
+ require.Contains(t, settings(true, 0, 10*time.Second, zstd.DefaultLevel).Validate().Error(), "stream count must be")
+ require.Contains(t, settings(true, 1, -1*time.Second, zstd.DefaultLevel).Validate().Error(), "max stream life must be")
+ require.Error(t, settings(false, -1, 10*time.Second, zstd.DefaultLevel).Validate())
+ require.Error(t, settings(false, 1, -1*time.Second, zstd.DefaultLevel).Validate())
+ require.Error(t, settings(true, math.MinInt, 10*time.Second, zstd.DefaultLevel).Validate())
+ require.Error(t, settings(true, math.MaxInt, 10*time.Second, zstd.MinLevel-1).Validate())
+ require.Error(t, settings(true, math.MaxInt, 10*time.Second, zstd.MaxLevel+1).Validate())
+}
+
+func TestDefaultSettingsValid(t *testing.T) {
+ cfg := createDefaultConfig()
+ // this must be set by the user and config
+ // validation always checks that a value is set.
+ cfg.(*Config).Arrow.MaxStreamLifetime = 2 * time.Second
+ require.NoError(t, cfg.(*Config).Validate())
+}
+
+func TestArrowSettingsPayloadCompressionZstd(t *testing.T) {
+ settings := ArrowSettings{
+ PayloadCompression: configcompression.TypeZstd,
+ }
+ var config config.Config
+ for _, opt := range settings.toArrowProducerOptions() {
+ opt(&config)
+ }
+ require.True(t, config.Zstd)
+}
+
+func TestArrowSettingsPayloadCompressionNone(t *testing.T) {
+ for _, value := range []string{"", "none"} {
+ settings := ArrowSettings{
+ PayloadCompression: configcompression.Type(value),
+ }
+ var config config.Config
+ for _, opt := range settings.toArrowProducerOptions() {
+ opt(&config)
+ }
+ require.False(t, config.Zstd)
+ }
+}
diff --git a/exporter/otelarrowexporter/doc.go b/exporter/otelarrowexporter/doc.go
new file mode 100644
index 000000000000..e76c5e35612b
--- /dev/null
+++ b/exporter/otelarrowexporter/doc.go
@@ -0,0 +1,10 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+//go:generate mdatagen metadata.yaml
+
+// Package otelarrowexporter exports telemetry using OpenTelemetry
+// Protocol with Apache Arrow and/or standard OpenTelemetry Protocol
+// data using configuration structures similar to the core OTLP
+// exporter.
+package otelarrowexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter"
diff --git a/exporter/otelarrowexporter/factory.go b/exporter/otelarrowexporter/factory.go
new file mode 100644
index 000000000000..edc1c5f2c3fc
--- /dev/null
+++ b/exporter/otelarrowexporter/factory.go
@@ -0,0 +1,146 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package otelarrowexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter"
+
+import (
+ "context"
+ "runtime"
+ "time"
+
+ arrowpb "github.com/open-telemetry/otel-arrow/api/experimental/arrow/v1"
+ "github.com/open-telemetry/otel-arrow/collector/compression/zstd"
+ "github.com/open-telemetry/otel-arrow/collector/netstats"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configcompression"
+ "go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "google.golang.org/grpc"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter/internal/arrow"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter/internal/metadata"
+)
+
+// NewFactory creates a factory for OTel-Arrow exporter.
+func NewFactory() exporter.Factory {
+ return exporter.NewFactory(
+ metadata.Type,
+ createDefaultConfig,
+ exporter.WithTraces(createTracesExporter, metadata.TracesStability),
+ exporter.WithMetrics(createMetricsExporter, metadata.MetricsStability),
+ exporter.WithLogs(createLogsExporter, metadata.LogsStability),
+ )
+}
+
+func createDefaultConfig() component.Config {
+ return &Config{
+ TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
+ RetrySettings: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: exporterhelper.NewDefaultQueueSettings(),
+
+ ClientConfig: configgrpc.ClientConfig{
+ Headers: map[string]configopaque.String{},
+ // Default to zstd compression
+ Compression: configcompression.TypeZstd,
+ // We almost read 0 bytes, so no need to tune ReadBufferSize.
+ WriteBufferSize: 512 * 1024,
+ // The `configgrpc` default is pick_first,
+ // which is not great for OTel Arrow exporters
+ // because it concentrates load at a single
+ // destination.
+ BalancerName: "round_robin",
+ },
+ Arrow: ArrowSettings{
+ NumStreams: runtime.NumCPU(),
+ MaxStreamLifetime: time.Hour,
+
+ Zstd: zstd.DefaultEncoderConfig(),
+
+ // PayloadCompression is off by default because gRPC
+ // compression is on by default, above.
+ PayloadCompression: "",
+ },
+ }
+}
+
+func (e *baseExporter) helperOptions() []exporterhelper.Option {
+ return []exporterhelper.Option{
+ exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
+ exporterhelper.WithTimeout(e.config.TimeoutSettings),
+ exporterhelper.WithRetry(e.config.RetrySettings),
+ exporterhelper.WithQueue(e.config.QueueSettings),
+ exporterhelper.WithStart(e.start),
+ exporterhelper.WithShutdown(e.shutdown),
+ }
+}
+
+func gRPCName(desc grpc.ServiceDesc) string {
+ return netstats.GRPCStreamMethodName(desc, desc.Streams[0])
+}
+
+var (
+ arrowTracesMethod = gRPCName(arrowpb.ArrowTracesService_ServiceDesc)
+ arrowMetricsMethod = gRPCName(arrowpb.ArrowMetricsService_ServiceDesc)
+ arrowLogsMethod = gRPCName(arrowpb.ArrowLogsService_ServiceDesc)
+)
+
+func createArrowTracesStream(conn *grpc.ClientConn) arrow.StreamClientFunc {
+ return arrow.MakeAnyStreamClient(arrowTracesMethod, arrowpb.NewArrowTracesServiceClient(conn).ArrowTraces)
+}
+
+func createTracesExporter(
+ ctx context.Context,
+ set exporter.CreateSettings,
+ cfg component.Config,
+) (exporter.Traces, error) {
+ exp, err := newExporter(cfg, set, createArrowTracesStream)
+ if err != nil {
+ return nil, err
+ }
+ return exporterhelper.NewTracesExporter(ctx, exp.settings, exp.config,
+ exp.pushTraces,
+ exp.helperOptions()...,
+ )
+}
+
+func createArrowMetricsStream(conn *grpc.ClientConn) arrow.StreamClientFunc {
+ return arrow.MakeAnyStreamClient(arrowMetricsMethod, arrowpb.NewArrowMetricsServiceClient(conn).ArrowMetrics)
+}
+
+func createMetricsExporter(
+ ctx context.Context,
+ set exporter.CreateSettings,
+ cfg component.Config,
+) (exporter.Metrics, error) {
+ exp, err := newExporter(cfg, set, createArrowMetricsStream)
+ if err != nil {
+ return nil, err
+ }
+ return exporterhelper.NewMetricsExporter(ctx, exp.settings, exp.config,
+ exp.pushMetrics,
+ exp.helperOptions()...,
+ )
+}
+
+func createArrowLogsStream(conn *grpc.ClientConn) arrow.StreamClientFunc {
+ return arrow.MakeAnyStreamClient(arrowLogsMethod, arrowpb.NewArrowLogsServiceClient(conn).ArrowLogs)
+}
+
+func createLogsExporter(
+ ctx context.Context,
+ set exporter.CreateSettings,
+ cfg component.Config,
+) (exporter.Logs, error) {
+ exp, err := newExporter(cfg, set, createArrowLogsStream)
+ if err != nil {
+ return nil, err
+ }
+ return exporterhelper.NewLogsExporter(ctx, exp.settings, exp.config,
+ exp.pushLogs,
+ exp.helperOptions()...,
+ )
+}
diff --git a/exporter/otelarrowexporter/factory_test.go b/exporter/otelarrowexporter/factory_test.go
new file mode 100644
index 000000000000..45d20e553288
--- /dev/null
+++ b/exporter/otelarrowexporter/factory_test.go
@@ -0,0 +1,235 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package otelarrowexporter
+
+import (
+ "context"
+ "path/filepath"
+ "runtime"
+ "testing"
+ "time"
+
+ "github.com/open-telemetry/otel-arrow/collector/compression/zstd"
+ "github.com/open-telemetry/otel-arrow/collector/testutil"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/configcompression"
+ "go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/config/configtls"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+)
+
+func TestCreateDefaultConfig(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+ assert.NotNil(t, cfg, "failed to create default config")
+ assert.NoError(t, componenttest.CheckConfigStruct(cfg))
+ ocfg, ok := factory.CreateDefaultConfig().(*Config)
+ assert.True(t, ok)
+ assert.Equal(t, ocfg.RetrySettings, configretry.NewDefaultBackOffConfig())
+ assert.Equal(t, ocfg.QueueSettings, exporterhelper.NewDefaultQueueSettings())
+ assert.Equal(t, ocfg.TimeoutSettings, exporterhelper.NewDefaultTimeoutSettings())
+ assert.Equal(t, ocfg.Compression, configcompression.TypeZstd)
+ assert.Equal(t, ocfg.Arrow, ArrowSettings{
+ Disabled: false,
+ NumStreams: runtime.NumCPU(),
+ MaxStreamLifetime: time.Hour,
+ PayloadCompression: "",
+ Zstd: zstd.DefaultEncoderConfig(),
+ })
+}
+
+func TestCreateMetricsExporter(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.ClientConfig.Endpoint = testutil.GetAvailableLocalAddress(t)
+
+ set := exportertest.NewNopCreateSettings()
+ oexp, err := factory.CreateMetricsExporter(context.Background(), set, cfg)
+ require.Nil(t, err)
+ require.NotNil(t, oexp)
+}
+
+func TestCreateTracesExporter(t *testing.T) {
+ endpoint := testutil.GetAvailableLocalAddress(t)
+ tests := []struct {
+ name string
+ config Config
+ mustFailOnCreate bool
+ mustFailOnStart bool
+ }{
+ {
+ name: "NoEndpoint",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: "",
+ },
+ },
+ mustFailOnCreate: true,
+ },
+ {
+ name: "UseSecure",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ TLSSetting: configtls.ClientConfig{
+ Insecure: false,
+ },
+ },
+ },
+ },
+ {
+ name: "Keepalive",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ Keepalive: &configgrpc.KeepaliveClientConfig{
+ Time: 30 * time.Second,
+ Timeout: 25 * time.Second,
+ PermitWithoutStream: true,
+ },
+ },
+ },
+ },
+ {
+ name: "NoneCompression",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ Compression: "none",
+ },
+ },
+ },
+ {
+ name: "GzipCompression",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ Compression: configcompression.TypeGzip,
+ },
+ },
+ },
+ {
+ name: "SnappyCompression",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ Compression: configcompression.TypeSnappy,
+ },
+ },
+ },
+ {
+ name: "ZstdCompression",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ Compression: configcompression.TypeZstd,
+ },
+ },
+ },
+ {
+ name: "Headers",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ Headers: map[string]configopaque.String{
+ "hdr1": "val1",
+ "hdr2": "val2",
+ },
+ },
+ },
+ },
+ {
+ name: "NumConsumers",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ },
+ },
+ },
+ {
+ name: "CaCert",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
+ CAFile: filepath.Join("testdata", "test_cert.pem"),
+ },
+ },
+ },
+ },
+ },
+ {
+ name: "CertPemFileError",
+ config: Config{
+ ClientConfig: configgrpc.ClientConfig{
+ Endpoint: endpoint,
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
+ CAFile: "nosuchfile",
+ },
+ },
+ },
+ },
+ mustFailOnStart: true,
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ factory := NewFactory()
+ set := exportertest.NewNopCreateSettings()
+ config := tt.config
+ consumer, err := factory.CreateTracesExporter(context.Background(), set, &config)
+ if tt.mustFailOnCreate {
+ assert.NotNil(t, err)
+ return
+ }
+ assert.NoError(t, err)
+ assert.NotNil(t, consumer)
+ err = consumer.Start(context.Background(), componenttest.NewNopHost())
+ if tt.mustFailOnStart {
+ assert.Error(t, err)
+ } else {
+ assert.NoError(t, err)
+ }
+ // Shutdown is called even when Start fails
+ err = consumer.Shutdown(context.Background())
+ if err != nil {
+ // Since the endpoint of OTLP exporter doesn't actually exist,
+ // exporter may already stop because it cannot connect.
+ assert.Equal(t, err.Error(), "rpc error: code = Canceled desc = grpc: the client connection is closing")
+ }
+ })
+ }
+}
+
+func TestCreateLogsExporter(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.ClientConfig.Endpoint = testutil.GetAvailableLocalAddress(t)
+
+ set := exportertest.NewNopCreateSettings()
+ oexp, err := factory.CreateLogsExporter(context.Background(), set, cfg)
+ require.Nil(t, err)
+ require.NotNil(t, oexp)
+}
+
+func TestCreateArrowTracesExporter(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig().(*Config)
+ cfg.ClientConfig.Endpoint = testutil.GetAvailableLocalAddress(t)
+ cfg.Arrow = ArrowSettings{
+ NumStreams: 1,
+ }
+ set := exportertest.NewNopCreateSettings()
+ oexp, err := factory.CreateTracesExporter(context.Background(), set, cfg)
+ require.Nil(t, err)
+ require.NotNil(t, oexp)
+}
diff --git a/exporter/otelarrowexporter/go.mod b/exporter/otelarrowexporter/go.mod
new file mode 100644
index 000000000000..91a1bac6b07f
--- /dev/null
+++ b/exporter/otelarrowexporter/go.mod
@@ -0,0 +1,82 @@
+module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter
+
+go 1.21
+
+require (
+ github.com/open-telemetry/otel-arrow v0.18.0
+ github.com/open-telemetry/otel-arrow/collector v0.20.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configauth v0.98.0
+ go.opentelemetry.io/collector/config/configcompression v1.5.0
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ google.golang.org/grpc v1.63.2
+)
+
+require (
+ github.com/apache/arrow/go/v14 v14.0.2 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/fsnotify/fsnotify v1.7.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/goccy/go-json v0.10.2 // indirect
+ github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect
+ github.com/google/flatbuffers v23.5.26+incompatible // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/json-iterator/go v1.1.12 // indirect
+ github.com/klauspost/compress v1.17.7 // indirect
+ github.com/klauspost/cpuid/v2 v2.2.5 // 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.1.1 // indirect
+ github.com/mitchellh/copystructure v1.2.0 // indirect
+ github.com/mitchellh/reflectwalk v1.0.2 // indirect
+ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
+ github.com/modern-go/reflect2 v1.0.2 // indirect
+ github.com/mostynb/go-grpc-compression v1.2.2 // indirect
+ github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/zeebo/xxh3 v1.0.2 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/mod v0.13.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/text v0.14.0 // indirect
+ golang.org/x/tools v0.14.0 // indirect
+ golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/exporter/otelarrowexporter/go.sum b/exporter/otelarrowexporter/go.sum
new file mode 100644
index 000000000000..714d7d65c473
--- /dev/null
+++ b/exporter/otelarrowexporter/go.sum
@@ -0,0 +1,208 @@
+github.com/apache/arrow/go/v14 v14.0.2 h1:N8OkaJEOfI3mEZt07BIkvo4sC6XDbL+48MBPWO5IONw=
+github.com/apache/arrow/go/v14 v14.0.2/go.mod h1:u3fgh3EdgN/YQ8cVQRguVW3R+seMybFg8QBQ5LU+eBY=
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/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/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
+github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
+github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk=
+github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/google/flatbuffers v23.5.26+incompatible h1:M9dgRyhJemaM4Sw8+66GHBu8ioaQmyPLg1b8VwK5WJg=
+github.com/google/flatbuffers v23.5.26+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
+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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/klauspost/compress v1.17.7 h1:ehO88t2UGzQK66LMdE8tibEd1ErmzZjNEqWkjLAKQQg=
+github.com/klauspost/compress v1.17.7/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
+github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg=
+github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws=
+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.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+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/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0bKXtz2Znl3GGI=
+github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w=
+github.com/open-telemetry/otel-arrow v0.18.0 h1:v3KH1HIpdXRy+V5awAmn2M+uthbE52Qi7svBYSweASI=
+github.com/open-telemetry/otel-arrow v0.18.0/go.mod h1:054cuTUlLVHH6Y//65bEPeMiHjYRs7DiX/el+yQbgYg=
+github.com/open-telemetry/otel-arrow/collector v0.20.0 h1:DWo3OK2kvmGXcgoTc7dRBrADuwu0PKX31KcG/q7fElk=
+github.com/open-telemetry/otel-arrow/collector v0.20.0/go.mod h1:MDDGj7VCOA6ya0d+xbPneynT5gC7TCHV3vVeXDEo41g=
+github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
+github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ=
+github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
+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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
+github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
+github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0=
+github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d h1:jtJma62tbqLibJ5sFQz8bKtEM8rJBtfilJ2qTU199MI=
+golang.org/x/exp v0.0.0-20231006140011-7918f672742d/go.mod h1:ldy0pHrwJyGW56pPQzzkH36rKxoZW1tw7ZJpeKx+hdo=
+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.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY=
+golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc=
+golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
+golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
+gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
+gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
+google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/exporter/otelarrowexporter/internal/arrow/exporter.go b/exporter/otelarrowexporter/internal/arrow/exporter.go
new file mode 100644
index 000000000000..e4b2d766511b
--- /dev/null
+++ b/exporter/otelarrowexporter/internal/arrow/exporter.go
@@ -0,0 +1,44 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package arrow // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter/internal/arrow"
+
+import (
+ "context"
+
+ arrowpb "github.com/open-telemetry/otel-arrow/api/experimental/arrow/v1"
+ "google.golang.org/grpc"
+)
+
+// Exporter exports OpenTelemetry Protocol with Apache Arrow protocol
+// data for a specific signal. One of these structs is created per
+// baseExporter, in the top-level module, when Arrow is enabled.
+type Exporter struct {
+ // TODO: Implementation
+}
+
+// AnyStreamClient is the interface supported by all Arrow streams,
+// i.e., any of the Arrow-supported signals having a single method w/
+// the appropriate per-signal name.
+type AnyStreamClient interface {
+ Send(*arrowpb.BatchArrowRecords) error
+ Recv() (*arrowpb.BatchStatus, error)
+ grpc.ClientStream
+}
+
+// StreamClientFunc is a constructor for AnyStreamClients. These return
+// the method name to assist with instrumentation, since the gRPC stats
+// handler isn't able to see the correct uncompressed size.
+type StreamClientFunc func(context.Context, ...grpc.CallOption) (AnyStreamClient, string, error)
+
+// MakeAnyStreamClient accepts any Arrow-like stream, which is one of
+// the Arrow-supported signals having a single method w/ the
+// appropriate name, and turns it into an AnyStreamClient. The method
+// name is carried through because once constructed, gRPC clients will
+// not reveal their service and method names.
+func MakeAnyStreamClient[T AnyStreamClient](method string, clientFunc func(ctx context.Context, opts ...grpc.CallOption) (T, error)) StreamClientFunc {
+ return func(ctx context.Context, opts ...grpc.CallOption) (AnyStreamClient, string, error) {
+ client, err := clientFunc(ctx, opts...)
+ return client, method, err
+ }
+}
diff --git a/exporter/otelarrowexporter/internal/metadata/generated_status.go b/exporter/otelarrowexporter/internal/metadata/generated_status.go
new file mode 100644
index 000000000000..23f908751c9c
--- /dev/null
+++ b/exporter/otelarrowexporter/internal/metadata/generated_status.go
@@ -0,0 +1,27 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package metadata
+
+import (
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("otelarrow")
+)
+
+const (
+ TracesStability = component.StabilityLevelDevelopment
+ MetricsStability = component.StabilityLevelDevelopment
+ LogsStability = component.StabilityLevelDevelopment
+)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/otelarrow")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/otelarrow")
+}
diff --git a/exporter/otelarrowexporter/metadata.yaml b/exporter/otelarrowexporter/metadata.yaml
new file mode 100644
index 000000000000..59ac44f0a15b
--- /dev/null
+++ b/exporter/otelarrowexporter/metadata.yaml
@@ -0,0 +1,15 @@
+type: otelarrow
+scope_name: otelcol/otelarrow
+
+status:
+ class: exporter
+ stability:
+ development: [traces, metrics, logs]
+ distributions: []
+ codeowners:
+ active: [jmacd, moh-osman3]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
+ skip_shutdown: true
diff --git a/exporter/otelarrowexporter/otelarrow.go b/exporter/otelarrowexporter/otelarrow.go
new file mode 100644
index 000000000000..c1e689e3c01a
--- /dev/null
+++ b/exporter/otelarrowexporter/otelarrow.go
@@ -0,0 +1,78 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package otelarrowexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter"
+
+import (
+ "context"
+ "errors"
+ "fmt"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ "google.golang.org/grpc"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/otelarrowexporter/internal/arrow"
+)
+
+// baseExporter is used as the basis for all OpenTelemetry signal types.
+type baseExporter struct {
+ // config is the active component.Config.
+ config *Config
+
+ // settings are the active collector-wide settings.
+ settings exporter.CreateSettings
+
+ // TODO: implementation
+}
+
+type streamClientFactory func(conn *grpc.ClientConn) arrow.StreamClientFunc
+
+// newExporter configures a new exporter using the associated stream factory for Arrow.
+func newExporter(cfg component.Config, set exporter.CreateSettings, _ streamClientFactory) (*baseExporter, error) {
+ // TODO: Implementation.
+ oCfg, ok := cfg.(*Config)
+ if !ok {
+ return nil, fmt.Errorf("unrecognized configuration type: %T", cfg)
+ }
+ if oCfg.Endpoint == "" {
+ return nil, errors.New("OTel-Arrow exporter config requires an Endpoint")
+ }
+ return &baseExporter{
+ config: oCfg,
+ settings: set,
+ }, nil
+}
+
+// start configures and starts the gRPC client connection.
+func (e *baseExporter) start(ctx context.Context, host component.Host) (err error) {
+ // TODO: Implementation: the following is a placeholder used
+ // to satisfy gRPC configuration-related configuration errors.
+ if _, err = e.config.ClientConfig.ToClientConn(ctx, host, e.settings.TelemetrySettings); err != nil {
+ return err
+ }
+ return nil
+}
+
+func (e *baseExporter) shutdown(_ context.Context) error {
+ // TODO: Implementation.
+ return nil
+}
+
+func (e *baseExporter) pushTraces(_ context.Context, _ ptrace.Traces) error {
+ // TODO: Implementation.
+ return nil
+}
+
+func (e *baseExporter) pushMetrics(_ context.Context, _ pmetric.Metrics) error {
+ // TODO: Implementation.
+ return nil
+}
+
+func (e *baseExporter) pushLogs(_ context.Context, _ plog.Logs) error {
+ // TODO: Implementation.
+ return nil
+}
diff --git a/exporter/otelarrowexporter/testdata/config.yaml b/exporter/otelarrowexporter/testdata/config.yaml
new file mode 100644
index 000000000000..46134951f462
--- /dev/null
+++ b/exporter/otelarrowexporter/testdata/config.yaml
@@ -0,0 +1,32 @@
+endpoint: "1.2.3.4:1234"
+compression: "none"
+tls:
+ ca_file: /var/lib/mycert.pem
+timeout: 10s
+sending_queue:
+ enabled: true
+ num_consumers: 2
+ queue_size: 10
+retry_on_failure:
+ enabled: true
+ initial_interval: 10s
+ randomization_factor: 0.7
+ multiplier: 1.3
+ max_interval: 60s
+ max_elapsed_time: 10m
+auth:
+ authenticator: nop
+headers:
+ "can you have a . here?": "F0000000-0000-0000-0000-000000000000"
+ header1: 234
+ another: "somevalue"
+keepalive:
+ time: 20s
+ timeout: 30s
+ permit_without_stream: true
+balancer_name: "experimental"
+arrow:
+ num_streams: 2
+ disabled: false
+ max_stream_lifetime: 2h
+ payload_compression: "zstd"
diff --git a/exporter/otelarrowexporter/testdata/default.yaml b/exporter/otelarrowexporter/testdata/default.yaml
new file mode 100644
index 000000000000..458203eaedb7
--- /dev/null
+++ b/exporter/otelarrowexporter/testdata/default.yaml
@@ -0,0 +1 @@
+# when nothing is set
diff --git a/exporter/otelarrowexporter/testdata/test_cert.pem b/exporter/otelarrowexporter/testdata/test_cert.pem
new file mode 100644
index 000000000000..b3842e597a23
--- /dev/null
+++ b/exporter/otelarrowexporter/testdata/test_cert.pem
@@ -0,0 +1,17 @@
+-----BEGIN CERTIFICATE-----
+MIICpDCCAYwCCQC5oaFsqLW3GTANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls
+b2NhbGhvc3QwHhcNMjEwNzE0MDAxMzU2WhcNMzEwNzEyMDAxMzU2WjAUMRIwEAYD
+VQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDO
+mKaE1qg5VLMwaUnSzufT23rRJFbuy/HDXwsH63yZVSsISQkGjkBYBgrqAMtVnsI/
+l4gXtBWkZtJFs68Sbo9ps3W0PdB5+d12R5NUNA1rkZtx3jtEN33dpGhifug/TIZe
+7Zr0G1z6gNoaEezk0Jpg4KsH7QpIeHPRhIZMyWeqddgD/qL4/ukaU4NOORuF3WoT
+oo2LpI3jUq66mz2N2Inq0V/OX7BYB4Ur6EtjWh2baiUuw9fq+oLUlgZd6ypnugC/
++YfgYqvWtRntmEr0Z+O4Kz81P2IpH/0h1RFhWyK6thVGa9cx6aseCp3V2cMXfGfc
+z4n3Uvz87v+bZvGbcse/AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAAlvNBNoqXUQ
+ohR0eozIHGeJ94U7WK5zXf2NSvmRlwHzHXvUq6GKd+8Bv1foMjI6OpSOZmjtRGsc
+rWET1WjSyQddRfqYazhWp1IyYu5LfATwPS+RXJAkWixKVfG+Ta2x6u+aT/bSZwEg
+NwRerc6pyqv5UG8Z7Pe1kAxbgOwZv5KXAewIgTSbEkmIp1Dg8GhGeWD5pjYNCkJV
+Na2KMAUWP3PeQzdSBKmBNpsRUALuSTxb5u7pl+PA7FLInTtDeyZn8xpO1GPBhbJE
+trDbmTbj5YexOXEaQtGtZ6fwRw2jnUm8nqtXozxIomnVTBO8vLmZAUgyJ71trRw0
+gE9tH5Ndlug=
+-----END CERTIFICATE-----
diff --git a/exporter/otelarrowexporter/testdata/test_key.pem b/exporter/otelarrowexporter/testdata/test_key.pem
new file mode 100644
index 000000000000..dedfad3df6e3
--- /dev/null
+++ b/exporter/otelarrowexporter/testdata/test_key.pem
@@ -0,0 +1,28 @@
+-----BEGIN PRIVATE KEY-----
+MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOmKaE1qg5VLMw
+aUnSzufT23rRJFbuy/HDXwsH63yZVSsISQkGjkBYBgrqAMtVnsI/l4gXtBWkZtJF
+s68Sbo9ps3W0PdB5+d12R5NUNA1rkZtx3jtEN33dpGhifug/TIZe7Zr0G1z6gNoa
+Eezk0Jpg4KsH7QpIeHPRhIZMyWeqddgD/qL4/ukaU4NOORuF3WoToo2LpI3jUq66
+mz2N2Inq0V/OX7BYB4Ur6EtjWh2baiUuw9fq+oLUlgZd6ypnugC/+YfgYqvWtRnt
+mEr0Z+O4Kz81P2IpH/0h1RFhWyK6thVGa9cx6aseCp3V2cMXfGfcz4n3Uvz87v+b
+ZvGbcse/AgMBAAECggEADeR39iDVKR3H+u5pl3JwZm+w35V4/w/ZzxB6FmtAcrMm
+dKUspTM1onWtkDTDd5t4ZnxTG3zxo5+Cbkt571xd6na16Ivrk/g4aza+8n+Zk200
+LcEK7ThqD1h56H2uMmt78bA6pkWcx/+YKv6flndsmi0hcyP+eAcZirJFsa4teWna
+P6rhI9zThc9OcecqGZIlmzJQ4cLbIO86QqkWW6yjKYg6riOb2g+i3e97ZngMCTcV
+lni+sksLlXBNKPqh1AkiUFe4pInRBh4LGQ5rNSYswEqlQY0iW0u4Hs3HNou0On+8
+1T8m5wzKQ+23AN+vVRJ/MHssQiB/TPK92jXVgEz6eQKBgQD2GEb7NzDIxsAQZBQo
+tt3jYitNcAEqMWeT7wxCMMue4wIrT6Fp6NuG5NMVqLglzx72m6TXg7YzZxPrAnlH
+jblWI4sxwVC8BjjYyGud7qMuhUIZmI8aS9HuYW0ODSxkcpVVXd4HDUYKg7PafAkl
+cj745E5KGD+qW44KASTTQ1SwRQKBgQDW6WLp/nPVPO5YEK4nzS7b1RRC8ypHiKd6
+LzhA2izgcsmO3F3Y5ZZ5rzeFbjgZiGFTUB/r1mgomI8kZyIGP1AN6o8oY9I89gHY
+/DEEagIsFK5jAEoMeN0qbgqasOXpi+uUHCNidWa7OWOL9Rsh7dyVT54xcqMC2Qak
+Vpoy5miiMwKBgQDuOHH9nF9M+5fQRhB9mQcRpWXlgBagkVKCkVR8fl+dXoIrCtpl
+e1OGMNtki/42G1kNv3zCYm1tNMrDI5HjAf32tFF5yHguipdcwiXqq6aq0bQ6ssNT
+4TFGYGkAwR/H3GNST5stmFvEsdjYFlmENiNfKyHd97spXZcReCn9l5/TQQKBgDRG
+PpYWG4zBrmPjYskxonU8ZhpG1YDi34Hb3H4B06qgoSBLv9QTPD/K++FLxv+G6c1/
+DtSpqVo+iYrcPy1v1wQbisjTRv8nA5oI9c9SDcc1HJneJyTTfVBlxdSMtM/TBfFX
+ys+XKO7fbbRMYVYmamIzJJJ4hOgba/8rRYSeANN7AoGBAMDdrT+ig3aDMratbAvY
+lqsfN3AtxoZ+ZVQYyUbzTSZPZ/to9eNuBzhRKcQ3QfG95nrHb7OnWHa7+1kc4p/Q
+jMgzJgRpajlES+F3CCMPgJIJg7Ev+yiSCJLP9ZOsC+E96bK265hUcDyCXwb3Wzmg
+4L9sc1QsQW80QO/RnaEzGO51
+-----END PRIVATE KEY-----
diff --git a/exporter/prometheusexporter/README.md b/exporter/prometheusexporter/README.md
index 752686eba711..c208eaa11abb 100644
--- a/exporter/prometheusexporter/README.md
+++ b/exporter/prometheusexporter/README.md
@@ -4,18 +4,13 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: metrics |
-| Distributions | [core], [contrib], [aws], [grafana], [observiq], [redhat], [sumo] |
+| Distributions | [core], [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fprometheus%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fprometheus) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fprometheus%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fprometheus) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@Aneurysm9](https://www.github.com/Aneurysm9) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[grafana]: https://github.com/grafana/agent
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[redhat]: https://github.com/os-observability/redhat-opentelemetry-collector
-[sumo]: https://github.com/SumoLogic/sumologic-otel-collector
Exports data in the [Prometheus format](https://prometheus.io/docs/concepts/data_model/), which allows it to be scraped by a [Prometheus](https://prometheus.io/) server.
@@ -24,7 +19,7 @@ Exports data in the [Prometheus format](https://prometheus.io/docs/concepts/data
The following settings are required:
-- `endpoint` (no default): the address on which metrics will be exposed, using path `/metrics`. For full list of `HTTPServerSettings` refer [here](https://github.com/open-telemetry/opentelemetry-collector/tree/main/config/confighttp).
+- `endpoint` (no default): the address on which metrics will be exposed, using path `/metrics`. For full list of `ServerConfig` refer [here](https://github.com/open-telemetry/opentelemetry-collector/tree/main/config/confighttp).
The following settings can be optionally configured:
diff --git a/exporter/prometheusexporter/accumulator.go b/exporter/prometheusexporter/accumulator.go
index 62fb29692ef7..e5c7f281092d 100644
--- a/exporter/prometheusexporter/accumulator.go
+++ b/exporter/prometheusexporter/accumulator.go
@@ -84,7 +84,7 @@ func (a *lastValueAccumulator) addMetric(metric pmetric.Metric, il pcommon.Instr
case pmetric.MetricTypeSum:
return a.accumulateSum(metric, il, resourceAttrs, now)
case pmetric.MetricTypeHistogram:
- return a.accumulateDoubleHistogram(metric, il, resourceAttrs, now)
+ return a.accumulateHistogram(metric, il, resourceAttrs, now)
case pmetric.MetricTypeSummary:
return a.accumulateSummary(metric, il, resourceAttrs, now)
default:
@@ -221,42 +221,70 @@ func (a *lastValueAccumulator) accumulateSum(metric pmetric.Metric, il pcommon.I
return
}
-func (a *lastValueAccumulator) accumulateDoubleHistogram(metric pmetric.Metric, il pcommon.InstrumentationScope, resourceAttrs pcommon.Map, now time.Time) (n int) {
- doubleHistogram := metric.Histogram()
+func (a *lastValueAccumulator) accumulateHistogram(metric pmetric.Metric, il pcommon.InstrumentationScope, resourceAttrs pcommon.Map, now time.Time) (n int) {
+ histogram := metric.Histogram()
+ a.logger.Debug("Accumulate histogram.....")
+ dps := histogram.DataPoints()
- // Drop metrics with non-cumulative aggregations
- if doubleHistogram.AggregationTemporality() != pmetric.AggregationTemporalityCumulative {
- return
- }
-
- dps := doubleHistogram.DataPoints()
for i := 0; i < dps.Len(); i++ {
ip := dps.At(i)
- signature := timeseriesSignature(il.Name(), metric, ip.Attributes(), resourceAttrs)
+ signature := timeseriesSignature(il.Name(), metric, ip.Attributes(), resourceAttrs) // uniquely identify this time series you are accumulating for
if ip.Flags().NoRecordedValue() {
a.registeredMetrics.Delete(signature)
return 0
}
- v, ok := a.registeredMetrics.Load(signature)
+ v, ok := a.registeredMetrics.Load(signature) // a accumulates metric values for all times series. Get value for particular time series
if !ok {
+ // first data point
m := copyMetricMetadata(metric)
ip.CopyTo(m.SetEmptyHistogram().DataPoints().AppendEmpty())
+ m.Histogram().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative)
a.registeredMetrics.Store(signature, &accumulatedValue{value: m, resourceAttrs: resourceAttrs, scope: il, updated: now})
n++
continue
}
mv := v.(*accumulatedValue)
- if ip.Timestamp().AsTime().Before(mv.value.Histogram().DataPoints().At(0).Timestamp().AsTime()) {
- // only keep datapoint with latest timestamp
+ m := copyMetricMetadata(metric)
+ m.SetEmptyHistogram().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative)
+
+ switch histogram.AggregationTemporality() {
+ case pmetric.AggregationTemporalityDelta:
+ pp := mv.value.Histogram().DataPoints().At(0) // previous aggregated value for time range
+ if ip.StartTimestamp().AsTime() != pp.Timestamp().AsTime() {
+ // treat misalignment as restart and reset, or violation of single-writer principle and drop
+ a.logger.With(
+ zap.String("ip_start_time", ip.StartTimestamp().String()),
+ zap.String("pp_start_time", pp.StartTimestamp().String()),
+ zap.String("pp_timestamp", pp.Timestamp().String()),
+ zap.String("ip_timestamp", ip.Timestamp().String()),
+ ).Warn("Misaligned starting timestamps")
+ if ip.StartTimestamp().AsTime().After(pp.Timestamp().AsTime()) {
+ a.logger.Debug("treating it like reset")
+ ip.CopyTo(m.Histogram().DataPoints().AppendEmpty())
+ } else {
+ a.logger.With(
+ zap.String("metric_name", metric.Name()),
+ ).Warn("Dropped misaligned histogram datapoint")
+ continue
+ }
+ } else {
+ a.logger.Debug("Accumulate another histogram datapoint")
+ accumulateHistogramValues(pp, ip, m.Histogram().DataPoints().AppendEmpty())
+ }
+ case pmetric.AggregationTemporalityCumulative:
+ if ip.Timestamp().AsTime().Before(mv.value.Histogram().DataPoints().At(0).Timestamp().AsTime()) {
+ // only keep datapoint with latest timestamp
+ continue
+ }
+
+ ip.CopyTo(m.Histogram().DataPoints().AppendEmpty())
+ default:
+ // unsupported temporality
continue
}
-
- m := copyMetricMetadata(metric)
- ip.CopyTo(m.SetEmptyHistogram().DataPoints().AppendEmpty())
- m.Histogram().SetAggregationTemporality(pmetric.AggregationTemporalityCumulative)
a.registeredMetrics.Store(signature, &accumulatedValue{value: m, resourceAttrs: resourceAttrs, scope: il, updated: now})
n++
}
@@ -316,3 +344,42 @@ func copyMetricMetadata(metric pmetric.Metric) pmetric.Metric {
return m
}
+
+func accumulateHistogramValues(prev, current, dest pmetric.HistogramDataPoint) {
+ dest.SetStartTimestamp(prev.StartTimestamp())
+
+ older := prev
+ newer := current
+ if current.Timestamp().AsTime().Before(prev.Timestamp().AsTime()) {
+ older = current
+ newer = prev
+ }
+
+ newer.Attributes().CopyTo(dest.Attributes())
+ dest.SetTimestamp(newer.Timestamp())
+
+ // checking for bucket boundary alignment, optionally re-aggregate on newer boundaries
+ match := older.ExplicitBounds().Len() == newer.ExplicitBounds().Len()
+ for i := 0; match && i < newer.ExplicitBounds().Len(); i++ {
+ match = older.ExplicitBounds().At(i) == newer.ExplicitBounds().At(i)
+ }
+
+ if match {
+
+ dest.SetCount(newer.Count() + older.Count())
+ dest.SetSum(newer.Sum() + older.Sum())
+
+ counts := make([]uint64, newer.BucketCounts().Len())
+ for i := 0; i < newer.BucketCounts().Len(); i++ {
+ counts[i] = newer.BucketCounts().At(i) + older.BucketCounts().At(i)
+ }
+ dest.BucketCounts().FromRaw(counts)
+ } else {
+ // use new value if bucket bounds do not match
+ dest.SetCount(newer.Count())
+ dest.SetSum(newer.Sum())
+ dest.BucketCounts().FromRaw(newer.BucketCounts().AsRaw())
+ }
+
+ dest.ExplicitBounds().FromRaw(newer.ExplicitBounds().AsRaw())
+}
diff --git a/exporter/prometheusexporter/accumulator_test.go b/exporter/prometheusexporter/accumulator_test.go
index c9b4eb3f7b2b..43b78ced5f01 100644
--- a/exporter/prometheusexporter/accumulator_test.go
+++ b/exporter/prometheusexporter/accumulator_test.go
@@ -15,48 +15,6 @@ import (
"go.uber.org/zap"
)
-func TestAccumulateDeltaAggregation(t *testing.T) {
- tests := []struct {
- name string
- fillMetric func(time.Time, pmetric.Metric)
- }{
- {
- name: "Histogram",
- fillMetric: func(ts time.Time, metric pmetric.Metric) {
- metric.SetName("test_metric")
- metric.SetEmptyHistogram().SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
- metric.SetDescription("test description")
- dp := metric.Histogram().DataPoints().AppendEmpty()
- dp.BucketCounts().FromRaw([]uint64{5, 2})
- dp.SetCount(7)
- dp.ExplicitBounds().FromRaw([]float64{3.5, 10.0})
- dp.SetSum(42.42)
- dp.Attributes().PutStr("label_1", "1")
- dp.Attributes().PutStr("label_2", "2")
- dp.SetTimestamp(pcommon.NewTimestampFromTime(ts))
- },
- },
- }
-
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- resourceMetrics := pmetric.NewResourceMetrics()
- ilm := resourceMetrics.ScopeMetrics().AppendEmpty()
- ilm.Scope().SetName("test")
- tt.fillMetric(time.Now(), ilm.Metrics().AppendEmpty())
-
- a := newAccumulator(zap.NewNop(), 1*time.Hour).(*lastValueAccumulator)
- n := a.Accumulate(resourceMetrics)
- require.Equal(t, 0, n)
-
- signature := timeseriesSignature(ilm.Scope().Name(), ilm.Metrics().At(0), pcommon.NewMap(), pcommon.NewMap())
- v, ok := a.registeredMetrics.Load(signature)
- require.False(t, ok)
- require.Nil(t, v)
- })
- }
-}
-
func TestAccumulateMetrics(t *testing.T) {
tests := []struct {
name string
@@ -167,7 +125,7 @@ func TestAccumulateMetrics(t *testing.T) {
},
{
name: "Summary",
- metric: func(ts time.Time, v float64, metrics pmetric.MetricSlice) {
+ metric: func(ts time.Time, _ float64, metrics pmetric.MetricSlice) {
metric := metrics.AppendEmpty()
metric.SetName("test_metric")
metric.SetDescription("test description")
@@ -236,7 +194,7 @@ func TestAccumulateMetrics(t *testing.T) {
},
{
name: "StalenessMarkerSummary",
- metric: func(ts time.Time, v float64, metrics pmetric.MetricSlice) {
+ metric: func(ts time.Time, _ float64, metrics pmetric.MetricSlice) {
metric := metrics.AppendEmpty()
metric.SetName("test_metric")
metric.SetDescription("test description")
@@ -422,6 +380,194 @@ func TestAccumulateDeltaToCumulative(t *testing.T) {
}
}
+func TestAccumulateDeltaToCumulativeHistogram(t *testing.T) {
+ appendDeltaHistogram := func(startTs time.Time, ts time.Time, count uint64, sum float64, counts []uint64, bounds []float64, metrics pmetric.MetricSlice) {
+ metric := metrics.AppendEmpty()
+ metric.SetName("test_metric")
+ metric.SetEmptyHistogram().SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
+ metric.SetDescription("test description")
+ dp := metric.Histogram().DataPoints().AppendEmpty()
+ dp.ExplicitBounds().FromRaw(bounds)
+ dp.BucketCounts().FromRaw(counts)
+ dp.SetCount(count)
+ dp.SetSum(sum)
+ dp.Attributes().PutStr("label_1", "1")
+ dp.Attributes().PutStr("label_2", "2")
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(ts))
+ dp.SetStartTimestamp(pcommon.NewTimestampFromTime(startTs))
+ }
+
+ t.Run("AccumulateHappyPath", func(t *testing.T) {
+ startTs := time.Now().Add(-5 * time.Second)
+ ts1 := time.Now().Add(-4 * time.Second)
+ ts2 := time.Now().Add(-3 * time.Second)
+ resourceMetrics := pmetric.NewResourceMetrics()
+ ilm := resourceMetrics.ScopeMetrics().AppendEmpty()
+ ilm.Scope().SetName("test")
+ appendDeltaHistogram(startTs, ts1, 5, 2.5, []uint64{1, 3, 1, 0, 0}, []float64{0.1, 0.5, 1, 10}, ilm.Metrics())
+ appendDeltaHistogram(ts1, ts2, 4, 8.3, []uint64{1, 1, 2, 0, 0}, []float64{0.1, 0.5, 1, 10}, ilm.Metrics())
+
+ m1 := ilm.Metrics().At(0).Histogram().DataPoints().At(0)
+ m2 := ilm.Metrics().At(1).Histogram().DataPoints().At(0)
+ signature := timeseriesSignature(ilm.Scope().Name(), ilm.Metrics().At(0), m2.Attributes(), pcommon.NewMap())
+
+ a := newAccumulator(zap.NewNop(), 1*time.Hour).(*lastValueAccumulator)
+ n := a.Accumulate(resourceMetrics)
+ require.Equal(t, 2, n)
+
+ m, ok := a.registeredMetrics.Load(signature)
+ v := m.(*accumulatedValue).value.Histogram().DataPoints().At(0)
+ require.True(t, ok)
+
+ require.Equal(t, m1.Sum()+m2.Sum(), v.Sum())
+ require.Equal(t, m1.Count()+m2.Count(), v.Count())
+
+ for i := 0; i < v.BucketCounts().Len(); i++ {
+ require.Equal(t, m1.BucketCounts().At(i)+m2.BucketCounts().At(i), v.BucketCounts().At(i))
+ }
+
+ for i := 0; i < v.ExplicitBounds().Len(); i++ {
+ require.Equal(t, m2.ExplicitBounds().At(i), v.ExplicitBounds().At(i))
+ }
+ })
+ t.Run("ResetBuckets/Ignore", func(t *testing.T) {
+ startTs := time.Now().Add(-5 * time.Second)
+ ts1 := time.Now().Add(-3 * time.Second)
+ ts2 := time.Now().Add(-4 * time.Second)
+ resourceMetrics := pmetric.NewResourceMetrics()
+ ilm := resourceMetrics.ScopeMetrics().AppendEmpty()
+ ilm.Scope().SetName("test")
+ appendDeltaHistogram(startTs, ts1, 5, 2.5, []uint64{1, 3, 1, 0, 0}, []float64{0.1, 0.5, 1, 10}, ilm.Metrics())
+ appendDeltaHistogram(startTs, ts2, 7, 5, []uint64{3, 1, 1, 0, 0}, []float64{0.1, 0.2, 1, 10}, ilm.Metrics())
+
+ m1 := ilm.Metrics().At(0).Histogram().DataPoints().At(0)
+ m2 := ilm.Metrics().At(1).Histogram().DataPoints().At(0)
+ signature := timeseriesSignature(ilm.Scope().Name(), ilm.Metrics().At(0), m2.Attributes(), pcommon.NewMap())
+
+ // should ignore metric with different buckets from the past
+ a := newAccumulator(zap.NewNop(), 1*time.Hour).(*lastValueAccumulator)
+ n := a.Accumulate(resourceMetrics)
+ require.Equal(t, 1, n)
+
+ m, ok := a.registeredMetrics.Load(signature)
+ v := m.(*accumulatedValue).value.Histogram().DataPoints().At(0)
+ require.True(t, ok)
+
+ require.Equal(t, m1.Sum(), v.Sum())
+ require.Equal(t, m1.Count(), v.Count())
+
+ for i := 0; i < v.BucketCounts().Len(); i++ {
+ require.Equal(t, m1.BucketCounts().At(i), v.BucketCounts().At(i))
+ }
+
+ for i := 0; i < v.ExplicitBounds().Len(); i++ {
+ require.Equal(t, m1.ExplicitBounds().At(i), v.ExplicitBounds().At(i))
+ }
+ })
+ t.Run("ResetBuckets/Perform", func(t *testing.T) {
+ // should reset when different buckets arrive
+ startTs := time.Now().Add(-5 * time.Second)
+ ts1 := time.Now().Add(-3 * time.Second)
+ ts2 := time.Now().Add(-2 * time.Second)
+ resourceMetrics := pmetric.NewResourceMetrics()
+ ilm := resourceMetrics.ScopeMetrics().AppendEmpty()
+ ilm.Scope().SetName("test")
+ appendDeltaHistogram(startTs, ts1, 5, 2.5, []uint64{1, 3, 1, 0, 0}, []float64{0.1, 0.5, 1, 10}, ilm.Metrics())
+ appendDeltaHistogram(ts1, ts2, 7, 5, []uint64{3, 1, 1, 0, 0}, []float64{0.1, 0.2, 1, 10}, ilm.Metrics())
+
+ m2 := ilm.Metrics().At(1).Histogram().DataPoints().At(0)
+ signature := timeseriesSignature(ilm.Scope().Name(), ilm.Metrics().At(0), m2.Attributes(), pcommon.NewMap())
+
+ // should ignore metric with different buckets from the past
+ a := newAccumulator(zap.NewNop(), 1*time.Hour).(*lastValueAccumulator)
+ n := a.Accumulate(resourceMetrics)
+ require.Equal(t, 2, n)
+
+ m, ok := a.registeredMetrics.Load(signature)
+ v := m.(*accumulatedValue).value.Histogram().DataPoints().At(0)
+ require.True(t, ok)
+
+ require.Equal(t, m2.Sum(), v.Sum())
+ require.Equal(t, m2.Count(), v.Count())
+
+ for i := 0; i < v.BucketCounts().Len(); i++ {
+ require.Equal(t, m2.BucketCounts().At(i), v.BucketCounts().At(i))
+ }
+
+ for i := 0; i < v.ExplicitBounds().Len(); i++ {
+ require.Equal(t, m2.ExplicitBounds().At(i), v.ExplicitBounds().At(i))
+ }
+ })
+ t.Run("MisalignedTimestamps/Drop", func(t *testing.T) {
+ // should drop data points with different start time that's before latest timestamp
+ startTs1 := time.Now().Add(-5 * time.Second)
+ startTs2 := time.Now().Add(-4 * time.Second)
+ ts1 := time.Now().Add(-3 * time.Second)
+ ts2 := time.Now().Add(-2 * time.Second)
+ resourceMetrics := pmetric.NewResourceMetrics()
+ ilm := resourceMetrics.ScopeMetrics().AppendEmpty()
+ ilm.Scope().SetName("test")
+ appendDeltaHistogram(startTs1, ts1, 5, 2.5, []uint64{1, 3, 1, 0, 0}, []float64{0.1, 0.5, 1, 10}, ilm.Metrics())
+ appendDeltaHistogram(startTs2, ts2, 7, 5, []uint64{3, 1, 1, 0, 0}, []float64{0.1, 0.2, 1, 10}, ilm.Metrics())
+
+ m1 := ilm.Metrics().At(0).Histogram().DataPoints().At(0)
+ signature := timeseriesSignature(ilm.Scope().Name(), ilm.Metrics().At(0), m1.Attributes(), pcommon.NewMap())
+
+ a := newAccumulator(zap.NewNop(), 1*time.Hour).(*lastValueAccumulator)
+ n := a.Accumulate(resourceMetrics)
+ require.Equal(t, 1, n)
+
+ m, ok := a.registeredMetrics.Load(signature)
+ v := m.(*accumulatedValue).value.Histogram().DataPoints().At(0)
+ require.True(t, ok)
+
+ require.Equal(t, m1.Sum(), v.Sum())
+ require.Equal(t, m1.Count(), v.Count())
+
+ for i := 0; i < v.BucketCounts().Len(); i++ {
+ require.Equal(t, m1.BucketCounts().At(i), v.BucketCounts().At(i))
+ }
+
+ for i := 0; i < v.ExplicitBounds().Len(); i++ {
+ require.Equal(t, m1.ExplicitBounds().At(i), v.ExplicitBounds().At(i))
+ }
+ })
+ t.Run("MisalignedTimestamps/Reset", func(t *testing.T) {
+ // reset when start timestamp skips ahead
+ startTs1 := time.Now().Add(-5 * time.Second)
+ startTs2 := time.Now().Add(-2 * time.Second)
+ ts1 := time.Now().Add(-3 * time.Second)
+ ts2 := time.Now().Add(-1 * time.Second)
+ resourceMetrics := pmetric.NewResourceMetrics()
+ ilm := resourceMetrics.ScopeMetrics().AppendEmpty()
+ ilm.Scope().SetName("test")
+ appendDeltaHistogram(startTs1, ts1, 5, 2.5, []uint64{1, 3, 1, 0, 0}, []float64{0.1, 0.5, 1, 10}, ilm.Metrics())
+ appendDeltaHistogram(startTs2, ts2, 7, 5, []uint64{3, 1, 1, 0, 0}, []float64{0.1, 0.2, 1, 10}, ilm.Metrics())
+
+ m2 := ilm.Metrics().At(1).Histogram().DataPoints().At(0)
+ signature := timeseriesSignature(ilm.Scope().Name(), ilm.Metrics().At(0), m2.Attributes(), pcommon.NewMap())
+
+ a := newAccumulator(zap.NewNop(), 1*time.Hour).(*lastValueAccumulator)
+ n := a.Accumulate(resourceMetrics)
+ require.Equal(t, 2, n)
+
+ m, ok := a.registeredMetrics.Load(signature)
+ v := m.(*accumulatedValue).value.Histogram().DataPoints().At(0)
+ require.True(t, ok)
+
+ require.Equal(t, m2.Sum(), v.Sum())
+ require.Equal(t, m2.Count(), v.Count())
+
+ for i := 0; i < v.BucketCounts().Len(); i++ {
+ require.Equal(t, m2.BucketCounts().At(i), v.BucketCounts().At(i))
+ }
+
+ for i := 0; i < v.ExplicitBounds().Len(); i++ {
+ require.Equal(t, m2.ExplicitBounds().At(i), v.ExplicitBounds().At(i))
+ }
+ })
+}
+
func TestAccumulateDroppedMetrics(t *testing.T) {
tests := []struct {
name string
diff --git a/exporter/prometheusexporter/config.go b/exporter/prometheusexporter/config.go
index 80a8bc285dd6..811823e734e5 100644
--- a/exporter/prometheusexporter/config.go
+++ b/exporter/prometheusexporter/config.go
@@ -15,7 +15,7 @@ import (
// Config defines configuration for Prometheus exporter.
type Config struct {
- confighttp.HTTPServerSettings `mapstructure:",squash"`
+ confighttp.ServerConfig `mapstructure:",squash"`
// Namespace if set, exports metrics under the provided value.
Namespace string `mapstructure:"namespace"`
diff --git a/exporter/prometheusexporter/config_test.go b/exporter/prometheusexporter/config_test.go
index 1be8076596c0..05c465288e41 100644
--- a/exporter/prometheusexporter/config_test.go
+++ b/exporter/prometheusexporter/config_test.go
@@ -35,10 +35,10 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "2"),
expected: &Config{
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "1.2.3.4:1234",
- TLSSetting: &configtls.TLSServerSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: &configtls.ServerConfig{
+ Config: configtls.Config{
CertFile: "certs/server.crt",
KeyFile: "certs/server.key",
CAFile: "certs/ca.crt",
diff --git a/exporter/prometheusexporter/end_to_end_test.go b/exporter/prometheusexporter/end_to_end_test.go
index b4c84b04260f..b941787e3277 100644
--- a/exporter/prometheusexporter/end_to_end_test.go
+++ b/exporter/prometheusexporter/end_to_end_test.go
@@ -16,7 +16,6 @@ import (
"testing"
"time"
- promconfig "github.com/prometheus/prometheus/config"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/exporter/exportertest"
@@ -36,7 +35,7 @@ func TestEndToEndSummarySupport(t *testing.T) {
var currentScrapeIndex = 0
wg.Add(1) // scrape one endpoint
- dropWizardServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+ dropWizardServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, _ *http.Request) {
// Serve back the metrics as if they were from DropWizard.
_, err := rw.Write([]byte(dropWizardResponse))
require.NoError(t, err)
@@ -58,7 +57,7 @@ func TestEndToEndSummarySupport(t *testing.T) {
// 2. Create the Prometheus metrics exporter that'll receive and verify the metrics produced.
exporterCfg := &Config{
Namespace: "test",
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:8787",
},
SendTimestamps: true,
@@ -88,7 +87,7 @@ func TestEndToEndSummarySupport(t *testing.T) {
static_configs:
- targets: ['%s']
`, srvURL.Host))
- receiverConfig := new(promconfig.Config)
+ receiverConfig := new(prometheusreceiver.PromConfig)
if err = yaml.Unmarshal(yamlConfig, receiverConfig); err != nil {
t.Fatal(err)
}
diff --git a/exporter/prometheusexporter/factory.go b/exporter/prometheusexporter/factory.go
index ab1581e4a872..b29253fe0f8c 100644
--- a/exporter/prometheusexporter/factory.go
+++ b/exporter/prometheusexporter/factory.go
@@ -8,6 +8,7 @@ import (
"time"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -52,6 +53,7 @@ func createMetricsExporter(
prometheus.ConsumeMetrics,
exporterhelper.WithStart(prometheus.Start),
exporterhelper.WithShutdown(prometheus.Shutdown),
+ exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: true}),
)
if err != nil {
return nil, err
diff --git a/exporter/prometheusexporter/generated_component_test.go b/exporter/prometheusexporter/generated_component_test.go
new file mode 100644
index 000000000000..98bfc75a3f89
--- /dev/null
+++ b/exporter/prometheusexporter/generated_component_test.go
@@ -0,0 +1,128 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package prometheusexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ require.NoError(t, err)
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/prometheusexporter/go.mod b/exporter/prometheusexporter/go.mod
index 5751805d3837..d5dfc57a4744 100644
--- a/exporter/prometheusexporter/go.mod
+++ b/exporter/prometheusexporter/go.mod
@@ -1,92 +1,90 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusexporter
-go 1.20
+go 1.21
require (
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.89.0
- github.com/prometheus/client_golang v1.17.0
- github.com/prometheus/client_model v0.5.0
- github.com/prometheus/common v0.45.0
- github.com/prometheus/prometheus v0.47.2
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/receiver v0.89.0
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/zap v1.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/receiver/prometheusreceiver v0.98.0
+ github.com/prometheus/client_golang v1.19.0
+ github.com/prometheus/client_model v0.6.1
+ github.com/prometheus/common v0.52.2
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/receiver v0.98.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
gopkg.in/yaml.v2 v2.4.0
)
require (
- cloud.google.com/go/compute v1.23.2 // indirect
+ cloud.google.com/go/compute v1.24.0 // indirect
cloud.google.com/go/compute/metadata v0.2.3 // indirect
- github.com/Azure/azure-sdk-for-go v65.0.0+incompatible // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 // indirect
- github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 // indirect
- github.com/Azure/go-autorest v14.2.0+incompatible // indirect
- github.com/Azure/go-autorest/autorest v0.11.29 // indirect
- github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect
- github.com/Azure/go-autorest/autorest/date v0.3.0 // indirect
- github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
- github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect
- github.com/Azure/go-autorest/logger v0.2.1 // indirect
- github.com/Azure/go-autorest/tracing v0.6.0 // indirect
- github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 // indirect
+ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 // indirect
+ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 // indirect
+ github.com/Code-Hex/go-generics-cache v1.3.1 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect
+ github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 // indirect
github.com/armon/go-metrics v0.4.1 // indirect
- github.com/aws/aws-sdk-go v1.47.10 // indirect
+ github.com/aws/aws-sdk-go v1.50.32 // indirect
github.com/beorn7/perks v1.0.1 // indirect
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
- github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dennwc/varint v1.0.0 // indirect
- github.com/digitalocean/godo v1.99.0 // indirect
- github.com/docker/distribution v2.8.2+incompatible // indirect
- github.com/docker/docker v24.0.7+incompatible // indirect
- github.com/docker/go-connections v0.4.0 // indirect
+ github.com/digitalocean/godo v1.109.0 // indirect
+ github.com/distribution/reference v0.5.0 // indirect
+ github.com/docker/docker v25.0.5+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
- github.com/emicklei/go-restful/v3 v3.10.2 // indirect
- github.com/envoyproxy/go-control-plane v0.11.1 // indirect
- github.com/envoyproxy/protoc-gen-validate v1.0.2 // indirect
+ github.com/emicklei/go-restful/v3 v3.11.0 // indirect
+ github.com/envoyproxy/go-control-plane v0.12.0 // indirect
+ github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.6.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-openapi/jsonpointer v0.20.0 // indirect
- github.com/go-openapi/jsonreference v0.20.2 // indirect
- github.com/go-openapi/swag v0.22.4 // indirect
- github.com/go-resty/resty/v2 v2.7.0 // indirect
+ github.com/go-openapi/jsonpointer v0.20.2 // indirect
+ github.com/go-openapi/jsonreference v0.20.4 // indirect
+ github.com/go-openapi/swag v0.22.9 // indirect
+ github.com/go-resty/resty/v2 v2.11.0 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/go-zookeeper/zk v1.0.3 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang-jwt/jwt/v4 v4.5.0 // indirect
+ github.com/golang-jwt/jwt/v5 v5.2.0 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
github.com/google/go-cmp v0.6.0 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/s2a-go v0.1.7 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
- github.com/googleapis/gax-go/v2 v2.12.0 // indirect
- github.com/gophercloud/gophercloud v1.5.0 // indirect
+ github.com/googleapis/gax-go/v2 v2.12.2 // indirect
+ github.com/gophercloud/gophercloud v1.8.0 // indirect
github.com/gorilla/websocket v1.5.0 // indirect
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd // indirect
- github.com/hashicorp/consul/api v1.25.1 // indirect
+ github.com/hashicorp/consul/api v1.28.2 // indirect
github.com/hashicorp/cronexpr v1.1.2 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
@@ -97,94 +95,94 @@ require (
github.com/hashicorp/go-rootcerts v1.0.2 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
- github.com/hashicorp/nomad/api v0.0.0-20230718173136-3a687930bd3e // indirect
+ github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 // indirect
github.com/hashicorp/serf v0.10.1 // indirect
- github.com/hetznercloud/hcloud-go/v2 v2.0.0 // indirect
+ github.com/hetznercloud/hcloud-go/v2 v2.6.0 // indirect
github.com/imdario/mergo v0.3.16 // indirect
- github.com/ionos-cloud/sdk-go/v6 v6.1.8 // indirect
+ github.com/ionos-cloud/sdk-go/v6 v6.1.11 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/jpillora/backoff v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b // indirect
github.com/kylelemons/godebug v1.1.0 // indirect
- github.com/linode/linodego v1.19.0 // indirect
+ github.com/linode/linodego v1.30.0 // 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.19 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
- github.com/miekg/dns v1.1.55 // indirect
+ github.com/miekg/dns v1.1.58 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/hashstructure/v2 v2.0.2 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
+ github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c // 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/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
- github.com/ovh/go-ovh v1.4.1 // indirect
- github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
+ github.com/ovh/go-ovh v1.4.3 // indirect
+ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/common/sigv4 v0.1.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
+ github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e // indirect
github.com/rs/cors v1.10.1 // indirect
- github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20 // indirect
+ github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/vultr/govultr/v2 v2.17.2 // indirect
go.opencensus.io v0.24.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/configopaque v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1 // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- golang.org/x/term v0.14.0 // indirect
+ golang.org/x/crypto v0.22.0 // indirect
+ golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/oauth2 v0.18.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/term v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- golang.org/x/time v0.4.0 // indirect
- golang.org/x/tools v0.15.0 // indirect
- google.golang.org/api v0.150.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ golang.org/x/time v0.5.0 // indirect
+ golang.org/x/tools v0.19.0 // indirect
+ google.golang.org/api v0.168.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect
+ google.golang.org/grpc v1.63.0 // indirect
+ google.golang.org/protobuf v1.33.0 // 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
- k8s.io/api v0.28.3 // indirect
- k8s.io/apimachinery v0.28.3 // indirect
- k8s.io/client-go v0.28.3 // indirect
- k8s.io/klog/v2 v2.100.1 // indirect
- k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
- k8s.io/utils v0.0.0-20230711102312-30195339c3c7 // indirect
+ k8s.io/api v0.29.3 // indirect
+ k8s.io/apimachinery v0.29.3 // indirect
+ k8s.io/client-go v0.29.3 // indirect
+ k8s.io/klog/v2 v2.120.1 // indirect
+ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
+ k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
- sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
+ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
diff --git a/exporter/prometheusexporter/go.sum b/exporter/prometheusexporter/go.sum
index 9b9698412689..b5ac8374a21f 100644
--- a/exporter/prometheusexporter/go.sum
+++ b/exporter/prometheusexporter/go.sum
@@ -19,8 +19,8 @@ cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvf
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/compute v1.23.2 h1:nWEMDhgbBkBJjfpVySqU4jgWdc22PLR0o4vEexZHers=
-cloud.google.com/go/compute v1.23.2/go.mod h1:JJ0atRC0J/oWYiiVBmsSsrRnh92DhZPG4hFDcR04Rns=
+cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg=
+cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40=
cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
@@ -34,41 +34,29 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/Azure/azure-sdk-for-go v65.0.0+incompatible h1:HzKLt3kIwMm4KeJYTdx9EbjRYTySD/t8i1Ee/W5EGXw=
-github.com/Azure/azure-sdk-for-go v65.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0 h1:8q4SaHjFsClSvuVne0ID/5Ka8u3fcIHyqkLjcFpNRHQ=
-github.com/Azure/azure-sdk-for-go/sdk/azcore v1.7.0/go.mod h1:bjGvMhVMb+EEm3VRNQawDMUyMMjo+S5ewNjflkep/0Q=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0 h1:vcYCAze6p19qBW7MhZybIsqD8sMV8js0NyQM8JDnVtg=
-github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.3.0/go.mod h1:OQeznEEkTZ9OrhHJoDD8ZDq51FHgXjqtP9z6bEwBq9U=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0 h1:sXr+ck84g/ZlZUOZiNELInmMgOsuGwdjjVkEIde0OtY=
-github.com/Azure/azure-sdk-for-go/sdk/internal v1.3.0/go.mod h1:okt5dMMTOFjX/aovMlrjvvXoPMBVSPzk9185BT0+eZM=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0 h1:n1DH8TPV4qqPTje2RcUBYwtrTWlabVp4n46+74X2pn4=
+github.com/Azure/azure-sdk-for-go/sdk/azcore v1.10.0/go.mod h1:HDcZnuGbiyppErN6lB+idp4CKhjbc8gwjto6OPpyggM=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1 h1:sO0/P7g68FrryJzljemN+6GTssUXdANk6aJ7T1ZxnsQ=
+github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.5.1/go.mod h1:h8hyGFDsU5HMivxiS2iYFZsgDbU9OnnJ163x5UGVKYo=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2 h1:LqbJ/WzJUwBf8UiaSzgX7aMclParm9/5Vgp+TY51uBQ=
+github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.2/go.mod h1:yInRyqWXAuaPrgI7p70+lDDgh3mlBohis29jGMISnmc=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0 h1:MxA59PGoCFb+vCwRQi3PhQEwHj4+r2dhuv9HG+vM7iM=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5 v5.5.0/go.mod h1:uYt4CfhkJA9o0FN7jfE5minm/i4nUE4MjGUJkzB6Zs8=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0 h1:PTFGRSlMKCQelWwxUyYVEUqseBJVemLyqWJjvMyt0do=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v2 v2.0.0/go.mod h1:LRr2FzBTQlONPPa5HREE5+RjSCTXl7BwOvYOaWTqCaI=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0 h1:bXwSugBiSbgtz7rOtbfGf+woewp4f06orW9OP5BjHLA=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v4 v4.3.0/go.mod h1:Y/HgrePTmGy9HjdSGTqZNa+apUpTVIEVKXJyARP2lrk=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1 h1:7CBQ+Ei8SP2c6ydQTGCCrS35bDxgTMfoP2miAwK++OU=
+github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.1.1/go.mod h1:c/wcGeGx5FUPbM/JltUYHZcKmigwyVLJlDq+4HdtXaw=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
-github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
-github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
-github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw=
-github.com/Azure/go-autorest/autorest v0.11.29/go.mod h1:ZtEzC4Jy2JDrZLxvWs8LrBWEBycl1hbT1eknI8MtfAs=
-github.com/Azure/go-autorest/autorest/adal v0.9.22/go.mod h1:XuAbAEUv2Tta//+voMI038TrJBqjKam0me7qR+L8Cmk=
-github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8=
-github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c=
-github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8KY+LPI6wiWrP/myHw=
-github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
-github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
-github.com/Azure/go-autorest/autorest/mocks v0.4.2 h1:PGN4EDXnuQbojHbU0UWoNvmu9AGVwYHG9/fkDYhtAfw=
-github.com/Azure/go-autorest/autorest/mocks v0.4.2/go.mod h1:Vy7OitM9Kei0i1Oj+LvyAWMXJHeKH1MVlzFugfVrmyU=
-github.com/Azure/go-autorest/autorest/to v0.4.0 h1:oXVqrxakqqV1UZdSazDOPOLvOIz+XA683u8EctwboHk=
-github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
-github.com/Azure/go-autorest/autorest/validation v0.3.1 h1:AgyqjAd94fwNAoTjl/WQXg4VvFeRFpO+UhNyRXqF1ac=
-github.com/Azure/go-autorest/autorest/validation v0.3.1/go.mod h1:yhLgjC0Wda5DYXl6JAsWyUe4KVNffhoDhG0zVzUMo3E=
-github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
-github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
-github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
-github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0 h1:OBhqkivkhkMqLPymWEppkm7vgPQY2XsHoEkaMQ0AdZY=
-github.com/AzureAD/microsoft-authentication-library-for-go v1.0.0/go.mod h1:kgDmCTgBzIEPFElEF+FK0SdjAor06dRq2Go927dnQ6o=
+github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1 h1:DzHpqpoJVaCgOUdVHxE8QB52S6NiVdDQvGlny1qvPqA=
+github.com/AzureAD/microsoft-authentication-library-for-go v1.2.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
+github.com/Code-Hex/go-generics-cache v1.3.1 h1:i8rLwyhoyhaerr7JpjtYjJZUcCbWOdiYO3fZXLiEC4g=
+github.com/Code-Hex/go-generics-cache v1.3.1/go.mod h1:qxcC9kRVrct9rHeiYpFWSoW1vxyillCVzX13KZG8dl4=
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
@@ -77,8 +65,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9 h1:ez/4by2iGztzR4L0zgAOR8lTQK9VlyBVVd7G4omaOQs=
+github.com/alecthomas/units v0.0.0-20231202071711-9a357b53e9c9/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA=
@@ -86,19 +74,21 @@ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+
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/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
-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/aws/aws-sdk-go v1.50.32 h1:POt81DvegnpQKM4DMDLlHz1CO6OBnEoQ1gRhYFd7QRY=
+github.com/aws/aws-sdk-go v1.50.32/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3 h1:6df1vn4bBlDDo4tARvBm7l6KA9iVMnE3NWizDeWSrps=
+github.com/bboreham/go-loser v0.0.0-20230920113527-fcc2c21820a3/go.mod h1:CIWtjkly68+yqLPbvwwR/fjNJA/idrtULjZWh2v1ys0=
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/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -106,37 +96,40 @@ github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6D
github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ=
+github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM=
+github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
+github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/dennwc/varint v1.0.0 h1:kGNFFSSw8ToIy3obO/kKr8U9GZYUAxQEVuix4zfDWzE=
github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
-github.com/digitalocean/godo v1.99.0 h1:gUHO7n9bDaZFWvbzOum4bXE0/09ZuYA9yA8idQHX57E=
-github.com/digitalocean/godo v1.99.0/go.mod h1:SsS2oXo2rznfM/nORlZ/6JaUJZFhmKTib1YhopUc8NA=
+github.com/digitalocean/godo v1.109.0 h1:4W97RJLJSUQ3veRZDNbp1Ol3Rbn6Lmt9bKGvfqYI5SU=
+github.com/digitalocean/godo v1.109.0/go.mod h1:R6EmmWI8CT1+fCtjWY9UCB+L5uufuZH13wk3YhxycCs=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI=
-github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
-github.com/emicklei/go-restful/v3 v3.10.2 h1:hIovbnmBTLjHXkqEBUz3HGpXZdM7ZrE9fJIZIqlJLqE=
-github.com/emicklei/go-restful/v3 v3.10.2/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g=
+github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
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.11.1 h1:wSUXTlLfiAQRWs2F+p+EKOY9rUyis1MyGqJ2DIk5HpM=
-github.com/envoyproxy/go-control-plane v0.11.1/go.mod h1:uhMcXKCQMEJHiAb0w+YGefQLaTEw+YhGluxZkrTmD0g=
+github.com/envoyproxy/go-control-plane v0.12.0 h1:4X+VP1GHd1Mhj6IB5mMeGbLCleqxjletLK6K0rbxyZI=
+github.com/envoyproxy/go-control-plane v0.12.0/go.mod h1:ZBTaoJ23lqITozF0M6G4/IragXCQKCnYbmlmtHvwRG0=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/envoyproxy/protoc-gen-validate v1.0.2 h1:QkIBuU5k+x7/QXPvPPnWXWlCdaBFApVqftFV6k087DA=
-github.com/envoyproxy/protoc-gen-validate v1.0.2/go.mod h1:GpiZQP3dDbg4JouG/NNS7QWXpgx6x8QiMKdmN72jogE=
-github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
+github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A=
+github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew=
+github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
+github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
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/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
@@ -159,33 +152,33 @@ github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
-github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
-github.com/go-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.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-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-resty/resty/v2 v2.7.0 h1:me+K9p3uhSmXtrBZ4k9jcEAfJmuC8IivWHwaLZwPrFY=
-github.com/go-resty/resty/v2 v2.7.0/go.mod h1:9PWDzw47qPphMRFfhsyk0NnSgvluHcljSMVIq3w7q0I=
+github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q=
+github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs=
+github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdXSSgNeAhojU=
+github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4=
+github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE=
+github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE=
+github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
+github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI=
+github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
-github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg=
-github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0=
+github.com/golang-jwt/jwt/v5 v5.2.0 h1:d/ix8ftRUorsN+5eMIlF4T6J8CAt9rch3My2winC1Jw=
+github.com/golang-jwt/jwt/v5 v5.2.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
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=
@@ -214,13 +207,15 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
+github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I=
github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -251,30 +246,33 @@ github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hf
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20230705174524-200ffdc848b8 h1:n6vlPhxsA+BW/XsS5+uqi7GyzaLa5MH7qlSLBZtRdiA=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7 h1:y3N7Bm7Y9/CtpiVkw/ZWj6lSlDF3F74SfKwfTCer72Q=
+github.com/google/pprof v0.0.0-20240227163752-401108e1b7e7/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o=
github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs=
github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0=
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/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas=
-github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU=
-github.com/gophercloud/gophercloud v1.5.0 h1:cDN6XFCLKiiqvYpjQLq9AiM7RDRbIC9450WpPH+yvXo=
-github.com/gophercloud/gophercloud v1.5.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
+github.com/googleapis/gax-go/v2 v2.12.2 h1:mhN09QQW1jEWeMF74zGR81R30z4VJzjZsfkUhuHF+DA=
+github.com/googleapis/gax-go/v2 v2.12.2/go.mod h1:61M8vcyyXR2kqKFxKrfA22jaA8JGF7Dc8App1U3H6jc=
+github.com/gophercloud/gophercloud v1.8.0 h1:TM3Jawprb2NrdOnvcHhWJalmKmAmOGgfZElM/3oBYCk=
+github.com/gophercloud/gophercloud v1.8.0/go.mod h1:aAVqcocTSXh2vYFZ1JTvx4EQmfgzxRcNupUfxZbBNDM=
github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd h1:PpuIBO5P3e9hpqBD0O/HjhShYuM6XE0i/lbE6J94kww=
github.com/grafana/regexp v0.0.0-20221122212121-6b5c0a4cb7fd/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/hashicorp/consul/api v1.25.1 h1:CqrdhYzc8XZuPnhIYZWH45toM0LB9ZeYr/gvpLVI3PE=
-github.com/hashicorp/consul/api v1.25.1/go.mod h1:iiLVwR/htV7mas/sy0O+XSuEnrdBUUydemjxcUrAt4g=
-github.com/hashicorp/consul/sdk v0.14.1 h1:ZiwE2bKb+zro68sWzZ1SgHF3kRMBZ94TwOCFRF4ylPs=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
+github.com/hashicorp/consul/api v1.28.2 h1:mXfkRHrpHN4YY3RqL09nXU1eHKLNiuAN4kHvDQ16k/8=
+github.com/hashicorp/consul/api v1.28.2/go.mod h1:KyzqzgMEya+IZPcD65YFoOVAgPpbfERu4I/tzG6/ueE=
+github.com/hashicorp/consul/sdk v0.16.0 h1:SE9m0W6DEfgIVCJX7xU+iv/hUl4m/nxqMTnCdMxDpJ8=
+github.com/hashicorp/consul/sdk v0.16.0/go.mod h1:7pxqqhqoaPqnBnzXD1StKed62LqJeClzVsUEy85Zr0A=
github.com/hashicorp/cronexpr v1.1.2 h1:wG/ZYIKT+RT3QkOdgYc+xsKWVRgnxJ1OJtjjy84fJ9A=
github.com/hashicorp/cronexpr v1.1.2/go.mod h1:P4wA0KBl9C5q2hABiMO7cp6jcIg96CDh1Efb3g1PWA4=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
@@ -291,6 +289,7 @@ github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJ
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
+github.com/hashicorp/go-msgpack v0.5.5/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=
@@ -302,10 +301,12 @@ github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5O
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 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
+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-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.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=
@@ -316,19 +317,21 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
github.com/hashicorp/memberlist v0.5.0 h1:EtYPN8DpAURiapus508I4n9CzHs2W+8NZGbmmR/prTM=
github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0=
-github.com/hashicorp/nomad/api v0.0.0-20230718173136-3a687930bd3e h1:sr4lujmn9heD030xx/Pd4B/JSmvRhFzuotNXaaV0WLs=
-github.com/hashicorp/nomad/api v0.0.0-20230718173136-3a687930bd3e/go.mod h1:O23qLAZuCx4htdY9zBaO4cJPXgleSFEdq6D/sezGgYE=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702 h1:fI1LXuBaS1d9z1kmb++Og6YD8uMRwadXorCwE+xgOFA=
+github.com/hashicorp/nomad/api v0.0.0-20240306004928-3e7191ccb702/go.mod h1:z71gkJdrkAt/Rl6C7Q79VE7AwJ5lUF+M+fzFTyIHYB0=
github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY=
github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4=
-github.com/hetznercloud/hcloud-go/v2 v2.0.0 h1:Sg1DJ+MAKvbYAqaBaq9tPbwXBS2ckPIaMtVdUjKu+4g=
-github.com/hetznercloud/hcloud-go/v2 v2.0.0/go.mod h1:4iUG2NG8b61IAwNx6UsMWQ6IfIf/i1RsG0BbsKAyR5Q=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0 h1:RJOA2hHZ7rD1pScA4O1NF6qhkHyUdbbxjHgFNot8928=
+github.com/hetznercloud/hcloud-go/v2 v2.6.0/go.mod h1:4J1cSE57+g0WS93IiHLV7ubTHItcp+awzeBp5bM9mfA=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4=
github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
-github.com/ionos-cloud/sdk-go/v6 v6.1.8 h1:493wE/BkZxJf7x79UCE0cYGPZoqQcPiEBALvt7uVGY0=
-github.com/ionos-cloud/sdk-go/v6 v6.1.8/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
-github.com/jarcoal/httpmock v1.3.0 h1:2RJ8GP0IIaWwcC9Fp2BmVi8Kog3v2Hn7VXM3fTd+nuc=
+github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11 h1:J/uRN4UWO3wCyGOeDdMKv8LWRzKu6UIkLEaes38Kzh8=
+github.com/ionos-cloud/sdk-go/v6 v6.1.11/go.mod h1:EzEgRIDxBELvfoa/uBN0kOQaqovLjUWEB7iW4/Q+t4k=
+github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww=
+github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg=
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
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=
@@ -349,31 +352,32 @@ github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7V
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b h1:udzkj9S/zlT5X367kqJis0QP7YMxobob6zhzq6Yre00=
github.com/kolo/xmlrpc v0.0.0-20220921171641-a4b6fa1dd06b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/linode/linodego v1.19.0 h1:n4WJrcr9+30e9JGZ6DI0nZbm5SdAj1kSwvvt/998YUw=
-github.com/linode/linodego v1.19.0/go.mod h1:XZFR+yJ9mm2kwf6itZ6SCpu+6w3KnIevV0Uu5HNWJgQ=
+github.com/linode/linodego v1.30.0 h1:6HJli+LX7NGu+Sne2G+ux790EkVOWOV/SR4mK3jcs6k=
+github.com/linode/linodego v1.30.0/go.mod h1:/46h/XpmWi//oSA92GX2p3FIxb8HbX7grslPPQalR2o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
+github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
@@ -392,27 +396,28 @@ github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/
github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g=
+github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM=
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/miekg/dns v1.1.55 h1:GoQ4hpsj0nFLYe+bWiCToyrBEJXkQfOOIvFGFy0lEgo=
-github.com/miekg/dns v1.1.55/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
+github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
+github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
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 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU=
+github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8=
github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4=
github.com/mitchellh/hashstructure/v2 v2.0.2/go.mod h1:MG3aRVU/N29oo/V/IhBX8GR/zz4kQkprJgF2EVszyDE=
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
-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/mapstructure v1.5.1-0.20231216201459-8508981c8b6c h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
+github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -421,25 +426,29 @@ 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/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
+github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
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/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=
-github.com/onsi/ginkgo/v2 v2.9.4 h1:xR7vG4IXt5RWx6FfIjyAtsoMAtnc3C/rFXBBd2AjZwE=
-github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4=
+github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o=
+github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg=
+github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
-github.com/ovh/go-ovh v1.4.1 h1:VBGa5wMyQtTP7Zb+w97zRCh9sLtM/2YKRyy+MEJmWaM=
-github.com/ovh/go-ovh v1.4.1/go.mod h1:6bL6pPyUT7tBfI0pqOegJgRjgjuO+mOo+MyXd1EEC0M=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
+github.com/ovh/go-ovh v1.4.3 h1:Gs3V823zwTFpzgGLZNI6ILS4rmxZgJwJCz54Er9LwD0=
+github.com/ovh/go-ovh v1.4.3/go.mod h1:AkPXVtgwB6xlKblMjRKJJmjRp+ogrE7fz2lVgcQY8SY=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU=
-github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ=
+github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
@@ -450,26 +459,27 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH
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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
+github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
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.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
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.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4=
github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
@@ -479,32 +489,39 @@ github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/prometheus v0.47.2 h1:jWcnuQHz1o1Wu3MZ6nMJDuTI0kU5yJp9pkxh8XEkNvI=
-github.com/prometheus/prometheus v0.47.2/go.mod h1:J/bmOSjgH7lFxz2gZhrWEZs2i64vMS+HIuZfmYNhJ/M=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
+github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA=
github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20 h1:a9hSJdJcd16e0HoMsnFvaHvxB3pxSD+SC7+CISp7xY0=
-github.com/scaleway/scaleway-sdk-go v1.0.0-beta.20/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25 h1:/8rfZAdFfafRXOgz+ZpMZZWZ5pYggCY9t7e/BvjaBHM=
+github.com/scaleway/scaleway-sdk-go v1.0.0-beta.25/go.mod h1:fCa7OJZ/9DRTnOKmxvT6pn+LPWUptQAmHF/SBJUGEcg=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/shirou/gopsutil/v3 v3.23.10 h1:/N42opWlYzegYaVkWejXWJpbzKv2JDy3mrgGzKsh9hM=
+github.com/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
github.com/shoenig/go-m1cpu v0.1.6 h1:nxdKQNcEB6vzgA2E2bvzKIYRuNj7XNJ4S/aRSwKzFtM=
-github.com/shoenig/test v0.6.6 h1:Oe8TPH9wAbv++YPNDKJWUnI8Q4PPWCx3UbOfH+FxiMU=
+github.com/shoenig/go-m1cpu v0.1.6/go.mod h1:1JJMcUBvfNwpq05QDQVAnx3gUHr9IYF7GNg9SUEw2VQ=
+github.com/shoenig/test v1.7.1 h1:UJcjSAI3aUKx52kfcfhblgyhZceouhvvs3OYdWgn+PY=
+github.com/shoenig/test v1.7.1/go.mod h1:UxJ6u/x2v/TNs/LoLxBNJRV9DiwBBKYxXSyczsBHFoI=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
+github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
+github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
+github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
@@ -513,16 +530,22 @@ 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.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
+github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
+github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs=
+github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/tinylru v1.1.0 h1:XY6IUfzVTU9rpwdhKUF6nQdChgCdGjkMfLzbWyiau6I=
+github.com/tidwall/tinylru v1.1.0/go.mod h1:3+bX+TJ2baOLMWTnlyNWHh4QMnFyARg2TLTQ6OFbzw8=
github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4=
+github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
+github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
+github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM=
github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs=
github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI=
@@ -531,7 +554,8 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
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.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
@@ -539,75 +563,112 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-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/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/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/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/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/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/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/batchprocessor v0.89.0 h1:oTEOHs2t00f9LfRwZGzKSXJPR3FHjPDDhjt05iWXYZM=
-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/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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/contrib/propagators/b3 v1.20.0 h1:Yty9Vs4F3D6/liF1o6FNt0PvN85h/BJJ6DQKJ3nrcM0=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/bridge/opencensus v0.43.0 h1:E/sf+2slCUb7wqh5FHwhdwKWTA+VXyMMAcFNlKVf4yw=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.43.0 h1:tFUz2BE6ucxU9PuPCwzbfDeQjMznIySJ4/73a3FSPUs=
-go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.43.0 h1:2oKqGjXdi5iDIUXFbBbLthG2LMeYlxcdxVmLim1e9qg=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.43.0 h1:vcSjcjn/BTeM6abI5CDymZdtd1m24quD1Mx4VE3N3fM=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0 h1:lRhfcLr3gK5S/zn92h3clyOPnCvvNKs1WTMbtH4UvO0=
+go.opentelemetry.io/collector/confmap/converter/expandconverter v0.98.0/go.mod h1:vNMFTWe4dF05LsodUOc84OfxdlYVp1kCMuZzb41WfAk=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0 h1:x/VsGlBj+DtJCXIucwzwcxiwnwAU8a6ALK6UN8fPdKQ=
+go.opentelemetry.io/collector/confmap/provider/envprovider v0.98.0/go.mod h1:BapTGXu7CYrQGNohbapPwTSt2Ty/k/c6Oemx9mSSiK4=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0 h1:SxDS+Yr8qE+ID58ELR5n0D+SUlqHKOZ72pK3YPFAelA=
+go.opentelemetry.io/collector/confmap/provider/fileprovider v0.98.0/go.mod h1:DEoB0d0k1iGt4KEABntL8AW9xYQ6E7fmgkM2/s8aXvM=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0 h1:C02SPbRPvrtmZ9TvsHWpz2TvHzqY5mNyEAlDdhax/a4=
+go.opentelemetry.io/collector/confmap/provider/httpprovider v0.98.0/go.mod h1:dzZKtykJio3Rm+G+Cmr15VV3xKp0PmFuh9Q9b3c1K7A=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0 h1:04zGXVQZ8D6nvoPX8AaqxWxGHNNVsGR78E+tY+2VQr8=
+go.opentelemetry.io/collector/confmap/provider/httpsprovider v0.98.0/go.mod h1:+UrRiugWaQPssz4mgEgQQo640f2bDUCFlo2Xr0/5ulc=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0 h1:JYpDN0OnMsu0awk0rjaYEIko9hFzzBJ6+2U5W2iVvUE=
+go.opentelemetry.io/collector/confmap/provider/yamlprovider v0.98.0/go.mod h1:xrXL804nBum1PgbvmJQ4I+hyW+DU4xBGO3MKMiYFX6E=
+go.opentelemetry.io/collector/connector v0.98.0 h1:1ifadXqOtB5bZ+OocLVlzF0zltWjP70E3+xYt2fJnMg=
+go.opentelemetry.io/collector/connector v0.98.0/go.mod h1:OFii9qa2ZgktI61/r0gWDsGjXtpEe+qXC8+0o4ZySeA=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/otelcol v0.98.0 h1:sUk49Wqw+VBYeDynEA+GSeVEusFvzFW3KuF2vfDbyo0=
+go.opentelemetry.io/collector/otelcol v0.98.0/go.mod h1:dW3UzuaiaNTddjKajk3Tp2Y7muDvYJdQz2yGUOE53gs=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/processor v0.98.0 h1:onrg8a99lToytbHF148Bg9a7DfNk31B+p6UHouiiVTw=
+go.opentelemetry.io/collector/processor v0.98.0/go.mod h1:QxgzjmJI12DQWN0LIHmZBOR7HRzPuVWFW4oqTdrS1ho=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0 h1:iM4fMLGig3GKmz5XNtOPKDsnCnvbi0+UHYaWsx/aSRc=
+go.opentelemetry.io/collector/processor/batchprocessor v0.98.0/go.mod h1:ROnuUkZJgpKEIDf3AIVjgRGNI7KPqCKPXsw8whL6Hzs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/collector/service v0.98.0 h1:lLJ7VXPXcV62fSISh4GuNd5ti6WvKje76NSgezc3ydo=
+go.opentelemetry.io/collector/service v0.98.0/go.mod h1:wB7ozvZTHtMefb5KTYy5nyrVYWpGk8teq8jWFs4blIU=
+go.opentelemetry.io/contrib/config v0.4.0 h1:Xb+ncYOqseLroMuBesGNRgVQolXcXOhMj7EhGwJCdHs=
+go.opentelemetry.io/contrib/config v0.4.0/go.mod h1:drNk2xRqLWW4/amk6Uh1S+sDAJTc7bcEEN1GfJzj418=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0 h1:QU8UEKyPqgr/8vCC9LlDmkPnfFmiWAUF9GtJdcLz+BU=
+go.opentelemetry.io/contrib/propagators/b3 v1.25.0/go.mod h1:qonC7wyvtX1E6cEpAR+bJmhcGr6IVRGc/f6ZTpvi7jA=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0 h1:0o/9KwAgxjK+3pMV0pwIF5toYHqDsPmQhfrBvKaG6mU=
+go.opentelemetry.io/otel/bridge/opencensus v1.25.0/go.mod h1:rZyTdpmRqoV+PpUn6QlruxJp/kE4765rPy0pP6mRDk8=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0 h1:hDKnobznDpcdTlNzO0S/owRB8tyVr1OoeZZhDoqY+Cs=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.25.0/go.mod h1:kUDQaUs1h8iTIHbQTk+iJRiUvSfJYMMKTtMCaiVu7B0=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0 h1:Wc4hZuYXhVqq+TfRXLXlmNIL/awOanGx8ssq3ciDQxc=
+go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.25.0/go.mod h1:BydOvapRqVEc0DVz27qWBX2jq45Ca5TI9mhZBDIdweY=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0 h1:vOL89uRfOCCNIjkisd0r7SEdJF3ZJFyCNY34fdZs8eU=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.25.0/go.mod h1:8GlBGcDk8KKi7n+2S4BT/CPZQYH3erLu0/k64r1MYgo=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0 h1:d7nHbdzU84STOiszaOxQ3kw5IwkSmHsU5Muol5/vL4I=
+go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.25.0/go.mod h1:yiPA1iZbb/EHYnODXOxvtKuB0I2hV8ehfLTEWpl7BJU=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0 h1:0vZZdECYzhTt9MKQZ5qQ0V+J3MFu4MQaQ3COfugF+FQ=
+go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.25.0/go.mod h1:e7iXx3HjaSSBXfy9ykVUlupS2Vp7LBIBuT21ousM2Hk=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -616,11 +677,10 @@ golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
-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/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
+golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
+golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -631,8 +691,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-20230713183714-613f0c0eb8a1 h1:MGwJjxBy0HJshjDNfLsYO8xppfqWlA5ZT9OhtUUhTNw=
-golang.org/x/exp v0.0.0-20230713183714-613f0c0eb8a1/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
+golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -654,8 +714,9 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -690,20 +751,21 @@ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwY
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211029224645-99673261e6eb/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
-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/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.18.0 h1:09qnuIAgzdx1XplqJvW6CQqMCtGZykZWcXzPMPUusvI=
+golang.org/x/oauth2 v0.18.0/go.mod h1:Wf7knwG0MPoWIMMBgFlEaSUDaKskp0dCfrlJRJXbBi8=
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=
@@ -716,7 +778,9 @@ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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=
@@ -762,7 +826,6 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -770,15 +833,20 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/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.6.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/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
-golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
-golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
+golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q=
+golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk=
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=
@@ -786,14 +854,18 @@ golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
+golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+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=
-golang.org/x/time v0.4.0 h1:Z81tqI5ddIoXDPvVQ7/7CC9TnLM7ubaFG2qXYd5BbYY=
-golang.org/x/time v0.4.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk=
+golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -838,13 +910,15 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8=
-golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
+golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
+golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
+gonum.org/v1/gonum v0.15.0 h1:2lYxjRbTYyxkJxlhC+LvJIx3SsANPdRybu1tGj9/OrQ=
+gonum.org/v1/gonum v0.15.0/go.mod h1:xzZVBJBtS+Mz4q0Yl2LJTk+OxOg4jiXZ7qBoM0uISGo=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -861,16 +935,16 @@ google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0M
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/api v0.150.0 h1:Z9k22qD289SZ8gCJrk4DrWXkNjtfvKAUo/l1ma8eBYE=
-google.golang.org/api v0.150.0/go.mod h1:ccy+MJ6nrYFgE3WgRx/AMXOxOmU8Q4hSa+jjibzhxcg=
+google.golang.org/api v0.168.0 h1:MBRe+Ki4mMN93jhDDbpuRLjRddooArz4FeSObvUMmjY=
+google.golang.org/api v0.168.0/go.mod h1:gpNOiMA2tZ4mf5R9Iwf4rK/Dcz0fbdIgWYWVoxmsyLg=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
-google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -900,12 +974,10 @@ google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7Fc
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405/go.mod h1:3WDQMjmJk36UQhjQ89emUzb1mdaHcPeeAh4SCBKznB4=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
+google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8 h1:8eadJkXbwDEMNwcB5O0s5Y5eCfyuCLdvaiOIaGTrWmQ=
+google.golang.org/genproto/googleapis/api v0.0.0-20240304212257-790db918fca8/go.mod h1:O1cOfN1Cy6QEYr7VxtjOyP5AdAuR0aJ/MYZaaof623Y=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY=
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=
@@ -919,8 +991,8 @@ google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8=
+google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -933,8 +1005,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -958,6 +1030,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
+gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -965,24 +1038,24 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-k8s.io/api v0.28.3 h1:Gj1HtbSdB4P08C8rs9AR94MfSGpRhJgsS+GF9V26xMM=
-k8s.io/api v0.28.3/go.mod h1:MRCV/jr1dW87/qJnZ57U5Pak65LGmQVkKTzf3AtKFHc=
-k8s.io/apimachinery v0.28.3 h1:B1wYx8txOaCQG0HmYF6nbpU8dg6HvA06x5tEffvOe7A=
-k8s.io/apimachinery v0.28.3/go.mod h1:uQTKmIqs+rAYaq+DFaoD2X7pcjLOqbQX2AOiO0nIpb8=
-k8s.io/client-go v0.28.3 h1:2OqNb72ZuTZPKCl+4gTKvqao0AMOl9f3o2ijbAj3LI4=
-k8s.io/client-go v0.28.3/go.mod h1:LTykbBp9gsA7SwqirlCXBWtK0guzfhpoW4qSm7i9dxo=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 h1:LyMgNKD2P8Wn1iAwQU5OhxCKlKJy0sHc+PcDwFB24dQ=
-k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7 h1:ZgnF1KZsYxWIifwSNZFZgNtWE89WI5yiP5WwlfDoIyc=
-k8s.io/utils v0.0.0-20230711102312-30195339c3c7/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/api v0.29.3 h1:2ORfZ7+bGC3YJqGpV0KSDDEVf8hdGQ6A03/50vj8pmw=
+k8s.io/api v0.29.3/go.mod h1:y2yg2NTyHUUkIoTC+phinTnEa3KFM6RZ3szxt014a80=
+k8s.io/apimachinery v0.29.3 h1:2tbx+5L7RNvqJjn7RIuIKu9XTsIZ9Z5wX2G22XAa5EU=
+k8s.io/apimachinery v0.29.3/go.mod h1:hx/S4V2PNW4OMg3WizRrHutyB5la0iCUbZym+W0EQIU=
+k8s.io/client-go v0.29.3 h1:R/zaZbEAxqComZ9FHeQwOh3Y1ZUs7FaHKZdQtIc2WZg=
+k8s.io/client-go v0.29.3/go.mod h1:tkDisCvgPfiRpxGnOORfkljmS+UrW+WtXAy2fTvXJB0=
+k8s.io/klog/v2 v2.120.1 h1:QXU6cPEOIslTGvZaXvFWiP9VKyeet3sawzTOvdXb4Vw=
+k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780=
+k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI=
+k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
-sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
+sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
diff --git a/exporter/prometheusexporter/internal/metadata/generated_status.go b/exporter/prometheusexporter/internal/metadata/generated_status.go
index 793e897d7681..53a6268cd725 100644
--- a/exporter/prometheusexporter/internal/metadata/generated_status.go
+++ b/exporter/prometheusexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("prometheus")
)
const (
- Type = "prometheus"
MetricsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/prometheus")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/prometheus")
+}
diff --git a/exporter/prometheusexporter/metadata.yaml b/exporter/prometheusexporter/metadata.yaml
index 9df66711907d..362bc5ad66fe 100644
--- a/exporter/prometheusexporter/metadata.yaml
+++ b/exporter/prometheusexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: prometheus
+scope_name: otelcol/prometheus
status:
class: exporter
@@ -7,10 +8,9 @@ status:
distributions:
- core
- contrib
- - aws
- - grafana
- - observiq
- - redhat
- - sumo
codeowners:
active: [Aneurysm9]
+
+tests:
+ config:
+ endpoint: "127.0.0.1:1234"
diff --git a/exporter/prometheusexporter/package_test.go b/exporter/prometheusexporter/package_test.go
new file mode 100644
index 000000000000..4848448dfc0c
--- /dev/null
+++ b/exporter/prometheusexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package prometheusexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/prometheusexporter/prometheus.go b/exporter/prometheusexporter/prometheus.go
index 2cb2faceb078..9309bd54be2b 100644
--- a/exporter/prometheusexporter/prometheus.go
+++ b/exporter/prometheusexporter/prometheus.go
@@ -57,8 +57,8 @@ func newPrometheusExporter(config *Config, set exporter.CreateSettings) (*promet
}, nil
}
-func (pe *prometheusExporter) Start(_ context.Context, host component.Host) error {
- ln, err := pe.config.ToListener()
+func (pe *prometheusExporter) Start(ctx context.Context, host component.Host) error {
+ ln, err := pe.config.ToListenerContext(ctx)
if err != nil {
return err
}
@@ -67,7 +67,7 @@ func (pe *prometheusExporter) Start(_ context.Context, host component.Host) erro
mux := http.NewServeMux()
mux.Handle("/metrics", pe.handler)
- srv, err := pe.config.ToServer(host, pe.settings, mux)
+ srv, err := pe.config.ToServerContext(ctx, host, pe.settings, mux)
if err != nil {
return err
}
diff --git a/exporter/prometheusexporter/prometheus_test.go b/exporter/prometheusexporter/prometheus_test.go
index c1478d7d2512..ca1b5f5522e9 100644
--- a/exporter/prometheusexporter/prometheus_test.go
+++ b/exporter/prometheusexporter/prometheus_test.go
@@ -39,7 +39,7 @@ func TestPrometheusExporter(t *testing.T) {
"foo0": "bar0",
"code0": "one0",
},
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:8999",
},
SendTimestamps: false,
@@ -48,7 +48,7 @@ func TestPrometheusExporter(t *testing.T) {
},
{
config: &Config{
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:88999",
},
},
@@ -96,10 +96,10 @@ func TestPrometheusExporter_WithTLS(t *testing.T) {
"foo2": "bar2",
"code2": "one2",
},
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:7777",
- TLSSetting: &configtls.TLSServerSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: &configtls.ServerConfig{
+ Config: configtls.Config{
CertFile: "./testdata/certs/server.crt",
KeyFile: "./testdata/certs/server.key",
CAFile: "./testdata/certs/ca.crt",
@@ -117,8 +117,8 @@ func TestPrometheusExporter_WithTLS(t *testing.T) {
exp, err := factory.CreateMetricsExporter(context.Background(), set, cfg)
require.NoError(t, err)
- tlscs := configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ tlscs := configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "./testdata/certs/ca.crt",
CertFile: "./testdata/certs/client.crt",
KeyFile: "./testdata/certs/client.key",
@@ -136,8 +136,10 @@ func TestPrometheusExporter_WithTLS(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, exp.Shutdown(context.Background()))
// trigger a get so that the server cleans up our keepalive socket
- _, err = httpClient.Get("https://localhost:7777/metrics")
+ var resp *http.Response
+ resp, err = httpClient.Get("https://localhost:7777/metrics")
require.NoError(t, err)
+ require.NoError(t, resp.Body.Close())
})
assert.NotNil(t, exp)
@@ -181,7 +183,7 @@ func TestPrometheusExporter_endToEndMultipleTargets(t *testing.T) {
"foo1": "bar1",
"code1": "one1",
},
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:7777",
},
MetricExpiration: 120 * time.Minute,
@@ -195,8 +197,10 @@ func TestPrometheusExporter_endToEndMultipleTargets(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, exp.Shutdown(context.Background()))
// trigger a get so that the server cleans up our keepalive socket
- _, err = http.Get("http://localhost:7777/metrics")
+ var resp *http.Response
+ resp, err = http.Get("http://localhost:7777/metrics")
require.NoError(t, err)
+ require.NoError(t, resp.Body.Close())
})
assert.NotNil(t, exp)
@@ -263,7 +267,7 @@ func TestPrometheusExporter_endToEnd(t *testing.T) {
"foo1": "bar1",
"code1": "one1",
},
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:7777",
},
MetricExpiration: 120 * time.Minute,
@@ -277,8 +281,10 @@ func TestPrometheusExporter_endToEnd(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, exp.Shutdown(context.Background()))
// trigger a get so that the server cleans up our keepalive socket
- _, err = http.Get("http://localhost:7777/metrics")
+ var resp *http.Response
+ resp, err = http.Get("http://localhost:7777/metrics")
require.NoError(t, err)
+ require.NoError(t, resp.Body.Close())
})
assert.NotNil(t, exp)
@@ -339,7 +345,7 @@ func TestPrometheusExporter_endToEndWithTimestamps(t *testing.T) {
"foo2": "bar2",
"code2": "one2",
},
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:7777",
},
SendTimestamps: true,
@@ -354,8 +360,10 @@ func TestPrometheusExporter_endToEndWithTimestamps(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, exp.Shutdown(context.Background()))
// trigger a get so that the server cleans up our keepalive socket
- _, err = http.Get("http://localhost:7777/metrics")
+ var resp *http.Response
+ resp, err = http.Get("http://localhost:7777/metrics")
require.NoError(t, err)
+ require.NoError(t, resp.Body.Close())
})
assert.NotNil(t, exp)
@@ -416,7 +424,7 @@ func TestPrometheusExporter_endToEndWithResource(t *testing.T) {
"foo2": "bar2",
"code2": "one2",
},
- HTTPServerSettings: confighttp.HTTPServerSettings{
+ ServerConfig: confighttp.ServerConfig{
Endpoint: "localhost:7777",
},
SendTimestamps: true,
@@ -434,8 +442,10 @@ func TestPrometheusExporter_endToEndWithResource(t *testing.T) {
t.Cleanup(func() {
require.NoError(t, exp.Shutdown(context.Background()))
// trigger a get so that the server cleans up our keepalive socket
- _, err = http.Get("http://localhost:7777/metrics")
+ var resp *http.Response
+ resp, err = http.Get("http://localhost:7777/metrics")
require.NoError(t, err, "Failed to perform a scrape")
+ require.NoError(t, resp.Body.Close())
})
assert.NotNil(t, exp)
diff --git a/exporter/prometheusremotewriteexporter/DESIGN.md b/exporter/prometheusremotewriteexporter/DESIGN.md
index f1a14c1d4c22..3fbf369050f0 100644
--- a/exporter/prometheusremotewriteexporter/DESIGN.md
+++ b/exporter/prometheusremotewriteexporter/DESIGN.md
@@ -10,7 +10,7 @@ Date: July 30, 2020
Prometheus can be integrated with remote storage systems that supports its remote write API. Existing remote storage integration support is included in [Cortex](https://cortexmetrics.io/docs/api/), [influxDB](https://docs.influxdata.com/influxdb/v1.8/supported_protocols/prometheus/), and many [others](https://prometheus.io/docs/operating/integrations/#remote-endpoints-and-storage).
-The following diagram shows an example of Prometheus remote write API usage, with Cortex,n open source, horizontally scalable, highly available, multi-tenant, long term storage, as a remote storage backend.
+The following diagram shows an example of Prometheus remote write API usage, with Cortex, an open source, horizontally scalable, highly available, multi-tenant, long term storage, as a remote storage backend.
![Cortex Architecture](img/cortex.png)
diff --git a/exporter/prometheusremotewriteexporter/README.md b/exporter/prometheusremotewriteexporter/README.md
index f15b3c4b76e8..f48f3e9d00a8 100644
--- a/exporter/prometheusremotewriteexporter/README.md
+++ b/exporter/prometheusremotewriteexporter/README.md
@@ -4,15 +4,13 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: metrics |
-| Distributions | [core], [contrib], [aws], [observiq] |
+| Distributions | [core], [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fprometheusremotewrite%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fprometheusremotewrite) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fprometheusremotewrite%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fprometheusremotewrite) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@Aneurysm9](https://www.github.com/Aneurysm9), [@rapphil](https://www.github.com/rapphil) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[core]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
Prometheus Remote Write Exporter sends OpenTelemetry metrics
@@ -52,6 +50,7 @@ The following settings can be optionally configured:
- *Note the following headers cannot be changed: `Content-Encoding`, `Content-Type`, `X-Prometheus-Remote-Write-Version`, and `User-Agent`.*
- `namespace`: prefix attached to each exported metric name.
- `add_metric_suffixes`: If set to false, type and unit suffixes will not be added to metrics. Default: true.
+- `send_metadata`: If set to true, prometheus metadata will be generated and sent. Default: false.
- `remote_write_queue`: fine tuning for queueing and sending of the outgoing remote writes.
- `enabled`: enable the sending queue (default: `true`)
- `queue_size`: number of OTLP metrics that can be queued. Ignored if `enabled` is `false` (default: `10000`)
diff --git a/exporter/prometheusremotewriteexporter/config.go b/exporter/prometheusremotewriteexporter/config.go
index 22b0b3a969d9..f63468783b1f 100644
--- a/exporter/prometheusremotewriteexporter/config.go
+++ b/exporter/prometheusremotewriteexporter/config.go
@@ -8,6 +8,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry"
@@ -16,7 +17,7 @@ import (
// Config defines configuration for Remote Write exporter.
type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// prefix attached to each exported metric name
// See: https://prometheus.io/docs/practices/naming/#metric-names
@@ -29,7 +30,7 @@ type Config struct {
// ExternalLabels defines a map of label keys and values that are allowed to start with reserved prefix "__"
ExternalLabels map[string]string `mapstructure:"external_labels"`
- HTTPClientSettings confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ ClientConfig confighttp.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
// maximum size in bytes of time series batch sent to remote storage
MaxBatchSizeBytes int `mapstructure:"max_batch_size_bytes"`
@@ -48,6 +49,9 @@ type Config struct {
// AddMetricSuffixes controls whether unit and type suffixes are added to metrics on export
AddMetricSuffixes bool `mapstructure:"add_metric_suffixes"`
+
+ // SendMetadata controls whether prometheus metadata will be generated and sent
+ SendMetadata bool `mapstructure:"send_metadata"`
}
type CreatedMetric struct {
diff --git a/exporter/prometheusremotewriteexporter/config_test.go b/exporter/prometheusremotewriteexporter/config_test.go
index 19926e845652..00e6074eda19 100644
--- a/exporter/prometheusremotewriteexporter/config_test.go
+++ b/exporter/prometheusremotewriteexporter/config_test.go
@@ -14,6 +14,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -42,7 +43,7 @@ func TestLoadConfig(t *testing.T) {
expected: &Config{
MaxBatchSizeBytes: 3000000,
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -58,10 +59,10 @@ func TestLoadConfig(t *testing.T) {
AddMetricSuffixes: false,
Namespace: "test-space",
ExternalLabels: map[string]string{"key1": "value1", "key2": "value2"},
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "localhost:8888",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/var/lib/mycert.pem", // This is subject to change, but currently I have no idea what else to put here lol
},
Insecure: false,
diff --git a/exporter/prometheusremotewriteexporter/exporter.go b/exporter/prometheusremotewriteexporter/exporter.go
index 865abcc06636..52ad2ecd1f91 100644
--- a/exporter/prometheusremotewriteexporter/exporter.go
+++ b/exporter/prometheusremotewriteexporter/exporter.go
@@ -21,16 +21,39 @@ import (
"github.com/prometheus/prometheus/prompb"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/otel/attribute"
+ "go.opentelemetry.io/otel/metric"
"go.uber.org/multierr"
+ "go.uber.org/zap"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter/internal/metadata"
prometheustranslator "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus"
"github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite"
)
+type prwTelemetry interface {
+ recordTranslationFailure(ctx context.Context)
+ recordTranslatedTimeSeries(ctx context.Context, numTS int)
+}
+
+type prwTelemetryOtel struct {
+ failedTranslations metric.Int64Counter
+ translatedTimeSeries metric.Int64Counter
+ otelAttrs []attribute.KeyValue
+}
+
+func (p *prwTelemetryOtel) recordTranslationFailure(ctx context.Context) {
+ p.failedTranslations.Add(ctx, 1, metric.WithAttributes(p.otelAttrs...))
+}
+
+func (p *prwTelemetryOtel) recordTranslatedTimeSeries(ctx context.Context, numTS int) {
+ p.translatedTimeSeries.Add(ctx, int64(numTS), metric.WithAttributes(p.otelAttrs...))
+}
+
// prwExporter converts OTLP metrics to Prometheus remote write TimeSeries and sends them to a remote endpoint.
type prwExporter struct {
endpointURL *url.URL
@@ -40,11 +63,36 @@ type prwExporter struct {
concurrency int
userAgentHeader string
maxBatchSizeBytes int
- clientSettings *confighttp.HTTPClientSettings
+ clientSettings *confighttp.ClientConfig
settings component.TelemetrySettings
- retrySettings exporterhelper.RetrySettings
+ retrySettings configretry.BackOffConfig
wal *prweWAL
exporterSettings prometheusremotewrite.Settings
+ telemetry prwTelemetry
+}
+
+func newPRWTelemetry(set exporter.CreateSettings) (prwTelemetry, error) {
+
+ meter := metadata.Meter(set.TelemetrySettings)
+ // TODO: create helper functions similar to the processor helper: BuildCustomMetricName
+ prefix := "exporter/" + metadata.Type.String() + "/"
+ failedTranslations, errFailedTranslation := meter.Int64Counter(prefix+"failed_translations",
+ metric.WithDescription("Number of translation operations that failed to translate metrics from Otel to Prometheus"),
+ metric.WithUnit("1"),
+ )
+
+ translatedTimeSeries, errTranslatedMetrics := meter.Int64Counter(prefix+"translated_time_series",
+ metric.WithDescription("Number of Prometheus time series that were translated from OTel metrics"),
+ metric.WithUnit("1"),
+ )
+
+ return &prwTelemetryOtel{
+ failedTranslations: failedTranslations,
+ translatedTimeSeries: translatedTimeSeries,
+ otelAttrs: []attribute.KeyValue{
+ attribute.String("exporter", set.ID.String()),
+ },
+ }, errors.Join(errFailedTranslation, errTranslatedMetrics)
}
// newPRWExporter initializes a new prwExporter instance and sets fields accordingly.
@@ -54,11 +102,16 @@ func newPRWExporter(cfg *Config, set exporter.CreateSettings) (*prwExporter, err
return nil, err
}
- endpointURL, err := url.ParseRequestURI(cfg.HTTPClientSettings.Endpoint)
+ endpointURL, err := url.ParseRequestURI(cfg.ClientConfig.Endpoint)
if err != nil {
return nil, errors.New("invalid endpoint")
}
+ prwTelemetry, err := newPRWTelemetry(set)
+ if err != nil {
+ return nil, err
+ }
+
userAgentHeader := fmt.Sprintf("%s/%s", strings.ReplaceAll(strings.ToLower(set.BuildInfo.Description), " ", "-"), set.BuildInfo.Version)
prwe := &prwExporter{
@@ -68,31 +121,27 @@ func newPRWExporter(cfg *Config, set exporter.CreateSettings) (*prwExporter, err
userAgentHeader: userAgentHeader,
maxBatchSizeBytes: cfg.MaxBatchSizeBytes,
concurrency: cfg.RemoteWriteQueue.NumConsumers,
- clientSettings: &cfg.HTTPClientSettings,
+ clientSettings: &cfg.ClientConfig,
settings: set.TelemetrySettings,
- retrySettings: cfg.RetrySettings,
+ retrySettings: cfg.BackOffConfig,
exporterSettings: prometheusremotewrite.Settings{
Namespace: cfg.Namespace,
ExternalLabels: sanitizedLabels,
DisableTargetInfo: !cfg.TargetInfo.Enabled,
ExportCreatedMetric: cfg.CreatedMetric.Enabled,
AddMetricSuffixes: cfg.AddMetricSuffixes,
+ SendMetadata: cfg.SendMetadata,
},
- }
- if cfg.WAL == nil {
- return prwe, nil
+ telemetry: prwTelemetry,
}
- prwe.wal, err = newWAL(cfg.WAL, prwe.export)
- if err != nil {
- return nil, err
- }
+ prwe.wal = newWAL(cfg.WAL, prwe.export)
return prwe, nil
}
// Start creates the prometheus client
func (prwe *prwExporter) Start(ctx context.Context, host component.Host) (err error) {
- prwe.client, err = prwe.clientSettings.ToClient(host, prwe.settings)
+ prwe.client, err = prwe.clientSettings.ToClientContext(ctx, host, prwe.settings)
if err != nil {
return err
}
@@ -130,12 +179,22 @@ func (prwe *prwExporter) PushMetrics(ctx context.Context, md pmetric.Metrics) er
case <-prwe.closeChan:
return errors.New("shutdown has been called")
default:
+
tsMap, err := prometheusremotewrite.FromMetrics(md, prwe.exporterSettings)
if err != nil {
- err = consumererror.NewPermanent(err)
+ prwe.telemetry.recordTranslationFailure(ctx)
+ prwe.settings.Logger.Debug("failed to translate metrics, exporting remaining metrics", zap.Error(err), zap.Int("translated", len(tsMap)))
+ }
+
+ prwe.telemetry.recordTranslatedTimeSeries(ctx, len(tsMap))
+
+ var m []*prompb.MetricMetadata
+ if prwe.exporterSettings.SendMetadata {
+ m = prometheusremotewrite.OtelMetricsToMetadata(md, prwe.exporterSettings.AddMetricSuffixes)
}
+
// Call export even if a conversion error, since there may be points that were successfully converted.
- return multierr.Combine(err, prwe.handleExport(ctx, tsMap))
+ return prwe.handleExport(ctx, tsMap, m)
}
}
@@ -151,14 +210,14 @@ func validateAndSanitizeExternalLabels(cfg *Config) (map[string]string, error) {
return sanitizedLabels, nil
}
-func (prwe *prwExporter) handleExport(ctx context.Context, tsMap map[string]*prompb.TimeSeries) error {
+func (prwe *prwExporter) handleExport(ctx context.Context, tsMap map[string]*prompb.TimeSeries, m []*prompb.MetricMetadata) error {
// There are no metrics to export, so return.
if len(tsMap) == 0 {
return nil
}
// Calls the helper function to convert and batch the TsMap to the desired format
- requests, err := batchTimeSeries(tsMap, prwe.maxBatchSizeBytes)
+ requests, err := batchTimeSeries(tsMap, prwe.maxBatchSizeBytes, m)
if err != nil {
return err
}
@@ -219,15 +278,24 @@ func (prwe *prwExporter) export(ctx context.Context, requests []*prompb.WriteReq
}
func (prwe *prwExporter) execute(ctx context.Context, writeReq *prompb.WriteRequest) error {
+ // Uses proto.Marshal to convert the WriteRequest into bytes array
+ data, errMarshal := proto.Marshal(writeReq)
+ if errMarshal != nil {
+ return consumererror.NewPermanent(errMarshal)
+ }
+ buf := make([]byte, len(data), cap(data))
+ compressedData := snappy.Encode(buf, data)
+
// executeFunc can be used for backoff and non backoff scenarios.
executeFunc := func() error {
- // Uses proto.Marshal to convert the WriteRequest into bytes array
- data, err := proto.Marshal(writeReq)
- if err != nil {
- return backoff.Permanent(consumererror.NewPermanent(err))
+ // check there was no timeout in the component level to avoid retries
+ // to continue to run after a timeout
+ select {
+ case <-ctx.Done():
+ return backoff.Permanent(ctx.Err())
+ default:
+ // continue
}
- buf := make([]byte, len(data), cap(data))
- compressedData := snappy.Encode(buf, data)
// Create the HTTP POST request to send to the endpoint
req, err := http.NewRequestWithContext(ctx, "POST", prwe.endpointURL.String(), bytes.NewReader(compressedData))
diff --git a/exporter/prometheusremotewriteexporter/exporter_test.go b/exporter/prometheusremotewriteexporter/exporter_test.go
index 2a317cebb91d..7adcae6f83e3 100644
--- a/exporter/prometheusremotewriteexporter/exporter_test.go
+++ b/exporter/prometheusremotewriteexporter/exporter_test.go
@@ -22,6 +22,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
@@ -35,11 +36,11 @@ import (
// Test_NewPRWExporter checks that a new exporter instance with non-nil fields is initialized
func Test_NewPRWExporter(t *testing.T) {
cfg := &Config{
- TimeoutSettings: exporterhelper.TimeoutSettings{},
- RetrySettings: exporterhelper.RetrySettings{},
- Namespace: "",
- ExternalLabels: map[string]string{},
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ""},
+ TimeoutSettings: exporterhelper.TimeoutSettings{},
+ BackOffConfig: configretry.BackOffConfig{},
+ Namespace: "",
+ ExternalLabels: map[string]string{},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ""},
TargetInfo: &TargetInfo{
Enabled: true,
},
@@ -106,7 +107,7 @@ func Test_NewPRWExporter(t *testing.T) {
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- cfg.HTTPClientSettings.Endpoint = tt.endpoint
+ cfg.ClientConfig.Endpoint = tt.endpoint
cfg.ExternalLabels = tt.externalLabels
cfg.Namespace = tt.namespace
cfg.RemoteWriteQueue.NumConsumers = 1
@@ -132,7 +133,7 @@ func Test_NewPRWExporter(t *testing.T) {
func Test_Start(t *testing.T) {
cfg := &Config{
TimeoutSettings: exporterhelper.TimeoutSettings{},
- RetrySettings: exporterhelper.RetrySettings{},
+ BackOffConfig: configretry.BackOffConfig{},
MaxBatchSizeBytes: 3000000,
Namespace: "",
ExternalLabels: map[string]string{},
@@ -158,7 +159,7 @@ func Test_Start(t *testing.T) {
returnErrorOnStartUp bool
set exporter.CreateSettings
endpoint string
- clientSettings confighttp.HTTPClientSettings
+ clientSettings confighttp.ClientConfig
}{
{
name: "success_case",
@@ -167,7 +168,7 @@ func Test_Start(t *testing.T) {
concurrency: 5,
externalLabels: map[string]string{"Key1": "Val1"},
set: set,
- clientSettings: confighttp.HTTPClientSettings{Endpoint: "https://some.url:9411/api/prom/push"},
+ clientSettings: confighttp.ClientConfig{Endpoint: "https://some.url:9411/api/prom/push"},
},
{
name: "invalid_tls",
@@ -177,10 +178,10 @@ func Test_Start(t *testing.T) {
externalLabels: map[string]string{"Key1": "Val1"},
set: set,
returnErrorOnStartUp: true,
- clientSettings: confighttp.HTTPClientSettings{
+ clientSettings: confighttp.ClientConfig{
Endpoint: "https://some.url:9411/api/prom/push",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "non-existent file",
CertFile: "",
KeyFile: "",
@@ -197,7 +198,7 @@ func Test_Start(t *testing.T) {
cfg.ExternalLabels = tt.externalLabels
cfg.Namespace = tt.namespace
cfg.RemoteWriteQueue.NumConsumers = 1
- cfg.HTTPClientSettings = tt.clientSettings
+ cfg.ClientConfig = tt.clientSettings
prwe, err := newPRWExporter(cfg, tt.set)
assert.NoError(t, err)
@@ -326,7 +327,7 @@ func Test_export(t *testing.T) {
}
func TestNoMetricsNoError(t *testing.T) {
- server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusAccepted)
}))
defer server.Close()
@@ -343,9 +344,9 @@ func runExportPipeline(ts *prompb.TimeSeries, endpoint *url.URL) error {
}
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = endpoint.String()
+ cfg.ClientConfig.Endpoint = endpoint.String()
cfg.RemoteWriteQueue.NumConsumers = 1
- cfg.RetrySettings = exporterhelper.RetrySettings{
+ cfg.BackOffConfig = configretry.BackOffConfig{
Enabled: true,
InitialInterval: 100 * time.Millisecond, // Shorter initial interval
MaxInterval: 1 * time.Second, // Shorter max interval
@@ -368,7 +369,20 @@ func runExportPipeline(ts *prompb.TimeSeries, endpoint *url.URL) error {
return err
}
- return prwe.handleExport(context.Background(), testmap)
+ return prwe.handleExport(context.Background(), testmap, nil)
+}
+
+type mockPRWTelemetry struct {
+ failedTranslations int
+ translatedTimeSeries int
+}
+
+func (m *mockPRWTelemetry) recordTranslationFailure(_ context.Context) {
+ m.failedTranslations++
+}
+
+func (m *mockPRWTelemetry) recordTranslatedTimeSeries(_ context.Context, numTs int) {
+ m.translatedTimeSeries += numTs
}
// Test_PushMetrics checks the number of TimeSeries received by server and the number of metrics dropped is the same as
@@ -419,6 +433,11 @@ func Test_PushMetrics(t *testing.T) {
emptySummaryBatch := getMetricsFromMetricList(invalidMetrics[emptySummary])
+ // partial success (or partial failure) cases
+
+ partialSuccess1 := getMetricsFromMetricList(validMetrics1[validSum], validMetrics2[validSum],
+ validMetrics1[validIntGauge], validMetrics2[validIntGauge], invalidMetrics[emptyGauge])
+
// staleNaN cases
staleNaNHistogramBatch := getMetricsFromMetricList(staleNaNMetrics[staleNaNHistogram])
staleNaNEmptyHistogramBatch := getMetricsFromMetricList(staleNaNMetrics[staleNaNEmptyHistogram])
@@ -456,20 +475,23 @@ func Test_PushMetrics(t *testing.T) {
}
tests := []struct {
- name string
- metrics pmetric.Metrics
- reqTestFunc func(t *testing.T, r *http.Request, expected int, isStaleMarker bool)
- expectedTimeSeries int
- httpResponseCode int
- returnErr bool
- isStaleMarker bool
- skipForWAL bool
+ name string
+ metrics pmetric.Metrics
+ reqTestFunc func(t *testing.T, r *http.Request, expected int, isStaleMarker bool)
+ expectedTimeSeries int
+ httpResponseCode int
+ returnErr bool
+ isStaleMarker bool
+ skipForWAL bool
+ expectedFailedTranslations int
}{
{
- name: "invalid_type_case",
- metrics: invalidTypeBatch,
- httpResponseCode: http.StatusAccepted,
- returnErr: true,
+ name: "invalid_type_case",
+ metrics: invalidTypeBatch,
+ httpResponseCode: http.StatusAccepted,
+ reqTestFunc: checkFunc,
+ expectedTimeSeries: 1, // the resource target metric.
+ expectedFailedTranslations: 1,
},
{
name: "intSum_case",
@@ -566,32 +588,40 @@ func Test_PushMetrics(t *testing.T) {
skipForWAL: true,
},
{
- name: "emptyGauge_case",
- metrics: emptyDoubleGaugeBatch,
- reqTestFunc: checkFunc,
- httpResponseCode: http.StatusAccepted,
- returnErr: true,
+ name: "emptyGauge_case",
+ metrics: emptyDoubleGaugeBatch,
+ reqTestFunc: checkFunc,
+ httpResponseCode: http.StatusAccepted,
+ expectedFailedTranslations: 1,
},
{
- name: "emptyCumulativeSum_case",
- metrics: emptyCumulativeSumBatch,
- reqTestFunc: checkFunc,
- httpResponseCode: http.StatusAccepted,
- returnErr: true,
+ name: "emptyCumulativeSum_case",
+ metrics: emptyCumulativeSumBatch,
+ reqTestFunc: checkFunc,
+ httpResponseCode: http.StatusAccepted,
+ expectedFailedTranslations: 1,
},
{
- name: "emptyCumulativeHistogram_case",
- metrics: emptyCumulativeHistogramBatch,
- reqTestFunc: checkFunc,
- httpResponseCode: http.StatusAccepted,
- returnErr: true,
+ name: "emptyCumulativeHistogram_case",
+ metrics: emptyCumulativeHistogramBatch,
+ reqTestFunc: checkFunc,
+ httpResponseCode: http.StatusAccepted,
+ expectedFailedTranslations: 1,
},
{
- name: "emptySummary_case",
- metrics: emptySummaryBatch,
- reqTestFunc: checkFunc,
- httpResponseCode: http.StatusAccepted,
- returnErr: true,
+ name: "emptySummary_case",
+ metrics: emptySummaryBatch,
+ reqTestFunc: checkFunc,
+ httpResponseCode: http.StatusAccepted,
+ expectedFailedTranslations: 1,
+ },
+ {
+ name: "partialSuccess_case",
+ metrics: partialSuccess1,
+ reqTestFunc: checkFunc,
+ httpResponseCode: http.StatusAccepted,
+ expectedTimeSeries: 4,
+ expectedFailedTranslations: 1,
},
{
name: "staleNaNIntGauge_case",
@@ -667,6 +697,7 @@ func Test_PushMetrics(t *testing.T) {
}
t.Run(tt.name, func(t *testing.T) {
t.Parallel()
+ mockTelemetry := &mockPRWTelemetry{}
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if tt.reqTestFunc != nil {
tt.reqTestFunc(t, r, tt.expectedTimeSeries, tt.isStaleMarker)
@@ -677,7 +708,7 @@ func Test_PushMetrics(t *testing.T) {
defer server.Close()
// Adjusted retry settings for faster testing
- retrySettings := exporterhelper.RetrySettings{
+ retrySettings := configretry.BackOffConfig{
Enabled: true,
InitialInterval: 100 * time.Millisecond, // Shorter initial interval
MaxInterval: 1 * time.Second, // Shorter max interval
@@ -685,7 +716,7 @@ func Test_PushMetrics(t *testing.T) {
}
cfg := &Config{
Namespace: "",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: server.URL,
// We almost read 0 bytes, so no need to tune ReadBufferSize.
ReadBufferSize: 0,
@@ -699,7 +730,7 @@ func Test_PushMetrics(t *testing.T) {
CreatedMetric: &CreatedMetric{
Enabled: true,
},
- RetrySettings: retrySettings,
+ BackOffConfig: retrySettings,
}
if useWAL {
@@ -715,7 +746,10 @@ func Test_PushMetrics(t *testing.T) {
}
set := exportertest.NewNopCreateSettings()
set.BuildInfo = buildInfo
+
prwe, nErr := newPRWExporter(cfg, set)
+ prwe.telemetry = mockTelemetry
+
require.NoError(t, nErr)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
@@ -728,6 +762,9 @@ func Test_PushMetrics(t *testing.T) {
assert.Error(t, err)
return
}
+
+ assert.Equal(t, tt.expectedFailedTranslations, mockTelemetry.failedTranslations)
+ assert.Equal(t, tt.expectedTimeSeries, mockTelemetry.translatedTimeSeries)
assert.NoError(t, err)
})
}
@@ -855,7 +892,7 @@ func TestWALOnExporterRoundTrip(t *testing.T) {
// receive the bytes uploaded to it by our exporter.
uploadedBytesCh := make(chan []byte, 1)
exiting := make(chan bool)
- prweServer := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+ prweServer := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, req *http.Request) {
uploaded, err2 := io.ReadAll(req.Body)
assert.NoError(t, err2, "Error while reading from HTTP upload")
select {
@@ -871,7 +908,7 @@ func TestWALOnExporterRoundTrip(t *testing.T) {
tempDir := t.TempDir()
cfg := &Config{
Namespace: "test_ns",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: prweServer.URL,
},
RemoteWriteQueue: RemoteWriteQueue{NumConsumers: 1},
@@ -919,7 +956,7 @@ func TestWALOnExporterRoundTrip(t *testing.T) {
"timeseries1": ts1,
"timeseries2": ts2,
}
- errs := prwe.handleExport(ctx, tsMap)
+ errs := prwe.handleExport(ctx, tsMap, nil)
assert.NoError(t, errs)
// Shutdown after we've written to the WAL. This ensures that our
// exported data in-flight will flushed flushed to the WAL before exiting.
@@ -997,69 +1034,86 @@ func TestWALOnExporterRoundTrip(t *testing.T) {
assert.Equal(t, gotFromWAL, gotFromUpload)
}
-func TestRetryOn5xx(t *testing.T) {
- // Create a mock HTTP server with a counter to simulate a 5xx error on the first attempt and a 2xx success on the second attempt
- attempts := 0
- mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- if attempts < 4 {
- attempts++
- http.Error(w, "Internal Server Error", http.StatusInternalServerError)
- } else {
- w.WriteHeader(http.StatusOK)
- }
- }))
- defer mockServer.Close()
-
- endpointURL, err := url.Parse(mockServer.URL)
- require.NoError(t, err)
-
- // Create the prwExporter
- exporter := &prwExporter{
- endpointURL: endpointURL,
- client: http.DefaultClient,
- retrySettings: exporterhelper.RetrySettings{
- Enabled: true,
- },
- }
-
- ctx := context.Background()
+func canceledContext() context.Context {
+ ctx, cancel := context.WithCancel(context.Background())
+ cancel()
+ return ctx
+}
- // Execute the write request and verify that the exporter returns a non-permanent error on the first attempt.
- err = exporter.execute(ctx, &prompb.WriteRequest{})
- assert.NoError(t, err)
- assert.Equal(t, 4, attempts)
+func assertPermanentConsumerError(t assert.TestingT, err error, _ ...any) bool {
+ return assert.True(t, consumererror.IsPermanent(err), "error should be consumererror.Permanent")
}
-func TestNoRetryOn4xx(t *testing.T) {
- // Create a mock HTTP server with a counter to simulate a 4xx error
- attempts := 0
- mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
- if attempts < 1 {
- attempts++
- http.Error(w, "Bad Request", http.StatusBadRequest)
- } else {
- w.WriteHeader(http.StatusOK)
- }
- }))
- defer mockServer.Close()
+func TestRetries(t *testing.T) {
- endpointURL, err := url.Parse(mockServer.URL)
- require.NoError(t, err)
-
- // Create the prwExporter
- exporter := &prwExporter{
- endpointURL: endpointURL,
- client: http.DefaultClient,
- retrySettings: exporterhelper.RetrySettings{
- Enabled: true,
+ tts := []struct {
+ name string
+ serverErrorCount int // number of times server should return error
+ expectedAttempts int
+ httpStatus int
+ assertError assert.ErrorAssertionFunc
+ assertErrorType assert.ErrorAssertionFunc
+ ctx context.Context
+ }{
+ {
+ "test 5xx should retry",
+ 3,
+ 4,
+ http.StatusInternalServerError,
+ assert.NoError,
+ assert.NoError,
+ context.Background(),
+ },
+ {
+ "test 4xx should not retry",
+ 4,
+ 1,
+ http.StatusBadRequest,
+ assert.Error,
+ assertPermanentConsumerError,
+ context.Background(),
+ },
+ {
+ "test timeout context should not execute",
+ 4,
+ 0,
+ http.StatusInternalServerError,
+ assert.Error,
+ assertPermanentConsumerError,
+ canceledContext(),
},
}
- ctx := context.Background()
+ for _, tt := range tts {
+ t.Run(tt.name, func(t *testing.T) {
+ totalAttempts := 0
+ mockServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
+ if totalAttempts < tt.serverErrorCount {
+ http.Error(w, http.StatusText(tt.httpStatus), tt.httpStatus)
+ } else {
+ w.WriteHeader(http.StatusOK)
+ }
+ totalAttempts++
+ },
+ ))
+ defer mockServer.Close()
+
+ endpointURL, err := url.Parse(mockServer.URL)
+ require.NoError(t, err)
+
+ // Create the prwExporter
+ exporter := &prwExporter{
+ endpointURL: endpointURL,
+ client: http.DefaultClient,
+ retrySettings: configretry.BackOffConfig{
+ Enabled: true,
+ },
+ }
- // Execute the write request and verify that the exporter returns an error due to the 4xx response.
- err = exporter.execute(ctx, &prompb.WriteRequest{})
- assert.Error(t, err)
- assert.True(t, consumererror.IsPermanent(err))
- assert.Equal(t, 1, attempts)
+ err = exporter.execute(tt.ctx, &prompb.WriteRequest{})
+ tt.assertError(t, err)
+ tt.assertErrorType(t, err)
+ assert.Equal(t, tt.expectedAttempts, totalAttempts)
+ })
+ }
}
diff --git a/exporter/prometheusremotewriteexporter/factory.go b/exporter/prometheusremotewriteexporter/factory.go
index 63135b9b8cb5..d0a0f8555513 100644
--- a/exporter/prometheusremotewriteexporter/factory.go
+++ b/exporter/prometheusremotewriteexporter/factory.go
@@ -8,10 +8,10 @@ import (
"errors"
"time"
- "github.com/cenkalti/backoff/v4"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -67,21 +67,18 @@ func createMetricsExporter(ctx context.Context, set exporter.CreateSettings,
}
func createDefaultConfig() component.Config {
+ retrySettings := configretry.NewDefaultBackOffConfig()
+ retrySettings.InitialInterval = 50 * time.Millisecond
+
return &Config{
Namespace: "",
ExternalLabels: map[string]string{},
MaxBatchSizeBytes: 3000000,
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.RetrySettings{
- Enabled: true,
- InitialInterval: 50 * time.Millisecond,
- MaxInterval: 200 * time.Millisecond,
- MaxElapsedTime: 1 * time.Minute,
- RandomizationFactor: backoff.DefaultRandomizationFactor,
- Multiplier: backoff.DefaultMultiplier,
- },
+ BackOffConfig: retrySettings,
AddMetricSuffixes: true,
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ SendMetadata: false,
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "http://some.url:9411/api/prom/push",
// We almost read 0 bytes, so no need to tune ReadBufferSize.
ReadBufferSize: 0,
diff --git a/exporter/prometheusremotewriteexporter/factory_test.go b/exporter/prometheusremotewriteexporter/factory_test.go
index 5043d17758ee..c1625bcbb383 100644
--- a/exporter/prometheusremotewriteexporter/factory_test.go
+++ b/exporter/prometheusremotewriteexporter/factory_test.go
@@ -27,10 +27,10 @@ func Test_createDefaultConfig(t *testing.T) {
func Test_createMetricsExporter(t *testing.T) {
invalidConfig := createDefaultConfig().(*Config)
- invalidConfig.HTTPClientSettings = confighttp.HTTPClientSettings{}
+ invalidConfig.ClientConfig = confighttp.ClientConfig{}
invalidTLSConfig := createDefaultConfig().(*Config)
- invalidTLSConfig.HTTPClientSettings.TLSSetting = configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ invalidTLSConfig.ClientConfig.TLSSetting = configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "non-existent file",
CertFile: "",
KeyFile: "",
@@ -86,6 +86,7 @@ func Test_createMetricsExporter(t *testing.T) {
return
}
assert.NoError(t, err)
+ assert.NoError(t, exp.Shutdown(context.Background()))
})
}
}
diff --git a/exporter/prometheusremotewriteexporter/generated_component_test.go b/exporter/prometheusremotewriteexporter/generated_component_test.go
new file mode 100644
index 000000000000..5ffca178a9d8
--- /dev/null
+++ b/exporter/prometheusremotewriteexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package prometheusremotewriteexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/prometheusremotewriteexporter/go.mod b/exporter/prometheusremotewriteexporter/go.mod
index 05bdf442f7bc..2d60135f98ce 100644
--- a/exporter/prometheusremotewriteexporter/go.mod
+++ b/exporter/prometheusremotewriteexporter/go.mod
@@ -1,76 +1,86 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/prometheusremotewriteexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/fsnotify/fsnotify v1.7.0
github.com/gogo/protobuf v1.3.2
github.com/golang/snappy v0.0.4
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.89.0
- github.com/prometheus/prometheus v0.47.2
- github.com/stretchr/testify v1.8.4
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/resourcetotelemetry v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheus v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite v0.98.0
+ github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e
+ github.com/stretchr/testify v1.9.0
github.com/tidwall/wal v1.1.7
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel v1.25.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/golang/protobuf v1.5.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.52.2 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/tidwall/gjson v1.10.2 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/tidwall/tinylru v1.1.0 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/prometheusremotewriteexporter/go.sum b/exporter/prometheusremotewriteexporter/go.sum
index 88bfeacbcdfc..f5a9ed41224e 100644
--- a/exporter/prometheusremotewriteexporter/go.sum
+++ b/exporter/prometheusremotewriteexporter/go.sum
@@ -1,84 +1,55 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
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/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
+github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -89,27 +60,24 @@ github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjY
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-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.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/prometheus v0.47.2 h1:jWcnuQHz1o1Wu3MZ6nMJDuTI0kU5yJp9pkxh8XEkNvI=
-github.com/prometheus/prometheus v0.47.2/go.mod h1:J/bmOSjgH7lFxz2gZhrWEZs2i64vMS+HIuZfmYNhJ/M=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck=
+github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e h1:UmqAuY2OyDoog8+l5FybViJE5B2r+UxVGCUwFTsY5AA=
+github.com/prometheus/prometheus v0.51.2-0.20240405174432-b4a973753c6e/go.mod h1:+0ld+ozir7zWFcHA2vVpWAKxXakIioEjPPNOqH+J3ZA=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tidwall/gjson v1.10.2 h1:APbLGOM0rrEkd8WBw9C24nllro4ajFuJu0Sc9hRz8Bo=
github.com/tidwall/gjson v1.10.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
@@ -122,101 +90,90 @@ github.com/tidwall/wal v1.1.7 h1:emc1TRjIVsdKKSnpwGBAcsAGg0767SvUk8+ygx7Bb+4=
github.com/tidwall/wal v1.1.7/go.mod h1:r6lR1j27W9EPalgHiB7zLJDYu3mzW5BQP5KrzBpYY/E=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -224,38 +181,14 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78 h1:Xs9lu+tLXxLIfuci70nG4cpwaRC+mRQPUL7LoIeDJC4=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240304161311-37d4d3c04a78/go.mod h1:UCOku4NytXMJuLQE5VuqA5lX3PcHCBo8pxNyvkf4xBs=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/prometheusremotewriteexporter/helper.go b/exporter/prometheusremotewriteexporter/helper.go
index b468609380c8..d5eca3086a7e 100644
--- a/exporter/prometheusremotewriteexporter/helper.go
+++ b/exporter/prometheusremotewriteexporter/helper.go
@@ -11,12 +11,12 @@ import (
)
// batchTimeSeries splits series into multiple batch write requests.
-func batchTimeSeries(tsMap map[string]*prompb.TimeSeries, maxBatchByteSize int) ([]*prompb.WriteRequest, error) {
+func batchTimeSeries(tsMap map[string]*prompb.TimeSeries, maxBatchByteSize int, m []*prompb.MetricMetadata) ([]*prompb.WriteRequest, error) {
if len(tsMap) == 0 {
return nil, errors.New("invalid tsMap: cannot be empty map")
}
- requests := make([]*prompb.WriteRequest, 0, len(tsMap))
+ requests := make([]*prompb.WriteRequest, 0, len(tsMap)+len(m))
tsArray := make([]prompb.TimeSeries, 0, len(tsMap))
sizeOfCurrentBatch := 0
@@ -42,6 +42,30 @@ func batchTimeSeries(tsMap map[string]*prompb.TimeSeries, maxBatchByteSize int)
requests = append(requests, wrapped)
}
+ mArray := make([]prompb.MetricMetadata, 0, len(m))
+ sizeOfCurrentBatch = 0
+ i = 0
+ for _, v := range m {
+ sizeOfM := v.Size()
+
+ if sizeOfCurrentBatch+sizeOfM >= maxBatchByteSize {
+ wrapped := convertMetadataToRequest(mArray)
+ requests = append(requests, wrapped)
+
+ mArray = make([]prompb.MetricMetadata, 0, len(m)-i)
+ sizeOfCurrentBatch = 0
+ }
+
+ mArray = append(mArray, *v)
+ sizeOfCurrentBatch += sizeOfM
+ i++
+ }
+
+ if len(mArray) != 0 {
+ wrapped := convertMetadataToRequest(mArray)
+ requests = append(requests, wrapped)
+ }
+
return requests, nil
}
@@ -57,6 +81,12 @@ func convertTimeseriesToRequest(tsArray []prompb.TimeSeries) *prompb.WriteReques
}
}
+func convertMetadataToRequest(m []prompb.MetricMetadata) *prompb.WriteRequest {
+ return &prompb.WriteRequest{
+ Metadata: m,
+ }
+}
+
func orderBySampleTimestamp(tsArray []prompb.TimeSeries) []prompb.TimeSeries {
for i := range tsArray {
sL := tsArray[i].Samples
diff --git a/exporter/prometheusremotewriteexporter/helper_test.go b/exporter/prometheusremotewriteexporter/helper_test.go
index 9528607a6fd9..8404bb6c9e9e 100644
--- a/exporter/prometheusremotewriteexporter/helper_test.go
+++ b/exporter/prometheusremotewriteexporter/helper_test.go
@@ -57,7 +57,7 @@ func Test_batchTimeSeries(t *testing.T) {
// run tests
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- requests, err := batchTimeSeries(tt.tsMap, tt.maxBatchByteSize)
+ requests, err := batchTimeSeries(tt.tsMap, tt.maxBatchByteSize, nil)
if tt.returnErr {
assert.Error(t, err)
return
diff --git a/exporter/prometheusremotewriteexporter/internal/metadata/generated_status.go b/exporter/prometheusremotewriteexporter/internal/metadata/generated_status.go
index 2d3635acb0f4..1ad10c8ecf32 100644
--- a/exporter/prometheusremotewriteexporter/internal/metadata/generated_status.go
+++ b/exporter/prometheusremotewriteexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("prometheusremotewrite")
)
const (
- Type = "prometheusremotewrite"
MetricsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/prometheusremotewrite")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/prometheusremotewrite")
+}
diff --git a/exporter/prometheusremotewriteexporter/metadata.yaml b/exporter/prometheusremotewriteexporter/metadata.yaml
index 762142015495..2bd409f97907 100644
--- a/exporter/prometheusremotewriteexporter/metadata.yaml
+++ b/exporter/prometheusremotewriteexporter/metadata.yaml
@@ -1,9 +1,13 @@
type: prometheusremotewrite
+scope_name: otelcol/prometheusremotewrite
status:
class: exporter
stability:
beta: [metrics]
- distributions: [core, contrib, aws, observiq]
+ distributions: [core, contrib]
codeowners:
active: [Aneurysm9, rapphil]
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/prometheusremotewriteexporter/package_test.go b/exporter/prometheusremotewriteexporter/package_test.go
new file mode 100644
index 000000000000..b12f843d1f2e
--- /dev/null
+++ b/exporter/prometheusremotewriteexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package prometheusremotewriteexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/prometheusremotewriteexporter/wal.go b/exporter/prometheusremotewriteexporter/wal.go
index 746ba53bff26..f40e21d063b9 100644
--- a/exporter/prometheusremotewriteexporter/wal.go
+++ b/exporter/prometheusremotewriteexporter/wal.go
@@ -59,11 +59,11 @@ func (wc *WALConfig) truncateFrequency() time.Duration {
return defaultWALTruncateFrequency
}
-func newWAL(walConfig *WALConfig, exportSink func(context.Context, []*prompb.WriteRequest) error) (*prweWAL, error) {
+func newWAL(walConfig *WALConfig, exportSink func(context.Context, []*prompb.WriteRequest) error) *prweWAL {
if walConfig == nil {
// There are cases for which the WAL can be disabled.
// TODO: Perhaps log that the WAL wasn't enabled.
- return nil, errNilConfig
+ return nil
}
return &prweWAL{
@@ -72,7 +72,7 @@ func newWAL(walConfig *WALConfig, exportSink func(context.Context, []*prompb.Wri
stopChan: make(chan struct{}),
rWALIndex: &atomic.Uint64{},
wWALIndex: &atomic.Uint64{},
- }, nil
+ }
}
func (wc *WALConfig) createWAL() (*wal.Log, string, error) {
@@ -90,7 +90,6 @@ func (wc *WALConfig) createWAL() (*wal.Log, string, error) {
var (
errAlreadyClosed = errors.New("already closed")
errNilWAL = errors.New("wal is nil")
- errNilConfig = errors.New("expecting a non-nil configuration")
)
// retrieveWALIndices queries the WriteAheadLog for its current first and last indices.
diff --git a/exporter/prometheusremotewriteexporter/wal_test.go b/exporter/prometheusremotewriteexporter/wal_test.go
index 9de93623f647..9059b65ed2da 100644
--- a/exporter/prometheusremotewriteexporter/wal_test.go
+++ b/exporter/prometheusremotewriteexporter/wal_test.go
@@ -21,16 +21,14 @@ func doNothingExportSink(_ context.Context, reqL []*prompb.WriteRequest) error {
func TestWALCreation_nilConfig(t *testing.T) {
config := (*WALConfig)(nil)
- pwal, err := newWAL(config, doNothingExportSink)
- require.Equal(t, err, errNilConfig)
+ pwal := newWAL(config, doNothingExportSink)
require.Nil(t, pwal)
}
func TestWALCreation_nonNilConfig(t *testing.T) {
config := &WALConfig{Directory: t.TempDir()}
- pwal, err := newWAL(config, doNothingExportSink)
+ pwal := newWAL(config, doNothingExportSink)
require.NotNil(t, pwal)
- assert.Nil(t, err)
assert.NoError(t, pwal.stop())
}
@@ -80,18 +78,15 @@ func TestWALStopManyTimes(t *testing.T) {
TruncateFrequency: 60 * time.Microsecond,
BufferSize: 1,
}
- pwal, err := newWAL(config, doNothingExportSink)
- require.Nil(t, err)
+ pwal := newWAL(config, doNothingExportSink)
require.NotNil(t, pwal)
// Ensure that invoking .stop() multiple times doesn't cause a panic, but actually
// First close should NOT return an error.
- err = pwal.stop()
- require.Nil(t, err)
+ require.NoError(t, pwal.stop())
for i := 0; i < 4; i++ {
// Every invocation to .stop() should return an errAlreadyClosed.
- err = pwal.stop()
- require.Equal(t, err, errAlreadyClosed)
+ require.ErrorIs(t, pwal.stop(), errAlreadyClosed)
}
}
@@ -99,8 +94,8 @@ func TestWAL_persist(t *testing.T) {
// Unit tests that requests written to the WAL persist.
config := &WALConfig{Directory: t.TempDir()}
- pwal, err := newWAL(config, doNothingExportSink)
- require.Nil(t, err)
+ pwal := newWAL(config, doNothingExportSink)
+ require.NotNil(t, pwal)
// 1. Write out all the entries.
reqL := []*prompb.WriteRequest{
@@ -127,27 +122,25 @@ func TestWAL_persist(t *testing.T) {
}
ctx := context.Background()
- err = pwal.retrieveWALIndices()
- require.Nil(t, err)
+ require.NoError(t, pwal.retrieveWALIndices())
t.Cleanup(func() {
assert.NoError(t, pwal.stop())
})
- err = pwal.persistToWAL(reqL)
- require.Nil(t, err)
+ require.NoError(t, pwal.persistToWAL(reqL))
// 2. Read all the entries from the WAL itself, guided by the indices available,
// and ensure that they are exactly in order as we'd expect them.
wal := pwal.wal
start, err := wal.FirstIndex()
- require.Nil(t, err)
+ require.NoError(t, err)
end, err := wal.LastIndex()
- require.Nil(t, err)
+ require.NoError(t, err)
var reqLFromWAL []*prompb.WriteRequest
for i := start; i <= end; i++ {
req, err := pwal.readPrompbFromWAL(ctx, i)
- require.Nil(t, err)
+ require.NoError(t, err)
reqLFromWAL = append(reqLFromWAL, req)
}
diff --git a/exporter/pulsarexporter/config.go b/exporter/pulsarexporter/config.go
index 86eade408a7e..8bc9d557ecc9 100644
--- a/exporter/pulsarexporter/config.go
+++ b/exporter/pulsarexporter/config.go
@@ -10,6 +10,7 @@ import (
"github.com/apache/pulsar-client-go/pulsar"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
@@ -17,7 +18,7 @@ import (
type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"`
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// Endpoint of pulsar broker (default "pulsar://localhost:6650")
Endpoint string `mapstructure:"endpoint"`
diff --git a/exporter/pulsarexporter/config_test.go b/exporter/pulsarexporter/config_test.go
index c20f2ed3e274..bd43784cc546 100644
--- a/exporter/pulsarexporter/config_test.go
+++ b/exporter/pulsarexporter/config_test.go
@@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -35,7 +36,7 @@ func TestLoadConfig(t *testing.T) {
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 20 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
diff --git a/exporter/pulsarexporter/factory.go b/exporter/pulsarexporter/factory.go
index 639fd2a60d5b..d66cf9188568 100644
--- a/exporter/pulsarexporter/factory.go
+++ b/exporter/pulsarexporter/factory.go
@@ -10,6 +10,7 @@ import (
"time"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -59,7 +60,7 @@ func NewFactory(options ...FactoryOption) exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
Endpoint: defaultBroker,
// using an empty topic to track when it has not been set by user, default is based on traces or metrics.
@@ -103,8 +104,9 @@ func (f *pulsarExporterFactory) createTracesExporter(
// Disable exporterhelper Timeout, because we cannot pass a Context to the Producer,
// and will rely on the Pulsar Producer Timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
+ exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.Close))
}
@@ -133,8 +135,9 @@ func (f *pulsarExporterFactory) createMetricsExporter(
// Disable exporterhelper Timeout, because we cannot pass a Context to the Producer,
// and will rely on the sarama Pulsar Timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
+ exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.Close))
}
@@ -163,7 +166,8 @@ func (f *pulsarExporterFactory) createLogsExporter(
// Disable exporterhelper Timeout, because we cannot pass a Context to the Producer,
// and will rely on the Pulsar Producer Timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
+ exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.Close))
}
diff --git a/exporter/pulsarexporter/factory_test.go b/exporter/pulsarexporter/factory_test.go
index a48b8c6a6c47..186542c706df 100644
--- a/exporter/pulsarexporter/factory_test.go
+++ b/exporter/pulsarexporter/factory_test.go
@@ -10,6 +10,8 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.opentelemetry.io/collector/exporter/exportertest"
)
@@ -18,7 +20,7 @@ func Test_createDefaultConfig(t *testing.T) {
cfg := createDefaultConfig()
assert.Equal(t, cfg, &Config{
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
Endpoint: defaultBroker,
// using an empty topic to track when it has not been set by user, default is based on traces or metrics.
@@ -38,9 +40,10 @@ func TestWithTracesMarshalers_err(t *testing.T) {
tracesMarshaler := &customTraceMarshaler{encoding: "unknown"}
f := NewFactory(withTracesMarshalers(tracesMarshaler))
r, err := f.CreateTracesExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = r.Start(context.Background(), componenttest.NewNopHost())
// no available broker
require.Error(t, err)
- assert.Nil(t, r)
}
func TestCreateTracesExporter_err(t *testing.T) {
@@ -49,9 +52,10 @@ func TestCreateTracesExporter_err(t *testing.T) {
f := pulsarExporterFactory{tracesMarshalers: tracesMarshalers()}
r, err := f.createTracesExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = r.Start(context.Background(), componenttest.NewNopHost())
// no available broker
require.Error(t, err)
- assert.Nil(t, r)
}
func TestCreateMetricsExporter_err(t *testing.T) {
@@ -59,9 +63,10 @@ func TestCreateMetricsExporter_err(t *testing.T) {
cfg.Endpoint = ""
mf := pulsarExporterFactory{metricsMarshalers: metricsMarshalers()}
- mr, err := mf.createMetricsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ r, err := mf.createMetricsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = r.Start(context.Background(), componenttest.NewNopHost())
require.Error(t, err)
- assert.Nil(t, mr)
}
func TestCreateLogsExporter_err(t *testing.T) {
@@ -69,7 +74,8 @@ func TestCreateLogsExporter_err(t *testing.T) {
cfg.Endpoint = ""
mf := pulsarExporterFactory{logsMarshalers: logsMarshalers()}
- mr, err := mf.createLogsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ r, err := mf.createLogsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = r.Start(context.Background(), componenttest.NewNopHost())
require.Error(t, err)
- assert.Nil(t, mr)
}
diff --git a/exporter/pulsarexporter/generated_component_test.go b/exporter/pulsarexporter/generated_component_test.go
new file mode 100644
index 000000000000..4979e6a6d81b
--- /dev/null
+++ b/exporter/pulsarexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package pulsarexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/pulsarexporter/go.mod b/exporter/pulsarexporter/go.mod
index b4ac2a253c4f..395f3c18e3a9 100644
--- a/exporter/pulsarexporter/go.mod
+++ b/exporter/pulsarexporter/go.mod
@@ -1,24 +1,27 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/pulsarexporter
-go 1.20
+go 1.21
require (
github.com/apache/pulsar-client-go v0.8.1
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/gogo/protobuf v1.3.2
- github.com/jaegertracing/jaeger v1.41.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ github.com/jaegertracing/jaeger v1.55.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
)
require (
@@ -29,65 +32,62 @@ require (
github.com/apache/thrift v0.19.0 // indirect
github.com/ardielle/ardielle-go v1.5.2 // indirect
github.com/beorn7/perks v1.0.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/danieljoos/wincred v1.0.2 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
+ github.com/dvsekhvalnov/jose2go v1.6.0 // indirect
github.com/frankban/quicktest v1.14.3 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect
github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.6 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/linkedin/goavro/v2 v2.9.8 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-homedir v1.1.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/mtibben/percent v0.2.1 // indirect
github.com/nxadm/tail v1.4.8 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
github.com/pkg/errors v0.9.1 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.49.0 // indirect
github.com/prometheus/procfs v0.12.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/atomic v1.10.0 // indirect
- golang.org/x/crypto v0.15.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- golang.org/x/term v0.14.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.uber.org/atomic v1.11.0 // indirect
+ golang.org/x/crypto v0.21.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/oauth2 v0.17.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/term v0.18.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/appengine v1.6.7 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/appengine v1.6.8 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/pulsarexporter/go.sum b/exporter/pulsarexporter/go.sum
index 38cf2dc28695..4070b570af17 100644
--- a/exporter/pulsarexporter/go.sum
+++ b/exporter/pulsarexporter/go.sum
@@ -36,7 +36,6 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM=
github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU=
@@ -46,7 +45,6 @@ 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/DataDog/zstd v1.5.0 h1:+K/VEwIAaPcHiMtQvpLD4lqW7f0Gk3xdYZmI1hD+CXo=
github.com/DataDog/zstd v1.5.0/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -74,12 +72,12 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
github.com/bmizerany/perks v0.0.0-20141205001514-d9a9656a3a4b/go.mod h1:ac9efd0D1fsDb3EJvhqgXRbFx7bs2wqZ10HQPeU8U/Q=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
@@ -94,12 +92,14 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU=
github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U=
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/dimfeld/httptreemux v5.0.1+incompatible h1:Qj3gVcDNoOthBAqftuD596rm4wg/adLLz5xh5CmpiCA=
github.com/dimfeld/httptreemux v5.0.1+incompatible/go.mod h1:rbUlSV+CCpv/SuqUTP/8Bk2O3LyUV436/yaRGkhP6Z0=
-github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b h1:HBah4D48ypg3J7Np4N+HY/ZR76fx3HEUGxDU6Uk39oQ=
github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b/go.mod h1:7BvyPhdbLxMXIYTFPLsyJRFMsKmOZnQmzh6Gb+uquuM=
+github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY=
+github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU=
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=
@@ -112,7 +112,8 @@ github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3
github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps=
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.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=
@@ -120,15 +121,18 @@ github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
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-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0=
github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -142,7 +146,6 @@ github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfU
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
@@ -188,6 +191,7 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.5/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.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=
@@ -205,7 +209,8 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
@@ -225,8 +230,6 @@ github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerX
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-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
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=
@@ -239,8 +242,8 @@ github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpO
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=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
-github.com/jaegertracing/jaeger v1.41.0 h1:vVNky8dP46M2RjGaZ7qRENqylW+tBFay3h57N16Ip7M=
-github.com/jaegertracing/jaeger v1.41.0/go.mod h1:SIkAT75iVmA9U+mESGYuMH6UQv6V9Qy4qxo0lwfCQAc=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
github.com/jawher/mow.cli v1.0.4/go.mod h1:5hQj2V8g+qYmLUVWqu4Wuja1pI57M83EChYLVZ0sMKk=
github.com/jawher/mow.cli v1.2.0/go.mod h1:y+pcA3jBAdo/GIZx/0rFjw/K2bVEODP9rfZOfaiq8Ko=
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
@@ -260,14 +263,14 @@ github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d/go.mod h1:JJNr
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.10.8/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
-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/klauspost/compress v1.17.6 h1:60eq2E/jlfwQXtvZEeBUYADs+BwKBWURIY+Gj2eRGjI=
+github.com/klauspost/compress v1.17.6/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NIs=
github.com/knadh/koanf/maps v0.1.1/go.mod h1:npD/QZY3V6ghQDdcQzl1W4ICNVTkohC8E73eI2xW4yI=
github.com/knadh/koanf/providers/confmap v0.1.0 h1:gOkxhHkemwG4LezxxN8DMOFopOPghxRVp7JbIvdvqzU=
github.com/knadh/koanf/providers/confmap v0.1.0/go.mod h1:2uLhxQzJnyHKfxG927awZC7+fyHFdQkd697K4MdLnIU=
-github.com/knadh/koanf/v2 v2.0.1 h1:1dYGITt1I23x8cfx8ZnldtezdyaZtfAuRtIFOiRzK7g=
-github.com/knadh/koanf/v2 v2.0.1/go.mod h1:ZeiIlIDXTE7w1lMT6UVcNiRAS2/rCeLn/GdLNvY1Dus=
+github.com/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
@@ -276,6 +279,7 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
github.com/kr/pretty v0.2.0/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=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -286,8 +290,6 @@ github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPK
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
@@ -301,8 +303,6 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu
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.4.1/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.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=
@@ -316,17 +316,18 @@ github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs
github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
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/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
-github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc=
+github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
+github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
+github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE=
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
-github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak=
-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/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
@@ -338,37 +339,38 @@ 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.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI=
-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/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/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
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.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
+github.com/prometheus/common v0.49.0 h1:ToNTdK4zSnPVJmh698mGFkDor9wBI/iGaJy5dbH1EgI=
+github.com/prometheus/common v0.49.0/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
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.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
+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/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
@@ -391,30 +393,23 @@ github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH
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.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs=
go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g=
go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ=
@@ -425,51 +420,55 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
-go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
-go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
+go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.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.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
@@ -479,8 +478,9 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
-golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
+golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -516,6 +516,7 @@ 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=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -557,8 +558,9 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-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/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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=
@@ -571,8 +573,8 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
+golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ=
+golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA=
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=
@@ -584,6 +586,7 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
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=
@@ -639,12 +642,16 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8=
-golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww=
+golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
+golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8=
+golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
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=
@@ -653,6 +660,8 @@ 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.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=
@@ -709,9 +718,11 @@ 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.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/tools v0.1.2/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=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@@ -741,8 +752,9 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
+google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM=
+google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -784,8 +796,8 @@ google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6D
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
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=
@@ -806,8 +818,8 @@ google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAG
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
-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/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
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=
@@ -820,13 +832,15 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
diff --git a/exporter/pulsarexporter/internal/metadata/generated_status.go b/exporter/pulsarexporter/internal/metadata/generated_status.go
index ca71c889e14d..7397a8a4e89c 100644
--- a/exporter/pulsarexporter/internal/metadata/generated_status.go
+++ b/exporter/pulsarexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("pulsar")
)
const (
- Type = "pulsar"
TracesStability = component.StabilityLevelAlpha
MetricsStability = component.StabilityLevelAlpha
LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/pulsar")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/pulsar")
+}
diff --git a/exporter/pulsarexporter/metadata.yaml b/exporter/pulsarexporter/metadata.yaml
index a353a37e119a..49c6040a833f 100644
--- a/exporter/pulsarexporter/metadata.yaml
+++ b/exporter/pulsarexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: pulsar
+scope_name: otelcol/pulsar
status:
class: exporter
@@ -7,3 +8,7 @@ status:
distributions: [contrib]
codeowners:
active: [dmitryax, dao-jun]
+
+# Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
\ No newline at end of file
diff --git a/exporter/pulsarexporter/pulsar_exporter.go b/exporter/pulsarexporter/pulsar_exporter.go
index e32a84516c11..7a473a612235 100644
--- a/exporter/pulsarexporter/pulsar_exporter.go
+++ b/exporter/pulsarexporter/pulsar_exporter.go
@@ -8,6 +8,7 @@ import (
"fmt"
"github.com/apache/pulsar-client-go/pulsar"
+ "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/plog"
@@ -20,6 +21,7 @@ import (
var errUnrecognizedEncoding = fmt.Errorf("unrecognized encoding")
type PulsarTracesProducer struct {
+ cfg Config
client pulsar.Client
producer pulsar.Producer
topic string
@@ -48,12 +50,26 @@ func (e *PulsarTracesProducer) tracesPusher(ctx context.Context, td ptrace.Trace
}
func (e *PulsarTracesProducer) Close(context.Context) error {
+ if e.producer == nil {
+ return nil
+ }
e.producer.Close()
e.client.Close()
return nil
}
+func (e *PulsarTracesProducer) start(_ context.Context, _ component.Host) error {
+ client, producer, err := newPulsarProducer(e.cfg)
+ if err != nil {
+ return err
+ }
+ e.client = client
+ e.producer = producer
+ return nil
+}
+
type PulsarMetricsProducer struct {
+ cfg Config
client pulsar.Client
producer pulsar.Producer
topic string
@@ -82,12 +98,26 @@ func (e *PulsarMetricsProducer) metricsDataPusher(ctx context.Context, md pmetri
}
func (e *PulsarMetricsProducer) Close(context.Context) error {
+ if e.producer == nil {
+ return nil
+ }
e.producer.Close()
e.client.Close()
return nil
}
+func (e *PulsarMetricsProducer) start(_ context.Context, _ component.Host) error {
+ client, producer, err := newPulsarProducer(e.cfg)
+ if err != nil {
+ return err
+ }
+ e.client = client
+ e.producer = producer
+ return nil
+}
+
type PulsarLogsProducer struct {
+ cfg Config
client pulsar.Client
producer pulsar.Producer
topic string
@@ -116,11 +146,24 @@ func (e *PulsarLogsProducer) logsDataPusher(ctx context.Context, ld plog.Logs) e
}
func (e *PulsarLogsProducer) Close(context.Context) error {
+ if e.producer == nil {
+ return nil
+ }
e.producer.Close()
e.client.Close()
return nil
}
+func (e *PulsarLogsProducer) start(_ context.Context, _ component.Host) error {
+ client, producer, err := newPulsarProducer(e.cfg)
+ if err != nil {
+ return err
+ }
+ e.client = client
+ e.producer = producer
+ return nil
+}
+
func newPulsarProducer(config Config) (pulsar.Client, pulsar.Producer, error) {
options := config.clientOptions()
@@ -146,14 +189,9 @@ func newMetricsExporter(config Config, set exporter.CreateSettings, marshalers m
if marshaler == nil {
return nil, errUnrecognizedEncoding
}
- client, producer, err := newPulsarProducer(config)
- if err != nil {
- return nil, err
- }
return &PulsarMetricsProducer{
- client: client,
- producer: producer,
+ cfg: config,
topic: config.Topic,
marshaler: marshaler,
logger: set.Logger,
@@ -166,13 +204,8 @@ func newTracesExporter(config Config, set exporter.CreateSettings, marshalers ma
if marshaler == nil {
return nil, errUnrecognizedEncoding
}
- client, producer, err := newPulsarProducer(config)
- if err != nil {
- return nil, err
- }
return &PulsarTracesProducer{
- client: client,
- producer: producer,
+ cfg: config,
topic: config.Topic,
marshaler: marshaler,
logger: set.Logger,
@@ -184,14 +217,9 @@ func newLogsExporter(config Config, set exporter.CreateSettings, marshalers map[
if marshaler == nil {
return nil, errUnrecognizedEncoding
}
- client, producer, err := newPulsarProducer(config)
- if err != nil {
- return nil, err
- }
return &PulsarLogsProducer{
- client: client,
- producer: producer,
+ cfg: config,
topic: config.Topic,
marshaler: marshaler,
logger: set.Logger,
diff --git a/exporter/pulsarexporter/pulsar_exporter_test.go b/exporter/pulsarexporter/pulsar_exporter_test.go
index beb049ebc541..e126545c214c 100644
--- a/exporter/pulsarexporter/pulsar_exporter_test.go
+++ b/exporter/pulsarexporter/pulsar_exporter_test.go
@@ -59,7 +59,7 @@ func Test_tracerPublisher_marshaler_err(t *testing.T) {
producer := PulsarTracesProducer{client: nil, producer: mProducer, marshaler: &customTraceMarshaler{encoding: "unknown"}}
err := producer.tracesPusher(context.Background(), testdata.GenerateTracesManySpansSameResource(10))
- assert.NotNil(t, err)
+ assert.Error(t, err)
assert.True(t, consumererror.IsPermanent(err))
}
diff --git a/extension/httpforwarder/Makefile b/exporter/rabbitmqexporter/Makefile
similarity index 100%
rename from extension/httpforwarder/Makefile
rename to exporter/rabbitmqexporter/Makefile
diff --git a/exporter/rabbitmqexporter/README.md b/exporter/rabbitmqexporter/README.md
new file mode 100644
index 000000000000..a396f98427fa
--- /dev/null
+++ b/exporter/rabbitmqexporter/README.md
@@ -0,0 +1,46 @@
+# RabbitMQ Exporter
+
+| Status | |
+| ------------- |-----------|
+| Stability | [development]: traces, metrics, logs |
+| Distributions | [] |
+| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Frabbitmq%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Frabbitmq) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Frabbitmq%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Frabbitmq) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@swar8080](https://www.github.com/swar8080) |
+
+[development]: https://github.com/open-telemetry/opentelemetry-collector#development
+
+
+Exports metrics, traces, and logs to [RabbitMQ](https://www.rabbitmq.com/) using the AMQP 0.9.1 protocol
+
+## Getting Started
+
+The following settings can be configured:
+- `connection`:
+ - `endpoint` (required, ex = amqp://localhost:5672): Endpoint to connect to RabbitMQ
+ - `vhost` (optional): The RabbitMQ [virtual host](https://www.rabbitmq.com/docs/vhosts) to connect to
+ - `auth`:
+ - `sasl`: Configuration if using SASL PLAIN authentication
+ - `username` (required): username for authentication
+ - `password` (required): password for authentication
+ - `tls` (optional): TODO, need to add this
+ - `routing`:
+ - `routing_key` (default = otlp_spans for traces, otlp_metrics for metrics, otlp_logs for logs): Routing key used to route exported messages to RabbitMQ consumers
+ - `durable` (default = true): Whether to instruct RabbitMQ to make messages [durable](https://www.rabbitmq.com/docs/queues#durability) by writing to disk
+ - `message_body_encoding`: (default = "otlp_proto"): The encoding of telemetry sent to RabbitMQ
+ - `otlp_proto`: payload is Protobuf serialized from `ExportTraceServiceRequest` if set as a traces exporter or `ExportMetricsServiceRequest` for metrics or `ExportLogsServiceRequest` for logs.
+ - `otlp_json`: ** EXPERIMENTAL ** payload is JSON serialized from `ExportTraceServiceRequest` if set as a traces exporter or `ExportMetricsServiceRequest` for metrics or `ExportLogsServiceRequest` for logs.
+ - `retry_on_failure`:
+ - `enabled` (default = false)
+
+Example config:
+
+```yaml
+exporters:
+ rabbitmq:
+ connection:
+ endpoint: amqp://localhost:5672
+ auth:
+ sasl:
+ username: user
+ password: pass
+```
\ No newline at end of file
diff --git a/exporter/rabbitmqexporter/config.go b/exporter/rabbitmqexporter/config.go
new file mode 100644
index 000000000000..9aad0213d7a5
--- /dev/null
+++ b/exporter/rabbitmqexporter/config.go
@@ -0,0 +1,43 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package rabbitmqexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter"
+
+import (
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
+)
+
+type Config struct {
+ Connection ConnectionConfig `mapstructure:"connection"`
+ Routing RoutingConfig `mapstructure:"routing"`
+ MessageBodyEncoding string `mapstructure:"message_body_encoding"`
+ Durable bool `mapstructure:"durable"`
+ RetrySettings configretry.BackOffConfig `mapstructure:"retry_on_failure"`
+}
+
+type ConnectionConfig struct {
+ Endpoint string `mapstructure:"endpoint"`
+ VHost string `mapstructure:"vhost"`
+ Auth AuthConfig `mapstructure:"auth"`
+}
+
+type RoutingConfig struct {
+ RoutingKey string `mapstructure:"routing_key"`
+}
+
+type AuthConfig struct {
+ SASL SASLConfig `mapstructure:"sasl"`
+}
+
+type SASLConfig struct {
+ Username string `mapstructure:"username"`
+ Password string `mapstructure:"password"`
+}
+
+var _ component.Config = (*Config)(nil)
+
+// Validate checks if the exporter configuration is valid
+func (cfg *Config) Validate() error {
+ return nil
+}
diff --git a/exporter/rabbitmqexporter/config_test.go b/exporter/rabbitmqexporter/config_test.go
new file mode 100644
index 000000000000..22cb41018d68
--- /dev/null
+++ b/exporter/rabbitmqexporter/config_test.go
@@ -0,0 +1,91 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package rabbitmqexporter
+
+import (
+ "path/filepath"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter/internal/metadata"
+)
+
+func TestLoadConfig(t *testing.T) {
+ t.Parallel()
+
+ cm, err := confmaptest.LoadConf(filepath.Join("testdata", "test-config.yaml"))
+ require.NoError(t, err)
+
+ tests := []struct {
+ id component.ID
+ expected component.Config
+ }{
+ {
+ id: component.NewIDWithName(metadata.Type, ""),
+ expected: createDefaultConfig().(*Config),
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "all_fields"),
+ expected: &Config{
+ Connection: ConnectionConfig{
+ Endpoint: "amqp://localhost:5672",
+ VHost: "vhost1",
+ Auth: AuthConfig{
+ SASL: SASLConfig{
+ Username: "user",
+ Password: "pass",
+ },
+ },
+ },
+ Routing: RoutingConfig{
+ RoutingKey: "custom_routing_key",
+ },
+ MessageBodyEncoding: "otlp_json",
+ Durable: false,
+ RetrySettings: configretry.BackOffConfig{
+ Enabled: true,
+ },
+ },
+ },
+ {
+ id: component.NewIDWithName(metadata.Type, "mandatory_fields"),
+ expected: &Config{
+ Connection: ConnectionConfig{
+ Endpoint: "amqp://localhost:5672",
+ VHost: "",
+ Auth: AuthConfig{
+ SASL: SASLConfig{
+ Username: "user",
+ Password: "pass",
+ },
+ },
+ },
+ MessageBodyEncoding: "otlp_proto",
+ Durable: true,
+ RetrySettings: configretry.BackOffConfig{
+ Enabled: false,
+ },
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.id.String(), func(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ sub, err := cm.Sub(tt.id.String())
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ assert.NoError(t, component.ValidateConfig(cfg))
+ assert.Equal(t, tt.expected, cfg)
+ })
+ }
+}
diff --git a/exporter/rabbitmqexporter/doc.go b/exporter/rabbitmqexporter/doc.go
new file mode 100644
index 000000000000..52181ceff162
--- /dev/null
+++ b/exporter/rabbitmqexporter/doc.go
@@ -0,0 +1,7 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+//go:generate mdatagen metadata.yaml
+
+// Package rabbitmqexporter exports telemetry to RabbitMQ using the AMQP 0.9.1 protocol
+package rabbitmqexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter"
diff --git a/exporter/rabbitmqexporter/factory.go b/exporter/rabbitmqexporter/factory.go
new file mode 100644
index 000000000000..23804efdf432
--- /dev/null
+++ b/exporter/rabbitmqexporter/factory.go
@@ -0,0 +1,101 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package rabbitmqexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter"
+
+import (
+ "context"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
+ "go.opentelemetry.io/collector/consumer"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exporterhelper"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter/internal/metadata"
+)
+
+const (
+ defaultEncoding = "otlp_proto"
+)
+
+func NewFactory() exporter.Factory {
+ return exporter.NewFactory(
+ metadata.Type,
+ createDefaultConfig,
+ exporter.WithLogs(createLogsExporter, metadata.LogsStability),
+ exporter.WithMetrics(createMetricsExporter, metadata.TracesStability),
+ exporter.WithTraces(createTracesExporter, metadata.LogsStability),
+ )
+}
+
+func createDefaultConfig() component.Config {
+ retrySettings := configretry.BackOffConfig{
+ Enabled: false,
+ }
+ return &Config{
+ MessageBodyEncoding: defaultEncoding,
+ Durable: true,
+ RetrySettings: retrySettings,
+ }
+}
+
+func createTracesExporter(
+ ctx context.Context,
+ set exporter.CreateSettings,
+ cfg component.Config,
+) (exporter.Traces, error) {
+ config := cfg.(*Config)
+ r := newRabbitmqExporter(config, set.TelemetrySettings)
+
+ return exporterhelper.NewTracesExporter(
+ ctx,
+ set,
+ cfg,
+ r.pushTraces,
+ exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
+ exporterhelper.WithStart(r.start),
+ exporterhelper.WithShutdown(r.shutdown),
+ exporterhelper.WithRetry(config.RetrySettings),
+ )
+}
+
+func createMetricsExporter(
+ ctx context.Context,
+ set exporter.CreateSettings,
+ cfg component.Config,
+) (exporter.Metrics, error) {
+ config := (cfg.(*Config))
+ r := newRabbitmqExporter(config, set.TelemetrySettings)
+
+ return exporterhelper.NewMetricsExporter(
+ ctx,
+ set,
+ cfg,
+ r.pushMetrics,
+ exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
+ exporterhelper.WithStart(r.start),
+ exporterhelper.WithShutdown(r.shutdown),
+ exporterhelper.WithRetry(config.RetrySettings),
+ )
+}
+
+func createLogsExporter(
+ ctx context.Context,
+ set exporter.CreateSettings,
+ cfg component.Config,
+) (exporter.Logs, error) {
+ config := (cfg.(*Config))
+ r := newRabbitmqExporter(config, set.TelemetrySettings)
+
+ return exporterhelper.NewLogsExporter(
+ ctx,
+ set,
+ cfg,
+ r.pushLogs,
+ exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
+ exporterhelper.WithStart(r.start),
+ exporterhelper.WithShutdown(r.shutdown),
+ exporterhelper.WithRetry(config.RetrySettings),
+ )
+}
diff --git a/exporter/rabbitmqexporter/factory_test.go b/exporter/rabbitmqexporter/factory_test.go
new file mode 100644
index 000000000000..a5787dd6881b
--- /dev/null
+++ b/exporter/rabbitmqexporter/factory_test.go
@@ -0,0 +1,47 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package rabbitmqexporter
+
+import (
+ "context"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+)
+
+func TestCreateDefaultConfig(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+ assert.NotNil(t, cfg, "failed to create default config")
+ assert.NoError(t, componenttest.CheckConfigStruct(cfg))
+}
+
+func TestCreateTracesExporter(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ te, err := factory.CreateTracesExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ assert.NoError(t, err)
+ assert.NotNil(t, te)
+}
+
+func TestCreateMetricsExporter(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ te, err := factory.CreateMetricsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ assert.NoError(t, err)
+ assert.NotNil(t, te)
+}
+
+func TestCreateLogsExporter(t *testing.T) {
+ factory := NewFactory()
+ cfg := factory.CreateDefaultConfig()
+
+ te, err := factory.CreateLogsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ assert.NoError(t, err)
+ assert.NotNil(t, te)
+}
diff --git a/exporter/rabbitmqexporter/generated_component_test.go b/exporter/rabbitmqexporter/generated_component_test.go
new file mode 100644
index 000000000000..78deb8976565
--- /dev/null
+++ b/exporter/rabbitmqexporter/generated_component_test.go
@@ -0,0 +1,101 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package rabbitmqexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/rabbitmqexporter/go.mod b/exporter/rabbitmqexporter/go.mod
new file mode 100644
index 000000000000..32b372534e1f
--- /dev/null
+++ b/exporter/rabbitmqexporter/go.mod
@@ -0,0 +1,59 @@
+module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter
+
+go 1.21
+
+require (
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+)
+
+require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/golang/protobuf v1.5.3 // indirect
+ github.com/google/uuid v1.6.0 // indirect
+ github.com/json-iterator/go v1.1.12 // 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.1.1 // indirect
+ github.com/mitchellh/copystructure v1.2.0 // 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/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ go.uber.org/multierr v1.11.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
+ golang.org/x/text v0.14.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
+ gopkg.in/yaml.v3 v3.0.1 // indirect
+)
diff --git a/exporter/rabbitmqexporter/go.sum b/exporter/rabbitmqexporter/go.sum
new file mode 100644
index 000000000000..affe818ecd46
--- /dev/null
+++ b/exporter/rabbitmqexporter/go.sum
@@ -0,0 +1,152 @@
+github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/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/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
+github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
+github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
+github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
+github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
+github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+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/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
+github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
+github.com/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/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.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
+github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
+github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
+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/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
+github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
+github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
+github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
+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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
+go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
+go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
+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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
+golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
+google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
+google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
+gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/exporter/rabbitmqexporter/internal/metadata/generated_status.go b/exporter/rabbitmqexporter/internal/metadata/generated_status.go
new file mode 100644
index 000000000000..e52726f1f42b
--- /dev/null
+++ b/exporter/rabbitmqexporter/internal/metadata/generated_status.go
@@ -0,0 +1,27 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package metadata
+
+import (
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("rabbitmq")
+)
+
+const (
+ TracesStability = component.StabilityLevelDevelopment
+ MetricsStability = component.StabilityLevelDevelopment
+ LogsStability = component.StabilityLevelDevelopment
+)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/rabbitmq")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/rabbitmq")
+}
diff --git a/exporter/rabbitmqexporter/metadata.yaml b/exporter/rabbitmqexporter/metadata.yaml
new file mode 100644
index 000000000000..caca7005d662
--- /dev/null
+++ b/exporter/rabbitmqexporter/metadata.yaml
@@ -0,0 +1,15 @@
+type: rabbitmq
+scope_name: otelcol/rabbitmq
+
+status:
+ class: exporter
+ stability:
+ development: [traces, metrics, logs]
+ distributions: []
+ codeowners:
+ active: [swar8080]
+
+tests:
+ skip_lifecycle: true
+ skip_shutdown: false
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/rabbitmqexporter/package_test.go b/exporter/rabbitmqexporter/package_test.go
new file mode 100644
index 000000000000..a47186870311
--- /dev/null
+++ b/exporter/rabbitmqexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package rabbitmqexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/rabbitmqexporter/rabbitmq_exporter.go b/exporter/rabbitmqexporter/rabbitmq_exporter.go
new file mode 100644
index 000000000000..0c4d326a1e47
--- /dev/null
+++ b/exporter/rabbitmqexporter/rabbitmq_exporter.go
@@ -0,0 +1,54 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package rabbitmqexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/rabbitmqexporter"
+
+import (
+ "context"
+
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+type rabbitmqExporter struct {
+ config *Config
+ settings component.TelemetrySettings
+}
+
+func newRabbitmqExporter(cfg *Config, set component.TelemetrySettings) *rabbitmqExporter {
+ return &rabbitmqExporter{
+ config: cfg,
+ settings: set,
+ }
+}
+
+func (s *rabbitmqExporter) start(_ context.Context, _ component.Host) error {
+
+ // To Be Implemented
+ return nil
+}
+
+func (s *rabbitmqExporter) pushTraces(_ context.Context, _ ptrace.Traces) error {
+
+ // To Be Implemented
+ return nil
+}
+
+func (s *rabbitmqExporter) pushMetrics(_ context.Context, _ pmetric.Metrics) error {
+
+ // To Be Implemented
+ return nil
+}
+
+func (s *rabbitmqExporter) pushLogs(_ context.Context, _ plog.Logs) error {
+
+ // To Be Implemented
+ return nil
+}
+
+func (s *rabbitmqExporter) shutdown(_ context.Context) error {
+ // To Be Implemented
+ return nil
+}
diff --git a/exporter/rabbitmqexporter/testdata/test-config.yaml b/exporter/rabbitmqexporter/testdata/test-config.yaml
new file mode 100644
index 000000000000..18ea1c1f6d0a
--- /dev/null
+++ b/exporter/rabbitmqexporter/testdata/test-config.yaml
@@ -0,0 +1,22 @@
+rabbitmq/all_fields:
+ connection:
+ endpoint: amqp://localhost:5672
+ vhost: vhost1
+ auth:
+ sasl:
+ username: user
+ password: pass
+ routing:
+ routing_key: custom_routing_key
+ message_body_encoding: otlp_json
+ durable: false
+ retry_on_failure:
+ enabled: true
+
+rabbitmq/mandatory_fields:
+ connection:
+ endpoint: amqp://localhost:5672
+ auth:
+ sasl:
+ username: user
+ password: pass
diff --git a/exporter/sapmexporter/README.md b/exporter/sapmexporter/README.md
index 5dffdac1d775..e6dc89e9875e 100644
--- a/exporter/sapmexporter/README.md
+++ b/exporter/sapmexporter/README.md
@@ -4,15 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces |
-| Distributions | [contrib], [aws], [observiq], [splunk] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fsapm%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fsapm) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fsapm%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fsapm) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax), [@atoulme](https://www.github.com/atoulme) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[splunk]: https://github.com/signalfx/splunk-otel-collector
The SAPM exporter builds on the Jaeger proto and adds additional batching on top. This allows
diff --git a/exporter/sapmexporter/config.go b/exporter/sapmexporter/config.go
index 8f56221617b0..0c34eb7d23df 100644
--- a/exporter/sapmexporter/config.go
+++ b/exporter/sapmexporter/config.go
@@ -10,6 +10,7 @@ import (
sapmclient "github.com/signalfx/sapm-proto/client"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk"
@@ -50,7 +51,7 @@ type Config struct {
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
}
func (c *Config) Validate() error {
diff --git a/exporter/sapmexporter/config_test.go b/exporter/sapmexporter/config_test.go
index a3c9de3d88ca..baf3e96463d6 100644
--- a/exporter/sapmexporter/config_test.go
+++ b/exporter/sapmexporter/config_test.go
@@ -12,6 +12,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -51,7 +52,7 @@ func TestLoadConfig(t *testing.T) {
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
diff --git a/exporter/sapmexporter/exporter.go b/exporter/sapmexporter/exporter.go
index 7767474aecc7..878d0267fce3 100644
--- a/exporter/sapmexporter/exporter.go
+++ b/exporter/sapmexporter/exporter.go
@@ -68,7 +68,7 @@ func newSAPMTracesExporter(cfg *Config, set exporter.CreateSettings) (exporter.T
se.pushTraceData,
exporterhelper.WithShutdown(se.Shutdown),
exporterhelper.WithQueue(cfg.QueueSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithTimeout(cfg.TimeoutSettings),
)
diff --git a/exporter/sapmexporter/exporter_test.go b/exporter/sapmexporter/exporter_test.go
index f52079884c9f..846380839960 100644
--- a/exporter/sapmexporter/exporter_test.go
+++ b/exporter/sapmexporter/exporter_test.go
@@ -39,7 +39,7 @@ func TestCreateTracesExporter(t *testing.T) {
params := exportertest.NewNopCreateSettings()
te, err := newSAPMTracesExporter(cfg, params)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, te, "failed to create trace exporter")
assert.NoError(t, te.Shutdown(context.Background()), "trace exporter shutdown failed")
@@ -199,7 +199,7 @@ func TestSAPMClientTokenUsageAndErrorMarshalling(t *testing.T) {
params := exportertest.NewNopCreateSettings()
se, err := newSAPMExporter(cfg, params)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, se, "failed to create trace exporter")
trace, testTraceErr := buildTestTrace()
@@ -315,7 +315,7 @@ func TestCompression(t *testing.T) {
params := exportertest.NewNopCreateSettings()
se, err := newSAPMExporter(cfg, params)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, se, "failed to create trace exporter")
trace, testTraceErr := buildTestTrace()
diff --git a/exporter/sapmexporter/factory.go b/exporter/sapmexporter/factory.go
index ab1069c60db7..58ef76f720f2 100644
--- a/exporter/sapmexporter/factory.go
+++ b/exporter/sapmexporter/factory.go
@@ -7,6 +7,7 @@ import (
"context"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -33,7 +34,7 @@ func createDefaultConfig() component.Config {
AccessTokenPassthrough: true,
},
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
}
}
diff --git a/exporter/sapmexporter/factory_test.go b/exporter/sapmexporter/factory_test.go
index ceb401881553..f06670f6c156 100644
--- a/exporter/sapmexporter/factory_test.go
+++ b/exporter/sapmexporter/factory_test.go
@@ -21,7 +21,7 @@ func TestCreateDefaultConfig(t *testing.T) {
func TestCreateExporter(t *testing.T) {
factory := NewFactory()
- assert.Equal(t, "sapm", string(factory.Type()))
+ assert.Equal(t, "sapm", factory.Type().String())
cfg := factory.CreateDefaultConfig()
eCfg := cfg.(*Config)
@@ -29,7 +29,7 @@ func TestCreateExporter(t *testing.T) {
params := exportertest.NewNopCreateSettings()
te, err := factory.CreateTracesExporter(context.Background(), params, eCfg)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, te, "failed to create trace exporter")
me, err := factory.CreateMetricsExporter(context.Background(), params, eCfg)
diff --git a/exporter/sapmexporter/generated_component_test.go b/exporter/sapmexporter/generated_component_test.go
new file mode 100644
index 000000000000..8a15e3679afc
--- /dev/null
+++ b/exporter/sapmexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package sapmexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/sapmexporter/go.mod b/exporter/sapmexporter/go.mod
index ddc176d0e076..04bc40486f12 100644
--- a/exporter/sapmexporter/go.mod
+++ b/exporter/sapmexporter/go.mod
@@ -1,67 +1,73 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sapmexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/jaegertracing/jaeger v1.41.0
- github.com/klauspost/compress v1.17.2
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.89.0
- github.com/signalfx/sapm-proto v0.13.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/cenkalti/backoff/v4 v4.3.0
+ github.com/jaegertracing/jaeger v1.55.0
+ github.com/klauspost/compress v1.17.8
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/jaeger v0.98.0
+ github.com/signalfx/sapm-proto v0.14.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
github.com/apache/thrift v0.19.0 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0 // indirect
- github.com/opentracing/opentracing-go v1.2.0 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/uber/jaeger-client-go v2.30.0+incompatible // indirect
- github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0 // indirect
+ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.49.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/semconv v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.uber.org/atomic v1.10.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/collector/semconv v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/sapmexporter/go.sum b/exporter/sapmexporter/go.sum
index 90274af802c7..bfe5e6e0cf40 100644
--- a/exporter/sapmexporter/go.sum
+++ b/exporter/sapmexporter/go.sum
@@ -1,38 +1,39 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM=
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/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/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/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -54,32 +55,31 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/jaegertracing/jaeger v1.41.0 h1:vVNky8dP46M2RjGaZ7qRENqylW+tBFay3h57N16Ip7M=
-github.com/jaegertracing/jaeger v1.41.0/go.mod h1:SIkAT75iVmA9U+mESGYuMH6UQv6V9Qy4qxo0lwfCQAc=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/jaegertracing/jaeger v1.55.0 h1:IJHzKb2B9EYQyKlE7VSoKzNP3emHeqZWnWrKj+kYzzs=
+github.com/jaegertracing/jaeger v1.55.0/go.mod h1:S884Mz8H+iGI8Ealq6sM9QzSOeU6P+nbFkYw7uww8CI=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -87,79 +87,81 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
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/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/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+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/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
-github.com/signalfx/sapm-proto v0.13.0 h1:yEkp1+MAU4vZvnJMp56uhVlRjlvCK7KQjBg0g2Apw8k=
-github.com/signalfx/sapm-proto v0.13.0/go.mod h1:C72HjeCW5v0Llk6pIVJ/ZH8A5GbiZpCCSkE1dSlpWxY=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.49.0 h1:ToNTdK4zSnPVJmh698mGFkDor9wBI/iGaJy5dbH1EgI=
+github.com/prometheus/common v0.49.0/go.mod h1:Kxm+EULxRbUkjGU6WFsQqo3ORzB4tyKvlWFOE9mB2sE=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
+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/signalfx/sapm-proto v0.14.0 h1:KWh3I5E4EkelB19aP1/54Ik8khSioC/RVRW/riOfRGg=
+github.com/signalfx/sapm-proto v0.14.0/go.mod h1:Km6PskZh966cqNoUn3AmRyGRix5VfwnxVBvn2vjRC9U=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/uber/jaeger-client-go v2.30.0+incompatible h1:D6wyKGCecFaSRUpo8lCVbaOOb6ThwMmTEbhRwtKR97o=
-github.com/uber/jaeger-client-go v2.30.0+incompatible/go.mod h1:WVhlPFC8FDjOFMMWRy2pZqQJSXxYSwNYOkTr/Z6d3Kk=
-github.com/uber/jaeger-lib v2.4.1+incompatible h1:td4jdvLcExb4cBISKIpHuGoVXh+dVKhn2Um6rjCsSsg=
-github.com/uber/jaeger-lib v2.4.1+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
-go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -178,8 +180,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
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=
@@ -190,8 +192,8 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -213,15 +215,15 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
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=
@@ -233,11 +235,11 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/exporter/sapmexporter/internal/metadata/generated_status.go b/exporter/sapmexporter/internal/metadata/generated_status.go
index b623b108ae12..17fa827679d7 100644
--- a/exporter/sapmexporter/internal/metadata/generated_status.go
+++ b/exporter/sapmexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("sapm")
)
const (
- Type = "sapm"
TracesStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/sapm")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/sapm")
+}
diff --git a/exporter/sapmexporter/metadata.yaml b/exporter/sapmexporter/metadata.yaml
index 3df77e18104b..47ae147c81d1 100644
--- a/exporter/sapmexporter/metadata.yaml
+++ b/exporter/sapmexporter/metadata.yaml
@@ -1,9 +1,14 @@
type: sapm
+scope_name: otelcol/sapm
status:
class: exporter
stability:
beta: [traces]
- distributions: [contrib, splunk, observiq, aws]
+ distributions: [contrib]
codeowners:
active: [dmitryax, atoulme]
+
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/sapmexporter/package_test.go b/exporter/sapmexporter/package_test.go
new file mode 100644
index 000000000000..14ca4f36f219
--- /dev/null
+++ b/exporter/sapmexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package sapmexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/sentryexporter/factory_test.go b/exporter/sentryexporter/factory_test.go
index c16652a2ebd5..1827e3ad9750 100644
--- a/exporter/sentryexporter/factory_test.go
+++ b/exporter/sentryexporter/factory_test.go
@@ -23,14 +23,14 @@ func TestCreateDefaultConfig(t *testing.T) {
func TestCreateExporter(t *testing.T) {
factory := NewFactory()
- assert.Equal(t, metadata.Type, string(factory.Type()))
+ assert.Equal(t, metadata.Type, factory.Type())
cfg := factory.CreateDefaultConfig()
eCfg := cfg.(*Config)
params := exportertest.NewNopCreateSettings()
te, err := factory.CreateTracesExporter(context.Background(), params, eCfg)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.NotNil(t, te, "failed to create trace exporter")
me, err := factory.CreateMetricsExporter(context.Background(), params, eCfg)
diff --git a/exporter/sentryexporter/generated_component_test.go b/exporter/sentryexporter/generated_component_test.go
new file mode 100644
index 000000000000..e22a7b4b5e9b
--- /dev/null
+++ b/exporter/sentryexporter/generated_component_test.go
@@ -0,0 +1,126 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package sentryexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/sentryexporter/go.mod b/exporter/sentryexporter/go.mod
index e3736907ed1e..77591cd4e5a0 100644
--- a/exporter/sentryexporter/go.mod
+++ b/exporter/sentryexporter/go.mod
@@ -1,53 +1,64 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sentryexporter
-go 1.20
+go 1.21
require (
- github.com/getsentry/sentry-go v0.25.0
+ github.com/getsentry/sentry-go v0.27.0
github.com/google/go-cmp v0.6.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configretry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/consumer v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/sentryexporter/go.sum b/exporter/sentryexporter/go.sum
index 70111f98bdf8..900caf06e600 100644
--- a/exporter/sentryexporter/go.sum
+++ b/exporter/sentryexporter/go.sum
@@ -1,58 +1,34 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI=
-github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
+github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps=
+github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY=
github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -61,15 +37,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -78,106 +53,93 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ
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/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
+github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
+github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -185,38 +147,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/sentryexporter/internal/metadata/generated_status.go b/exporter/sentryexporter/internal/metadata/generated_status.go
index c524afd062e5..3928cb23fcb9 100644
--- a/exporter/sentryexporter/internal/metadata/generated_status.go
+++ b/exporter/sentryexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("sentry")
)
const (
- Type = "sentry"
TracesStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/sentry")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/sentry")
+}
diff --git a/exporter/sentryexporter/metadata.yaml b/exporter/sentryexporter/metadata.yaml
index 74cf89d6984b..83375983bd64 100644
--- a/exporter/sentryexporter/metadata.yaml
+++ b/exporter/sentryexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: sentry
+scope_name: otelcol/sentry
status:
class: exporter
@@ -7,3 +8,7 @@ status:
distributions: [contrib]
codeowners:
active: [AbhiPrasad]
+
+
+tests:
+ expect_consumer_error: true
\ No newline at end of file
diff --git a/exporter/sentryexporter/package_test.go b/exporter/sentryexporter/package_test.go
new file mode 100644
index 000000000000..7ee7fa0393fa
--- /dev/null
+++ b/exporter/sentryexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package sentryexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/sentryexporter/sentry_exporter_test.go b/exporter/sentryexporter/sentry_exporter_test.go
index 0506e88c379e..86f0b50b84b9 100644
--- a/exporter/sentryexporter/sentry_exporter_test.go
+++ b/exporter/sentryexporter/sentry_exporter_test.go
@@ -724,7 +724,7 @@ func TestPushTraceData(t *testing.T) {
}
err := s.pushTraceData(context.Background(), test.td)
- assert.Nil(t, err)
+ assert.NoError(t, err)
assert.Equal(t, test.called, transport.called)
})
}
diff --git a/exporter/signalfxexporter/README.md b/exporter/signalfxexporter/README.md
index d194857efd01..d07b5b48a4dc 100644
--- a/exporter/signalfxexporter/README.md
+++ b/exporter/signalfxexporter/README.md
@@ -4,15 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [aws], [observiq], [splunk] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fsignalfx%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fsignalfx) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fsignalfx%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fsignalfx) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@dmitryax](https://www.github.com/dmitryax), [@crobert-1](https://www.github.com/crobert-1) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[aws]: https://github.com/aws-observability/aws-otel-collector
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[splunk]: https://github.com/signalfx/splunk-otel-collector
This exporter can be used to send metrics, events, and trace correlation to SignalFx.
@@ -84,8 +81,12 @@ The following configuration options can also be configured:
- `disable_default_translation_rules` (default = `false`): Disable default translation
of the OTel metrics to a SignalFx compatible format. The default translation rules are
defined in `translation/constants.go`.
-- `timeout` (default = 5s): Amount of time to wait for a send operation to
+- `timeout` (default = 10s): Amount of time to wait for a send operation to
complete.
+- `http2_read_idle_timeout` (default = 10s): Send a ping frame for a health check if the connection has been idle for the configured value.
+ 0s means http/2 health check will be disabled.
+- `http2_ping_timeout` (default = 10s): Triggered by `http2_read_idle_timeout`; When there's no response to the ping within the configured value,
+ the connection will be closed. If this value is set to 0, it will default to 15s.
- `headers` (no default): Headers to pass in the payload.
- `max_idle_conns` (default = 100): The maximum idle HTTP connections the client can keep open.
- `max_idle_conns_per_host` (default = 100): The maximum idle HTTP connections the client can keep open per host.
@@ -141,7 +142,8 @@ will be replaced with a `_`.
api_tls:
ca_file: "/etc/opt/certs/ca.pem"
```
-- `drop_histogram_buckets`: (default = `false`) if set to true, histogram buckets will not be translated into datapoints with `_bucket` suffix but will be dropped instead, only datapoints with `_sum`, `_count`, `_min` (optional) and `_max` (optional) suffixes will be sent.
+- `drop_histogram_buckets`: (default = `false`) if set to true, histogram buckets will not be translated into datapoints with `_bucket` suffix but will be dropped instead, only datapoints with `_sum`, `_count`, `_min` (optional) and `_max` (optional) suffixes will be sent. Please note that this option does not apply to histograms sent in OTLP format with `send_otlp_histograms` enabled.
+- `send_otlp_histograms`: (default: `false`) if set to true, any histogram metrics receiver by the exporter will be sent to Splunk Observability backend in OTLP format without conversion to SignalFx format. This can only be enabled if the Splunk Observability environment (realm) has the new Histograms feature rolled out. Please note that histograms sent in OTLP format do not apply to the exporter configurations `include_metrics` and `exclude_metrics`.
In addition, this exporter offers queued retry which is enabled by default.
Information about queued retry configuration parameters can be found
[here](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md).
diff --git a/exporter/signalfxexporter/config.go b/exporter/signalfxexporter/config.go
index b8d14217d7a6..d7b27608c9b2 100644
--- a/exporter/signalfxexporter/config.go
+++ b/exporter/signalfxexporter/config.go
@@ -11,6 +11,7 @@ import (
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -49,9 +50,9 @@ var _ confmap.Unmarshaler = (*Config)(nil)
// Config defines configuration for SignalFx exporter.
type Config struct {
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
- confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
+ confighttp.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
// AccessToken is the authentication token provided by SignalFx.
AccessToken configopaque.String `mapstructure:"access_token"`
@@ -67,7 +68,7 @@ type Config struct {
// ingest_tls needs to be set if the exporter's IngestURL is pointing to a signalfx receiver
// with TLS enabled and using a self-signed certificate where its CA is not loaded in the system cert pool.
- IngestTLSSettings configtls.TLSClientSetting `mapstructure:"ingest_tls,omitempty"`
+ IngestTLSSettings configtls.ClientConfig `mapstructure:"ingest_tls,omitempty"`
// APIURL is the destination to where SignalFx metadata will be sent. This
// value takes precedence over the value of Realm
@@ -75,7 +76,7 @@ type Config struct {
// api_tls needs to be set if the exporter's APIURL is pointing to a httforwarder extension
// with TLS enabled and using a self-signed certificate where its CA is not loaded in the system cert pool.
- APITLSSettings configtls.TLSClientSetting `mapstructure:"api_tls,omitempty"`
+ APITLSSettings configtls.ClientConfig `mapstructure:"api_tls,omitempty"`
// Whether to log datapoints dispatched to Splunk Observability Cloud
LogDataPoints bool `mapstructure:"log_data_points"`
@@ -111,7 +112,7 @@ type Config struct {
// ExcludeMetrics defines dpfilter.MetricFilters that will determine metrics to be
// excluded from sending to SignalFx backend. If translations enabled with
- // TranslationRules options, the exclusion will be applie on translated metrics.
+ // TranslationRules options, the exclusion will be applied on translated metrics.
ExcludeMetrics []dpfilters.MetricFilter `mapstructure:"exclude_metrics"`
// IncludeMetrics defines dpfilter.MetricFilters to override exclusion any of metric.
@@ -133,6 +134,10 @@ type Config struct {
// Whether to drop histogram bucket metrics dispatched to Splunk Observability.
// Default value is set to false.
DropHistogramBuckets bool `mapstructure:"drop_histogram_buckets"`
+
+ // Whether to send histogram metrics in OTLP format to Splunk Observability.
+ // Default value is set to false.
+ SendOTLPHistograms bool `mapstructure:"send_otlp_histograms"`
}
type DimensionClientConfig struct {
@@ -201,7 +206,7 @@ func (cfg *Config) Unmarshal(componentParser *confmap.Conf) error {
return nil
}
- if err := componentParser.Unmarshal(cfg); err != nil {
+ if err := componentParser.Unmarshal(cfg, confmap.WithIgnoreUnused()); err != nil {
return err
}
@@ -219,7 +224,7 @@ func (cfg *Config) Validate() error {
` "ingest_url" and "api_url" should be explicitly set`)
}
- if cfg.HTTPClientSettings.Timeout < 0 {
+ if cfg.ClientConfig.Timeout < 0 {
return errors.New(`cannot have a negative "timeout"`)
}
@@ -241,7 +246,7 @@ func loadConfig(bytes []byte) (Config, error) {
return cfg, err
}
- if err := confmap.NewFromStringMap(data).Unmarshal(&cfg, confmap.WithErrorUnused()); err != nil {
+ if err := confmap.NewFromStringMap(data).Unmarshal(&cfg); err != nil {
return cfg, fmt.Errorf("failed to load default exclude metrics: %w", err)
}
diff --git a/exporter/signalfxexporter/config_test.go b/exporter/signalfxexporter/config_test.go
index 2646ee12cbef..8f135e5b77d3 100644
--- a/exporter/signalfxexporter/config_test.go
+++ b/exporter/signalfxexporter/config_test.go
@@ -15,6 +15,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/confmap"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -47,14 +48,16 @@ func TestLoadConfig(t *testing.T) {
expected: &Config{
AccessToken: "testToken",
Realm: "ap0",
- HTTPClientSettings: confighttp.HTTPClientSettings{
- Timeout: 5 * time.Second,
- Headers: nil,
- MaxIdleConns: &hundred,
- MaxIdleConnsPerHost: &hundred,
- IdleConnTimeout: &idleConnTimeout,
+ ClientConfig: confighttp.ClientConfig{
+ Timeout: 10 * time.Second,
+ Headers: nil,
+ MaxIdleConns: &hundred,
+ MaxIdleConnsPerHost: &hundred,
+ IdleConnTimeout: &idleConnTimeout,
+ HTTP2ReadIdleTimeout: 10 * time.Second,
+ HTTP2PingTimeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 5 * time.Second,
MaxInterval: 30 * time.Second,
@@ -82,7 +85,7 @@ func TestLoadConfig(t *testing.T) {
DeltaTranslationTTL: 3600,
ExcludeProperties: nil,
Correlation: &correlation.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
Timeout: 5 * time.Second,
},
@@ -101,6 +104,7 @@ func TestLoadConfig(t *testing.T) {
},
},
NonAlphanumericDimensionChars: "_-.",
+ SendOTLPHistograms: false,
},
},
{
@@ -108,17 +112,19 @@ func TestLoadConfig(t *testing.T) {
expected: &Config{
AccessToken: "testToken",
Realm: "us1",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 2 * time.Second,
Headers: map[string]configopaque.String{
"added-entry": "added value",
"dot.test": "test",
},
- MaxIdleConns: &seventy,
- MaxIdleConnsPerHost: &seventy,
- IdleConnTimeout: &idleConnTimeout,
+ MaxIdleConns: &seventy,
+ MaxIdleConnsPerHost: &seventy,
+ IdleConnTimeout: &idleConnTimeout,
+ HTTP2ReadIdleTimeout: 10 * time.Second,
+ HTTP2PingTimeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -239,7 +245,7 @@ func TestLoadConfig(t *testing.T) {
},
},
Correlation: &correlation.Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "",
Timeout: 5 * time.Second,
},
@@ -258,6 +264,7 @@ func TestLoadConfig(t *testing.T) {
},
},
NonAlphanumericDimensionChars: "_-.",
+ SendOTLPHistograms: true,
},
},
}
@@ -489,9 +496,9 @@ func TestConfigValidateErrors(t *testing.T) {
{
name: "Negative Timeout",
cfg: &Config{
- Realm: "us0",
- AccessToken: "access_token",
- HTTPClientSettings: confighttp.HTTPClientSettings{Timeout: -1 * time.Second},
+ Realm: "us0",
+ AccessToken: "access_token",
+ ClientConfig: confighttp.ClientConfig{Timeout: -1 * time.Second},
},
},
{
@@ -545,7 +552,7 @@ func TestUnmarshalExcludeMetrics(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- require.NoError(t, tt.cfg.Unmarshal(confmap.NewFromStringMap(map[string]any{})))
+ require.NoError(t, component.UnmarshalConfig(confmap.NewFromStringMap(map[string]any{}), tt.cfg))
assert.Len(t, tt.cfg.ExcludeMetrics, tt.excludeMetricsLen)
})
}
diff --git a/exporter/signalfxexporter/dpclient.go b/exporter/signalfxexporter/dpclient.go
index 350c943459c0..82748947f4be 100644
--- a/exporter/signalfxexporter/dpclient.go
+++ b/exporter/signalfxexporter/dpclient.go
@@ -17,12 +17,20 @@ import (
sfxpb "github.com/signalfx/com_signalfx_metrics_protobuf/model"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/pmetric/pmetricotlp"
"go.uber.org/zap"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/translation"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/utils"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk"
)
+const (
+ contentEncodingHeader = "Content-Encoding"
+ contentTypeHeader = "Content-Type"
+ otlpProtobufContentType = "application/x-protobuf;format=otlp"
+)
+
type sfxClientBase struct {
ingestURL *url.URL
headers map[string]string
@@ -58,6 +66,7 @@ type sfxDPClient struct {
logger *zap.Logger
accessTokenPassthrough bool
converter *translation.MetricsConverter
+ sendOTLPHistograms bool
}
func (s *sfxDPClient) pushMetricsData(
@@ -81,48 +90,55 @@ func (s *sfxDPClient) pushMetricsData(
// All metrics in the pmetric.Metrics will have the same access token because of the BatchPerResourceMetrics.
metricToken := s.retrieveAccessToken(rms.At(0))
+ // export SFx format
sfxDataPoints := s.converter.MetricsToSignalFxV2(md)
- if s.logDataPoints {
- for _, dp := range sfxDataPoints {
- s.logger.Debug("Dispatching SFx datapoint", zap.Stringer("dp", dp))
+ if len(sfxDataPoints) > 0 {
+ droppedCount, err := s.pushMetricsDataForToken(ctx, sfxDataPoints, metricToken)
+ if err != nil {
+ return droppedCount, err
}
}
- return s.pushMetricsDataForToken(ctx, sfxDataPoints, metricToken)
-}
-func (s *sfxDPClient) pushMetricsDataForToken(ctx context.Context, sfxDataPoints []*sfxpb.DataPoint, accessToken string) (int, error) {
- body, compressed, err := s.encodeBody(sfxDataPoints)
- if err != nil {
- return len(sfxDataPoints), consumererror.NewPermanent(err)
+ // export any histograms in otlp if sendOTLPHistograms is true
+ if s.sendOTLPHistograms {
+ histogramData, metricCount := utils.GetHistograms(md)
+ if metricCount > 0 {
+ droppedCount, err := s.pushOTLPMetricsDataForToken(ctx, histogramData, metricToken)
+ if err != nil {
+ return droppedCount, err
+ }
+ }
}
+ return 0, nil
+
+}
+
+func (s *sfxDPClient) postData(ctx context.Context, body io.Reader, headers map[string]string) error {
datapointURL := *s.ingestURL
if !strings.HasSuffix(datapointURL.Path, "v2/datapoint") {
datapointURL.Path = path.Join(datapointURL.Path, "v2/datapoint")
}
req, err := http.NewRequestWithContext(ctx, "POST", datapointURL.String(), body)
if err != nil {
- return len(sfxDataPoints), consumererror.NewPermanent(err)
+ return consumererror.NewPermanent(err)
}
+ // Set the headers configured in sfxDPClient
for k, v := range s.headers {
req.Header.Set(k, v)
}
- // Override access token in headers map if it's non empty.
- if accessToken != "" {
- req.Header.Set(splunk.SFxAccessTokenHeader, accessToken)
- }
-
- if compressed {
- req.Header.Set("Content-Encoding", "gzip")
+ // Set any extra headers passed by the caller
+ for k, v := range headers {
+ req.Header.Set(k, v)
}
// TODO: Mark errors as partial errors wherever applicable when, partial
// error for metrics is available.
resp, err := s.client.Do(req)
if err != nil {
- return len(sfxDataPoints), err
+ return err
}
defer func() {
@@ -132,7 +148,39 @@ func (s *sfxDPClient) pushMetricsDataForToken(ctx context.Context, sfxDataPoints
err = splunk.HandleHTTPCode(resp)
if err != nil {
- return len(sfxDataPoints), err
+ return err
+ }
+ return nil
+}
+
+func (s *sfxDPClient) pushMetricsDataForToken(ctx context.Context, sfxDataPoints []*sfxpb.DataPoint, accessToken string) (int, error) {
+
+ if s.logDataPoints {
+ for _, dp := range sfxDataPoints {
+ s.logger.Debug("Dispatching SFx datapoint", zap.Stringer("dp", dp))
+ }
+ }
+
+ body, compressed, err := s.encodeBody(sfxDataPoints)
+ dataPointCount := len(sfxDataPoints)
+ if err != nil {
+ return dataPointCount, consumererror.NewPermanent(err)
+ }
+
+ headers := make(map[string]string)
+
+ // Override access token in headers map if it's non empty.
+ if accessToken != "" {
+ headers[splunk.SFxAccessTokenHeader] = accessToken
+ }
+
+ if compressed {
+ headers[contentEncodingHeader] = "gzip"
+ }
+
+ err = s.postData(ctx, body, headers)
+ if err != nil {
+ return dataPointCount, err
}
return 0, nil
}
@@ -160,3 +208,61 @@ func (s *sfxDPClient) retrieveAccessToken(md pmetric.ResourceMetrics) string {
}
return ""
}
+
+func (s *sfxDPClient) pushOTLPMetricsDataForToken(ctx context.Context, mh pmetric.Metrics, accessToken string) (int, error) {
+
+ dataPointCount := mh.DataPointCount()
+ if s.logDataPoints {
+ s.logger.Debug("Count of metrics to send in OTLP format",
+ zap.Int("resource metrics", mh.ResourceMetrics().Len()),
+ zap.Int("metrics", mh.MetricCount()),
+ zap.Int("data points", dataPointCount))
+ buf, err := metricsMarshaler.MarshalMetrics(mh)
+ if err != nil {
+ s.logger.Error("Failed to marshal metrics for logging otlp histograms", zap.Error(err))
+ } else {
+ s.logger.Debug("Dispatching OTLP metrics", zap.String("pmetrics", string(buf)))
+ }
+ }
+
+ body, compressed, err := s.encodeOTLPBody(mh)
+ if err != nil {
+ return dataPointCount, consumererror.NewPermanent(err)
+ }
+
+ headers := make(map[string]string)
+
+ // Set otlp content-type header
+ headers[contentTypeHeader] = otlpProtobufContentType
+
+ // Override access token in headers map if it's non-empty.
+ if accessToken != "" {
+ headers[splunk.SFxAccessTokenHeader] = accessToken
+ }
+
+ if compressed {
+ headers[contentEncodingHeader] = "gzip"
+ }
+
+ s.logger.Debug("Sending metrics in OTLP format")
+
+ err = s.postData(ctx, body, headers)
+
+ if err != nil {
+ return dataPointCount, consumererror.NewMetrics(err, mh)
+ }
+
+ return 0, nil
+}
+
+func (s *sfxDPClient) encodeOTLPBody(md pmetric.Metrics) (bodyReader io.Reader, compressed bool, err error) {
+
+ tr := pmetricotlp.NewExportRequestFromMetrics(md)
+
+ body, err := tr.MarshalProto()
+
+ if err != nil {
+ return nil, false, err
+ }
+ return s.getReader(body)
+}
diff --git a/exporter/signalfxexporter/exporter.go b/exporter/signalfxexporter/exporter.go
index 2f35031623ec..c0d4cc3cd6bd 100644
--- a/exporter/signalfxexporter/exporter.go
+++ b/exporter/signalfxexporter/exporter.go
@@ -84,6 +84,7 @@ func newSignalFxExporter(
config.IncludeMetrics,
config.NonAlphanumericDimensionChars,
config.DropHistogramBuckets,
+ !config.SendOTLPHistograms, // if SendOTLPHistograms is true, do not process histograms when converting to SFx
)
if err != nil {
return nil, fmt.Errorf("failed to create metric converter: %w", err)
@@ -105,7 +106,7 @@ func (se *signalfxExporter) start(ctx context.Context, host component.Host) (err
}
headers := buildHeaders(se.config, se.version)
- client, err := se.createClient(host)
+ client, err := se.createClient(ctx, host)
if err != nil {
return err
}
@@ -121,6 +122,7 @@ func (se *signalfxExporter) start(ctx context.Context, host component.Host) (err
logger: se.logger,
accessTokenPassthrough: se.config.AccessTokenPassthrough,
converter: se.converter,
+ sendOTLPHistograms: se.config.SendOTLPHistograms,
}
apiTLSCfg, err := se.config.APITLSSettings.LoadTLSConfig()
@@ -186,14 +188,14 @@ func newEventExporter(config *Config, createSettings exporter.CreateSettings) (*
}
-func (se *signalfxExporter) startLogs(_ context.Context, host component.Host) error {
+func (se *signalfxExporter) startLogs(ctx context.Context, host component.Host) error {
ingestURL, err := se.config.getIngestURL()
if err != nil {
return err
}
headers := buildHeaders(se.config, se.version)
- client, err := se.createClient(host)
+ client, err := se.createClient(ctx, host)
if err != nil {
return err
}
@@ -213,10 +215,10 @@ func (se *signalfxExporter) startLogs(_ context.Context, host component.Host) er
return nil
}
-func (se *signalfxExporter) createClient(host component.Host) (*http.Client, error) {
- se.config.HTTPClientSettings.TLSSetting = se.config.IngestTLSSettings
+func (se *signalfxExporter) createClient(ctx context.Context, host component.Host) (*http.Client, error) {
+ se.config.ClientConfig.TLSSetting = se.config.IngestTLSSettings
- return se.config.ToClient(host, se.telemetrySettings)
+ return se.config.ToClientContext(ctx, host, se.telemetrySettings)
}
func (se *signalfxExporter) pushMetrics(ctx context.Context, md pmetric.Metrics) error {
@@ -260,11 +262,11 @@ func buildHeaders(config *Config, version string) map[string]string {
// Add any custom headers from the config. They will override the pre-defined
// ones above in case of conflict, but, not the content encoding one since
// the latter one is defined according to the payload.
- for k, v := range config.HTTPClientSettings.Headers {
+ for k, v := range config.ClientConfig.Headers {
headers[k] = string(v)
}
// we want to control how headers are set, overriding user headers with our passthrough.
- config.HTTPClientSettings.Headers = nil
+ config.ClientConfig.Headers = nil
return headers
}
diff --git a/exporter/signalfxexporter/exporter_test.go b/exporter/signalfxexporter/exporter_test.go
index 5d66060a0681..d81236b80cf8 100644
--- a/exporter/signalfxexporter/exporter_test.go
+++ b/exporter/signalfxexporter/exporter_test.go
@@ -39,6 +39,7 @@ import (
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/dimensions"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/translation"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/translation/dpfilters"
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/utils"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk"
metadata "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata"
)
@@ -67,18 +68,18 @@ func TestNew(t *testing.T) {
{
name: "successfully create exporter",
config: &Config{
- AccessToken: "someToken",
- Realm: "xyz",
- HTTPClientSettings: confighttp.HTTPClientSettings{Timeout: 1 * time.Second},
+ AccessToken: "someToken",
+ Realm: "xyz",
+ ClientConfig: confighttp.ClientConfig{Timeout: 1 * time.Second},
},
},
{
name: "create exporter with host metadata syncer",
config: &Config{
- AccessToken: "someToken",
- Realm: "xyz",
- HTTPClientSettings: confighttp.HTTPClientSettings{Timeout: 1 * time.Second},
- SyncHostMetadata: true,
+ AccessToken: "someToken",
+ Realm: "xyz",
+ ClientConfig: confighttp.ClientConfig{Timeout: 1 * time.Second},
+ SyncHostMetadata: true,
},
},
}
@@ -180,16 +181,16 @@ func TestConsumeMetrics(t *testing.T) {
assert.NoError(t, err)
cfg := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 1 * time.Second,
Headers: map[string]configopaque.String{"test_header_": "test"},
},
}
- client, err := cfg.ToClient(componenttest.NewNopHost(), exportertest.NewNopCreateSettings().TelemetrySettings)
+ client, err := cfg.ToClientContext(context.Background(), componenttest.NewNopHost(), exportertest.NewNopCreateSettings().TelemetrySettings)
require.NoError(t, err)
- c, err := translation.NewMetricsConverter(zap.NewNop(), nil, nil, nil, "", false)
+ c, err := translation.NewMetricsConverter(zap.NewNop(), nil, nil, nil, "", false, true)
require.NoError(t, err)
require.NotNil(t, c)
dpClient := &sfxDPClient{
@@ -237,7 +238,7 @@ func TestConsumeMetricsWithAccessTokenPassthrough(t *testing.T) {
fromHeaders := "AccessTokenFromClientHeaders"
fromLabels := []string{"AccessTokenFromLabel0", "AccessTokenFromLabel1"}
- validMetricsWithToken := func(includeToken bool, token string) pmetric.Metrics {
+ validMetricsWithToken := func(includeToken bool, token string, histogram bool) pmetric.Metrics {
out := pmetric.NewMetrics()
rm := out.ResourceMetrics().AppendEmpty()
@@ -248,12 +249,17 @@ func TestConsumeMetricsWithAccessTokenPassthrough(t *testing.T) {
ilm := rm.ScopeMetrics().AppendEmpty()
m := ilm.Metrics().AppendEmpty()
- m.SetName("test_gauge")
+ if histogram {
+ buildHistogram(m, "test_histogram", pcommon.Timestamp(100000000), 1)
+ } else {
+ m.SetName("test_gauge")
+
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("k0", "v0")
+ dp.Attributes().PutStr("k1", "v1")
+ dp.SetDoubleValue(123)
+ }
- dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
- dp.Attributes().PutStr("k0", "v0")
- dp.Attributes().PutStr("k1", "v1")
- dp.SetDoubleValue(123)
return out
}
@@ -263,44 +269,93 @@ func TestConsumeMetricsWithAccessTokenPassthrough(t *testing.T) {
metrics pmetric.Metrics
additionalHeaders map[string]string
pushedTokens []string
+ sendOTLPHistograms bool
}{
{
name: "passthrough access token and included in md",
accessTokenPassthrough: true,
- metrics: validMetricsWithToken(true, fromLabels[0]),
+ metrics: validMetricsWithToken(true, fromLabels[0], false),
+ pushedTokens: []string{fromLabels[0]},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "passthrough access token and included in md with OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: validMetricsWithToken(true, fromLabels[0], true),
pushedTokens: []string{fromLabels[0]},
+ sendOTLPHistograms: true,
},
{
name: "passthrough access token and not included in md",
accessTokenPassthrough: true,
- metrics: validMetricsWithToken(false, fromLabels[0]),
+ metrics: validMetricsWithToken(false, fromLabels[0], false),
+ pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "passthrough access token and not included in md with OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: validMetricsWithToken(false, fromLabels[0], true),
pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: true,
},
{
name: "don't passthrough access token and included in md",
accessTokenPassthrough: false,
metrics: func() pmetric.Metrics {
- forFirstToken := validMetricsWithToken(true, fromLabels[0])
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], false)
+ tgt := forFirstToken.ResourceMetrics().AppendEmpty()
+ validMetricsWithToken(true, fromLabels[1], false).ResourceMetrics().At(0).CopyTo(tgt)
+ return forFirstToken
+ }(),
+ pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "don't passthrough access token and included in md with OTLP histogram",
+ accessTokenPassthrough: false,
+ metrics: func() pmetric.Metrics {
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], true)
tgt := forFirstToken.ResourceMetrics().AppendEmpty()
- validMetricsWithToken(true, fromLabels[1]).ResourceMetrics().At(0).CopyTo(tgt)
+ validMetricsWithToken(true, fromLabels[1], true).ResourceMetrics().At(0).CopyTo(tgt)
return forFirstToken
}(),
- pushedTokens: []string{fromHeaders},
+ pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: true,
},
{
name: "don't passthrough access token and not included in md",
accessTokenPassthrough: false,
- metrics: validMetricsWithToken(false, fromLabels[0]),
+ metrics: validMetricsWithToken(false, fromLabels[0], false),
+ pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "don't passthrough access token and not included in md with OTLP histogram",
+ accessTokenPassthrough: false,
+ metrics: validMetricsWithToken(false, fromLabels[0], true),
pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: true,
},
{
name: "override user-specified token-like header",
accessTokenPassthrough: true,
- metrics: validMetricsWithToken(true, fromLabels[0]),
+ metrics: validMetricsWithToken(true, fromLabels[0], false),
+ additionalHeaders: map[string]string{
+ "x-sf-token": "user-specified",
+ },
+ pushedTokens: []string{fromLabels[0]},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "override user-specified token-like header with OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: validMetricsWithToken(true, fromLabels[0], true),
additionalHeaders: map[string]string{
"x-sf-token": "user-specified",
},
- pushedTokens: []string{fromLabels[0]},
+ pushedTokens: []string{fromLabels[0]},
+ sendOTLPHistograms: true,
},
{
name: "use token from header when resource is nil",
@@ -319,28 +374,75 @@ func TestConsumeMetricsWithAccessTokenPassthrough(t *testing.T) {
return out
}(),
- pushedTokens: []string{fromHeaders},
+ pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "use token from header when resource is nil with OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ rm := out.ResourceMetrics().AppendEmpty()
+ ilm := rm.ScopeMetrics().AppendEmpty()
+ m := ilm.Metrics().AppendEmpty()
+ buildHistogram(m, "test_histogram", pcommon.Timestamp(1000), 1)
+ return out
+ }(),
+ pushedTokens: []string{fromHeaders},
+ sendOTLPHistograms: true,
},
{
name: "multiple tokens passed through",
accessTokenPassthrough: true,
metrics: func() pmetric.Metrics {
- forFirstToken := validMetricsWithToken(true, fromLabels[0])
- forSecondToken := validMetricsWithToken(true, fromLabels[1])
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], false)
+ forSecondToken := validMetricsWithToken(true, fromLabels[1], false)
+ forSecondToken.ResourceMetrics().EnsureCapacity(2)
+ forFirstToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
+
+ return forSecondToken
+ }(),
+ pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "multiple tokens passed through with OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: func() pmetric.Metrics {
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], true)
+ forSecondToken := validMetricsWithToken(true, fromLabels[1], true)
forSecondToken.ResourceMetrics().EnsureCapacity(2)
forFirstToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
return forSecondToken
}(),
- pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ sendOTLPHistograms: true,
},
{
name: "multiple tokens passed through - multiple md with same token",
accessTokenPassthrough: true,
metrics: func() pmetric.Metrics {
- forFirstToken := validMetricsWithToken(true, fromLabels[1])
- forSecondToken := validMetricsWithToken(true, fromLabels[0])
- moreForSecondToken := validMetricsWithToken(true, fromLabels[1])
+ forFirstToken := validMetricsWithToken(true, fromLabels[1], false)
+ forSecondToken := validMetricsWithToken(true, fromLabels[0], false)
+ moreForSecondToken := validMetricsWithToken(true, fromLabels[1], false)
+
+ forSecondToken.ResourceMetrics().EnsureCapacity(3)
+ forFirstToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
+ moreForSecondToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
+
+ return forSecondToken
+ }(),
+ pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "multiple tokens passed through - multiple md with same token with OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: func() pmetric.Metrics {
+ forFirstToken := validMetricsWithToken(true, fromLabels[1], true)
+ forSecondToken := validMetricsWithToken(true, fromLabels[0], true)
+ moreForSecondToken := validMetricsWithToken(true, fromLabels[1], true)
forSecondToken.ResourceMetrics().EnsureCapacity(3)
forFirstToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
@@ -348,15 +450,16 @@ func TestConsumeMetricsWithAccessTokenPassthrough(t *testing.T) {
return forSecondToken
}(),
- pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ sendOTLPHistograms: true,
},
{
name: "multiple tokens passed through - multiple md with same token grouped together",
accessTokenPassthrough: true,
metrics: func() pmetric.Metrics {
- forFirstToken := validMetricsWithToken(true, fromLabels[0])
- forSecondToken := validMetricsWithToken(true, fromLabels[1])
- moreForSecondToken := validMetricsWithToken(true, fromLabels[1])
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], false)
+ forSecondToken := validMetricsWithToken(true, fromLabels[1], false)
+ moreForSecondToken := validMetricsWithToken(true, fromLabels[1], false)
forSecondToken.ResourceMetrics().EnsureCapacity(3)
moreForSecondToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
@@ -364,19 +467,51 @@ func TestConsumeMetricsWithAccessTokenPassthrough(t *testing.T) {
return forSecondToken
}(),
- pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "multiple tokens passed through - multiple md with same token grouped together in OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: func() pmetric.Metrics {
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], true)
+ forSecondToken := validMetricsWithToken(true, fromLabels[1], true)
+ moreForSecondToken := validMetricsWithToken(true, fromLabels[1], true)
+
+ forSecondToken.ResourceMetrics().EnsureCapacity(3)
+ moreForSecondToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
+ forFirstToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
+
+ return forSecondToken
+ }(),
+ pushedTokens: []string{fromLabels[0], fromLabels[1]},
+ sendOTLPHistograms: true,
},
{
name: "multiple tokens passed through - one corrupted",
accessTokenPassthrough: true,
metrics: func() pmetric.Metrics {
- forFirstToken := validMetricsWithToken(true, fromLabels[0])
- forSecondToken := validMetricsWithToken(false, fromLabels[1])
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], false)
+ forSecondToken := validMetricsWithToken(false, fromLabels[1], false)
+ forSecondToken.ResourceMetrics().EnsureCapacity(2)
+ forFirstToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
+ return forSecondToken
+ }(),
+ pushedTokens: []string{fromLabels[0], fromHeaders},
+ sendOTLPHistograms: false,
+ },
+ {
+ name: "multiple tokens passed through - one corrupted in OTLP histogram",
+ accessTokenPassthrough: true,
+ metrics: func() pmetric.Metrics {
+ forFirstToken := validMetricsWithToken(true, fromLabels[0], true)
+ forSecondToken := validMetricsWithToken(false, fromLabels[1], true)
forSecondToken.ResourceMetrics().EnsureCapacity(2)
forFirstToken.ResourceMetrics().At(0).CopyTo(forSecondToken.ResourceMetrics().AppendEmpty())
return forSecondToken
}(),
- pushedTokens: []string{fromLabels[0], fromHeaders},
+ pushedTokens: []string{fromLabels[0], fromHeaders},
+ sendOTLPHistograms: true,
},
}
for _, tt := range tests {
@@ -402,13 +537,14 @@ func TestConsumeMetricsWithAccessTokenPassthrough(t *testing.T) {
cfg := factory.CreateDefaultConfig().(*Config)
cfg.IngestURL = server.URL
cfg.APIURL = server.URL
- cfg.HTTPClientSettings.Headers = make(map[string]configopaque.String)
+ cfg.ClientConfig.Headers = make(map[string]configopaque.String)
for k, v := range tt.additionalHeaders {
- cfg.HTTPClientSettings.Headers[k] = configopaque.String(v)
+ cfg.ClientConfig.Headers[k] = configopaque.String(v)
}
- cfg.HTTPClientSettings.Headers["test_header_"] = configopaque.String(tt.name)
+ cfg.ClientConfig.Headers["test_header_"] = configopaque.String(tt.name)
cfg.AccessToken = configopaque.String(fromHeaders)
cfg.AccessTokenPassthrough = tt.accessTokenPassthrough
+ cfg.SendOTLPHistograms = tt.sendOTLPHistograms
sfxExp, err := NewFactory().CreateMetricsExporter(context.Background(), exportertest.NewNopCreateSettings(), cfg)
require.NoError(t, err)
require.NoError(t, sfxExp.Start(context.Background(), componenttest.NewNopHost()))
@@ -441,9 +577,9 @@ func TestNewEventExporter(t *testing.T) {
assert.Nil(t, got)
cfg := &Config{
- AccessToken: "someToken",
- Realm: "xyz",
- HTTPClientSettings: confighttp.HTTPClientSettings{Timeout: 1 * time.Second},
+ AccessToken: "someToken",
+ Realm: "xyz",
+ ClientConfig: confighttp.ClientConfig{Timeout: 1 * time.Second},
}
got, err = newEventExporter(cfg, exportertest.NewNopCreateSettings())
@@ -557,13 +693,13 @@ func TestConsumeEventData(t *testing.T) {
assert.NoError(t, err)
cfg := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 1 * time.Second,
Headers: map[string]configopaque.String{"test_header_": "test"},
},
}
- client, err := cfg.ToClient(componenttest.NewNopHost(), exportertest.NewNopCreateSettings().TelemetrySettings)
+ client, err := cfg.ToClientContext(context.Background(), componenttest.NewNopHost(), exportertest.NewNopCreateSettings().TelemetrySettings)
require.NoError(t, err)
eventClient := &sfxEventClient{
@@ -730,6 +866,7 @@ func TestConsumeMetadata(t *testing.T) {
cfg.IncludeMetrics,
cfg.NonAlphanumericDimensionChars,
false,
+ true,
)
require.NoError(t, err)
type args struct {
@@ -1003,7 +1140,7 @@ func TestConsumeMetadata(t *testing.T) {
wg := sync.WaitGroup{}
wg.Add(1)
- server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ server := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, r *http.Request) {
b, err := io.ReadAll(r.Body)
assert.NoError(t, err)
@@ -1077,19 +1214,19 @@ func TestConsumeMetadata(t *testing.T) {
func BenchmarkExporterConsumeData(b *testing.B) {
batchSize := 1000
metrics := pmetric.NewMetrics()
- tmd := testMetricsData()
+ tmd := testMetricsData(false)
for i := 0; i < batchSize; i++ {
tmd.ResourceMetrics().At(0).CopyTo(metrics.ResourceMetrics().AppendEmpty())
}
- server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
w.WriteHeader(http.StatusAccepted)
}))
defer server.Close()
serverURL, err := url.Parse(server.URL)
assert.NoError(b, err)
- c, err := translation.NewMetricsConverter(zap.NewNop(), nil, nil, nil, "", false)
+ c, err := translation.NewMetricsConverter(zap.NewNop(), nil, nil, nil, "", false, true)
require.NoError(b, err)
require.NotNil(b, c)
dpClient := &sfxDPClient{
@@ -1140,13 +1277,13 @@ func TestTLSExporterInit(t *testing.T) {
config: &Config{
APIURL: "https://test",
IngestURL: "https://test",
- IngestTLSSettings: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ IngestTLSSettings: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "./testdata/certs/ca.pem",
},
},
- APITLSSettings: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ APITLSSettings: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "./testdata/certs/ca.pem",
},
},
@@ -1160,8 +1297,8 @@ func TestTLSExporterInit(t *testing.T) {
config: &Config{
APIURL: "https://test",
IngestURL: "https://test",
- IngestTLSSettings: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ IngestTLSSettings: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "./testdata/certs/missingfile",
},
},
@@ -1176,8 +1313,8 @@ func TestTLSExporterInit(t *testing.T) {
config: &Config{
APIURL: "https://test",
IngestURL: "https://test",
- IngestTLSSettings: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ IngestTLSSettings: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "./testdata/certs/invalid-ca.pem",
},
},
@@ -1217,7 +1354,7 @@ func TestTLSIngestConnection(t *testing.T) {
dp.Attributes().PutStr("k1", "v1")
dp.SetDoubleValue(123)
- server, err := newLocalHTTPSTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ server, err := newLocalHTTPSTestServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
fmt.Fprint(w, "connection is successful")
}))
require.NoError(t, err)
@@ -1247,8 +1384,8 @@ func TestTLSIngestConnection(t *testing.T) {
config: &Config{
APIURL: serverURL,
IngestURL: serverURL,
- IngestTLSSettings: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ IngestTLSSettings: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "./testdata/certs/ca.pem",
},
},
@@ -1282,7 +1419,7 @@ func TestTLSIngestConnection(t *testing.T) {
func TestDefaultSystemCPUTimeExcludedAndTranslated(t *testing.T) {
translator, err := translation.NewMetricTranslator(defaultTranslationRules, 3600)
require.NoError(t, err)
- converter, err := translation.NewMetricsConverter(zap.NewNop(), translator, defaultExcludeMetrics, nil, "_-.", false)
+ converter, err := translation.NewMetricsConverter(zap.NewNop(), translator, defaultExcludeMetrics, nil, "_-.", false, true)
require.NoError(t, err)
md := pmetric.NewMetrics()
@@ -1325,7 +1462,8 @@ func TestTLSAPIConnection(t *testing.T) {
cfg.ExcludeMetrics,
cfg.IncludeMetrics,
cfg.NonAlphanumericDimensionChars,
- false)
+ false,
+ true)
require.NoError(t, err)
metadata := []*metadata.MetadataUpdate{
@@ -1340,7 +1478,7 @@ func TestTLSAPIConnection(t *testing.T) {
},
}
- server, err := newLocalHTTPSTestServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ server, err := newLocalHTTPSTestServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
fmt.Fprint(w, "connection is successful")
}))
require.NoError(t, err)
@@ -1359,8 +1497,8 @@ func TestTLSAPIConnection(t *testing.T) {
IngestURL: server.URL,
AccessToken: "random",
SyncHostMetadata: true,
- APITLSSettings: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ APITLSSettings: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "./testdata/certs/ca.pem",
},
},
@@ -1437,3 +1575,315 @@ func newLocalHTTPSTestServer(handler http.Handler) (*httptest.Server, error) {
ts.StartTLS()
return ts, nil
}
+
+func BenchmarkExporterConsumeDataWithOTLPHistograms(b *testing.B) {
+ batchSize := 1000
+ metrics := pmetric.NewMetrics()
+ tmd := testMetricsData(true)
+ for i := 0; i < batchSize; i++ {
+ tmd.ResourceMetrics().At(0).CopyTo(metrics.ResourceMetrics().AppendEmpty())
+ }
+
+ server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
+ w.WriteHeader(http.StatusAccepted)
+ }))
+ defer server.Close()
+ serverURL, err := url.Parse(server.URL)
+ assert.NoError(b, err)
+
+ c, err := translation.NewMetricsConverter(zap.NewNop(), nil, nil, nil, "", false, false)
+ require.NoError(b, err)
+ require.NotNil(b, c)
+ dpClient := &sfxDPClient{
+ sfxClientBase: sfxClientBase{
+ ingestURL: serverURL,
+ client: &http.Client{
+ Timeout: 1 * time.Second,
+ },
+ zippers: sync.Pool{New: func() any {
+ return gzip.NewWriter(nil)
+ }},
+ },
+ logger: zap.NewNop(),
+ converter: c,
+ }
+
+ for i := 0; i < b.N; i++ {
+ numDroppedTimeSeries, err := dpClient.pushMetricsData(context.Background(), metrics)
+ assert.NoError(b, err)
+ assert.Equal(b, 0, numDroppedTimeSeries)
+ }
+}
+
+func TestConsumeMixedMetrics(t *testing.T) {
+ ts := pcommon.NewTimestampFromTime(time.Now())
+ smallBatch := pmetric.NewMetrics()
+ rm := smallBatch.ResourceMetrics().AppendEmpty()
+ res := rm.Resource()
+ res.Attributes().PutStr("kr0", "vr0")
+ ilms := rm.ScopeMetrics()
+ ilms.EnsureCapacity(2)
+ ilm := ilms.AppendEmpty()
+ ilm.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm.Metrics().EnsureCapacity(2)
+ ilm.Metrics().AppendEmpty()
+ buildHistogram(ilm.Metrics().At(0), "test_histogram", ts, 2)
+ ilm.Metrics().AppendEmpty()
+ m1 := ilm.Metrics().At(1)
+ m1.SetName("test_gauge")
+ dp1 := m1.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp1.Attributes().PutStr("k0", "v0")
+ dp1.SetDoubleValue(123)
+
+ smallBatchHistogramOnly := pmetric.NewMetrics()
+ rmh := smallBatchHistogramOnly.ResourceMetrics().AppendEmpty()
+ resh := rmh.Resource()
+ resh.Attributes().PutStr("kr0", "vr0")
+ ilmsh := rmh.ScopeMetrics()
+ ilmsh.EnsureCapacity(2)
+ ilmh := ilmsh.AppendEmpty()
+ ilmh.Scope().Attributes().PutStr("ks0", "vs0")
+ ilmh.Metrics().EnsureCapacity(2)
+ ilmh.Metrics().AppendEmpty()
+ buildHistogram(ilmh.Metrics().At(0), "test_histogram", ts, 2)
+
+ tests := []struct {
+ name string
+ md pmetric.Metrics
+ sfxHTTPResponseCode int
+ otlpHTTPResponseCode int
+ retryAfter int
+ numDroppedTimeSeries int
+ wantErr bool
+ wantPermanentErr bool
+ wantThrottleErr bool
+ expectedErrorMsg string
+ wantPartialMetricsErr bool
+ }{
+ {
+ name: "happy_path",
+ md: smallBatch,
+ sfxHTTPResponseCode: http.StatusAccepted,
+ otlpHTTPResponseCode: http.StatusAccepted,
+ },
+ {
+ name: "happy_path_otlp",
+ md: smallBatchHistogramOnly,
+ otlpHTTPResponseCode: http.StatusAccepted,
+ },
+ {
+ name: "response_forbidden_sfx",
+ md: smallBatch,
+ sfxHTTPResponseCode: http.StatusForbidden,
+ numDroppedTimeSeries: 1,
+ wantErr: true,
+ expectedErrorMsg: "HTTP 403 \"Forbidden\"",
+ },
+ {
+ name: "response_forbidden_otlp",
+ md: smallBatchHistogramOnly,
+ otlpHTTPResponseCode: http.StatusForbidden,
+ numDroppedTimeSeries: 2,
+ wantErr: true,
+ expectedErrorMsg: "HTTP 403 \"Forbidden\"",
+ },
+ {
+ name: "response_forbidden_mixed",
+ md: smallBatch,
+ sfxHTTPResponseCode: http.StatusAccepted,
+ otlpHTTPResponseCode: http.StatusForbidden,
+ numDroppedTimeSeries: 2,
+ wantErr: true,
+ expectedErrorMsg: "HTTP 403 \"Forbidden\"",
+ },
+ {
+ name: "response_bad_request_sfx",
+ md: smallBatch,
+ sfxHTTPResponseCode: http.StatusBadRequest,
+ numDroppedTimeSeries: 1,
+ wantPermanentErr: true,
+ expectedErrorMsg: "Permanent error: \"HTTP/1.1 400 Bad Request",
+ },
+ {
+ name: "response_bad_request_otlp",
+ md: smallBatchHistogramOnly,
+ otlpHTTPResponseCode: http.StatusBadRequest,
+ numDroppedTimeSeries: 2,
+ wantPermanentErr: true,
+ expectedErrorMsg: "Permanent error: \"HTTP/1.1 400 Bad Request",
+ },
+ {
+ name: "response_bad_request_mixed",
+ md: smallBatch,
+ sfxHTTPResponseCode: http.StatusAccepted,
+ otlpHTTPResponseCode: http.StatusBadRequest,
+ numDroppedTimeSeries: 2,
+ wantPermanentErr: true,
+ expectedErrorMsg: "Permanent error: \"HTTP/1.1 400 Bad Request",
+ },
+ {
+ name: "response_throttle_sfx",
+ md: smallBatch,
+ sfxHTTPResponseCode: http.StatusTooManyRequests,
+ numDroppedTimeSeries: 1,
+ wantThrottleErr: true,
+ },
+ {
+ name: "response_throttle_mixed",
+ md: smallBatch,
+ sfxHTTPResponseCode: http.StatusAccepted,
+ otlpHTTPResponseCode: http.StatusTooManyRequests,
+ numDroppedTimeSeries: 2,
+ wantThrottleErr: true,
+ wantPartialMetricsErr: true,
+ },
+ {
+ name: "response_throttle_otlp",
+ md: smallBatchHistogramOnly,
+ otlpHTTPResponseCode: http.StatusTooManyRequests,
+ numDroppedTimeSeries: 2,
+ wantThrottleErr: true,
+ wantPartialMetricsErr: true,
+ },
+ {
+ name: "response_throttle_with_header_sfx",
+ md: smallBatch,
+ retryAfter: 123,
+ sfxHTTPResponseCode: http.StatusServiceUnavailable,
+ numDroppedTimeSeries: 1,
+ wantThrottleErr: true,
+ },
+ {
+ name: "response_throttle_with_header_otlp",
+ md: smallBatchHistogramOnly,
+ retryAfter: 123,
+ otlpHTTPResponseCode: http.StatusServiceUnavailable,
+ numDroppedTimeSeries: 2,
+ wantThrottleErr: true,
+ wantPartialMetricsErr: true,
+ },
+ {
+ name: "response_throttle_with_header_mixed",
+ md: smallBatch,
+ retryAfter: 123,
+ sfxHTTPResponseCode: http.StatusAccepted,
+ otlpHTTPResponseCode: http.StatusServiceUnavailable,
+ numDroppedTimeSeries: 2,
+ wantThrottleErr: true,
+ wantPartialMetricsErr: true,
+ },
+ {
+ name: "large_batch",
+ md: generateLargeMixedDPBatch(),
+ sfxHTTPResponseCode: http.StatusAccepted,
+ otlpHTTPResponseCode: http.StatusAccepted,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+ assert.Equal(t, "test", r.Header.Get("test_header_"))
+ var respCode int
+ if r.Header.Get("Content-Type") == otlpProtobufContentType {
+ respCode = tt.otlpHTTPResponseCode
+ } else {
+ respCode = tt.sfxHTTPResponseCode
+ }
+ if (respCode == http.StatusTooManyRequests ||
+ respCode == http.StatusServiceUnavailable) && tt.retryAfter != 0 {
+ w.Header().Add(splunk.HeaderRetryAfter, strconv.Itoa(tt.retryAfter))
+ }
+ w.WriteHeader(respCode)
+ _, _ = w.Write([]byte("response content"))
+ }))
+ defer server.Close()
+
+ serverURL, err := url.Parse(server.URL)
+ assert.NoError(t, err)
+
+ cfg := &Config{
+ ClientConfig: confighttp.ClientConfig{
+ Timeout: 1 * time.Second,
+ Headers: map[string]configopaque.String{"test_header_": "test"},
+ },
+ }
+
+ client, err := cfg.ToClientContext(context.Background(), componenttest.NewNopHost(), exportertest.NewNopCreateSettings().TelemetrySettings)
+ require.NoError(t, err)
+
+ c, err := translation.NewMetricsConverter(zap.NewNop(), nil, nil, nil, "", false, false)
+ require.NoError(t, err)
+ require.NotNil(t, c)
+ sfxClient := &sfxDPClient{
+ sfxClientBase: sfxClientBase{
+ ingestURL: serverURL,
+ client: client,
+ zippers: sync.Pool{New: func() any {
+ return gzip.NewWriter(nil)
+ }},
+ },
+ logger: zap.NewNop(),
+ converter: c,
+ sendOTLPHistograms: true,
+ }
+
+ numDroppedTimeSeries, err := sfxClient.pushMetricsData(context.Background(), tt.md)
+ assert.Equal(t, tt.numDroppedTimeSeries, numDroppedTimeSeries)
+
+ if tt.wantErr {
+ assert.Error(t, err)
+ assert.EqualError(t, err, tt.expectedErrorMsg)
+ return
+ }
+
+ if tt.wantPermanentErr {
+ assert.Error(t, err)
+ assert.True(t, consumererror.IsPermanent(err))
+ assert.True(t, strings.HasPrefix(err.Error(), tt.expectedErrorMsg))
+ assert.Contains(t, err.Error(), "response content")
+ return
+ }
+
+ if tt.wantThrottleErr {
+ if tt.wantPartialMetricsErr {
+ partialMetrics, _ := utils.GetHistograms(smallBatch)
+ throttleErr := fmt.Errorf("HTTP %d %q", tt.otlpHTTPResponseCode, http.StatusText(tt.otlpHTTPResponseCode))
+ throttleErr = exporterhelper.NewThrottleRetry(throttleErr, time.Duration(tt.retryAfter)*time.Second)
+ testErr := consumererror.NewMetrics(throttleErr, partialMetrics)
+ assert.EqualValues(t, testErr, err)
+ return
+ }
+
+ expected := fmt.Errorf("HTTP %d %q", tt.sfxHTTPResponseCode, http.StatusText(tt.sfxHTTPResponseCode))
+ expected = exporterhelper.NewThrottleRetry(expected, time.Duration(tt.retryAfter)*time.Second)
+ assert.EqualValues(t, expected, err)
+ return
+ }
+
+ assert.NoError(t, err)
+ })
+ }
+}
+
+func generateLargeMixedDPBatch() pmetric.Metrics {
+ md := pmetric.NewMetrics()
+ md.ResourceMetrics().EnsureCapacity(7500)
+
+ ts := pcommon.NewTimestampFromTime(time.Now())
+ for i := 0; i < 7500; i++ {
+ rm := md.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("kr0", "vr0")
+ ilm := rm.ScopeMetrics().AppendEmpty()
+ ilm.Metrics().EnsureCapacity(2)
+ m1 := ilm.Metrics().AppendEmpty()
+ m1.SetName("test_" + strconv.Itoa(i))
+ dp := m1.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.SetTimestamp(ts)
+ dp.Attributes().PutStr("k0", "v0")
+ dp.Attributes().PutStr("k1", "v1")
+ dp.SetIntValue(int64(i))
+ m2 := ilm.Metrics().AppendEmpty()
+ buildHistogram(m2, "histogram_"+strconv.Itoa(i), ts, 1)
+ }
+ return md
+}
diff --git a/exporter/signalfxexporter/factory.go b/exporter/signalfxexporter/factory.go
index ab42f8a6cdbb..cabf701a9387 100644
--- a/exporter/signalfxexporter/factory.go
+++ b/exporter/signalfxexporter/factory.go
@@ -11,6 +11,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.uber.org/zap"
@@ -22,8 +23,10 @@ import (
)
const (
- defaultHTTPTimeout = time.Second * 5
- defaultMaxConns = 100
+ defaultHTTPTimeout = time.Second * 10
+ defaultHTTP2ReadIdleTimeout = time.Second * 10
+ defaultHTTP2PingTimeout = time.Second * 10
+ defaultMaxConns = 100
defaultDimMaxBuffered = 10000
defaultDimSendDelay = 10 * time.Second
@@ -49,13 +52,15 @@ func createDefaultConfig() component.Config {
timeout := 10 * time.Second
return &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- HTTPClientSettings: confighttp.HTTPClientSettings{
- Timeout: defaultHTTPTimeout,
- MaxIdleConns: &maxConnCount,
- MaxIdleConnsPerHost: &maxConnCount,
- IdleConnTimeout: &idleConnTimeout,
+ ClientConfig: confighttp.ClientConfig{
+ Timeout: defaultHTTPTimeout,
+ MaxIdleConns: &maxConnCount,
+ MaxIdleConnsPerHost: &maxConnCount,
+ IdleConnTimeout: &idleConnTimeout,
+ HTTP2ReadIdleTimeout: defaultHTTP2ReadIdleTimeout,
+ HTTP2PingTimeout: defaultHTTP2PingTimeout,
},
AccessTokenPassthroughConfig: splunk.AccessTokenPassthroughConfig{
AccessTokenPassthrough: true,
@@ -83,24 +88,24 @@ func createTracesExporter(
cfg := eCfg.(*Config)
corrCfg := cfg.Correlation
- if corrCfg.HTTPClientSettings.Endpoint == "" {
+ if corrCfg.ClientConfig.Endpoint == "" {
apiURL, err := cfg.getAPIURL()
if err != nil {
return nil, fmt.Errorf("unable to create API URL: %w", err)
}
- corrCfg.HTTPClientSettings.Endpoint = apiURL.String()
+ corrCfg.ClientConfig.Endpoint = apiURL.String()
}
if cfg.AccessToken == "" {
return nil, errors.New("access_token is required")
}
- set.Logger.Info("Correlation tracking enabled", zap.String("endpoint", corrCfg.HTTPClientSettings.Endpoint))
+ set.Logger.Info("Correlation tracking enabled", zap.String("endpoint", corrCfg.ClientConfig.Endpoint))
tracker := correlation.NewTracker(corrCfg, cfg.AccessToken, set)
return exporterhelper.NewTracesExporter(
ctx,
set,
cfg,
- tracker.AddSpans,
+ tracker.ProcessTraces,
exporterhelper.WithStart(tracker.Start),
exporterhelper.WithShutdown(tracker.Shutdown))
}
@@ -124,7 +129,7 @@ func createMetricsExporter(
exp.pushMetrics,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithStart(exp.start),
exporterhelper.WithShutdown(exp.shutdown))
@@ -167,7 +172,7 @@ func createLogsExporter(
exp.pushLogs,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(expCfg.RetrySettings),
+ exporterhelper.WithRetry(expCfg.BackOffConfig),
exporterhelper.WithQueue(expCfg.QueueSettings),
exporterhelper.WithStart(exp.startLogs))
diff --git a/exporter/signalfxexporter/factory_test.go b/exporter/signalfxexporter/factory_test.go
index c9db6217cd8b..e276af79ba58 100644
--- a/exporter/signalfxexporter/factory_test.go
+++ b/exporter/signalfxexporter/factory_test.go
@@ -102,7 +102,7 @@ func TestCreateMetricsExporter_CustomConfig(t *testing.T) {
config := &Config{
AccessToken: "testToken",
Realm: "us1",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 2 * time.Second,
Headers: map[string]configopaque.String{
"added-entry": "added value",
@@ -121,9 +121,9 @@ func TestDefaultTranslationRules(t *testing.T) {
require.NotNil(t, rules, "rules are nil")
tr, err := translation.NewMetricTranslator(rules, 1)
require.NoError(t, err)
- data := testMetricsData()
+ data := testMetricsData(false)
- c, err := translation.NewMetricsConverter(zap.NewNop(), tr, nil, nil, "", false)
+ c, err := translation.NewMetricsConverter(zap.NewNop(), tr, nil, nil, "", false, true)
require.NoError(t, err)
translated := c.MetricsToSignalFxV2(data)
require.NotNil(t, translated)
@@ -210,7 +210,7 @@ func requireDimension(t *testing.T, dims []*sfxpb.Dimension, key, val string) {
require.True(t, found, `missing dimension: %s`, key)
}
-func testMetricsData() pmetric.Metrics {
+func testMetricsData(addHistogram bool) pmetric.Metrics {
md := pmetric.NewMetrics()
m1 := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
@@ -232,6 +232,10 @@ func testMetricsData() pmetric.Metrics {
dp12.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp12.SetIntValue(6e9)
+ if addHistogram {
+ buildHistogram(m1, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
sm2 := md.ResourceMetrics().At(0).ScopeMetrics().AppendEmpty().Metrics()
m2 := sm2.AppendEmpty()
m2.SetName("system.disk.io")
@@ -263,6 +267,10 @@ func testMetricsData() pmetric.Metrics {
dp24.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp24.SetIntValue(8e9)
+ if addHistogram {
+ buildHistogram(m2, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
m3 := sm2.AppendEmpty()
m3.SetName("system.disk.operations")
m3.SetDescription("Disk operations count.")
@@ -294,6 +302,10 @@ func testMetricsData() pmetric.Metrics {
dp34.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp34.SetIntValue(5e3)
+ if addHistogram {
+ buildHistogram(m3, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
m4 := md.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
m4.SetName("system.disk.operations")
m4.SetDescription("Disk operations count.")
@@ -325,6 +337,10 @@ func testMetricsData() pmetric.Metrics {
dp44.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000060, 0)))
dp44.SetIntValue(7e3)
+ if addHistogram {
+ buildHistogram(m4, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
sm5 := md.ResourceMetrics().At(0).ScopeMetrics().AppendEmpty().Metrics()
m5 := sm5.AppendEmpty()
m5.SetName("system.network.io")
@@ -347,6 +363,10 @@ func testMetricsData() pmetric.Metrics {
dp52.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp52.SetIntValue(6e9)
+ if addHistogram {
+ buildHistogram(m5, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
m6 := sm5.AppendEmpty()
m6.SetName("system.network.packets")
m6.SetDescription("The number of packets transferred")
@@ -367,6 +387,10 @@ func testMetricsData() pmetric.Metrics {
dp62.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp62.SetIntValue(150)
+ if addHistogram {
+ buildHistogram(m6, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
sm7 := md.ResourceMetrics().At(0).ScopeMetrics().AppendEmpty().Metrics()
m7 := sm7.AppendEmpty()
m7.SetName("container.memory.working_set")
@@ -378,6 +402,10 @@ func testMetricsData() pmetric.Metrics {
dp71.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp71.SetIntValue(1000)
+ if addHistogram {
+ buildHistogram(m7, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
m8 := sm7.AppendEmpty()
m8.SetName("container.memory.page_faults")
dp81 := m8.SetEmptyGauge().DataPoints().AppendEmpty()
@@ -387,6 +415,10 @@ func testMetricsData() pmetric.Metrics {
dp81.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp81.SetIntValue(1000)
+ if addHistogram {
+ buildHistogram(m8, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
m9 := sm7.AppendEmpty()
m9.SetName("container.memory.major_page_faults")
dp91 := m9.SetEmptyGauge().DataPoints().AppendEmpty()
@@ -396,6 +428,10 @@ func testMetricsData() pmetric.Metrics {
dp91.SetTimestamp(pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)))
dp91.SetIntValue(1000)
+ if addHistogram {
+ buildHistogram(m9, "histogram", pcommon.NewTimestampFromTime(time.Unix(1596000000, 0)), 5)
+ }
+
return md
}
@@ -493,7 +529,7 @@ func TestHostmetricsCPUTranslations(t *testing.T) {
f := NewFactory()
cfg := f.CreateDefaultConfig().(*Config)
require.NoError(t, setDefaultExcludes(cfg))
- converter, err := translation.NewMetricsConverter(zap.NewNop(), testGetTranslator(t), cfg.ExcludeMetrics, cfg.IncludeMetrics, "", false)
+ converter, err := translation.NewMetricsConverter(zap.NewNop(), testGetTranslator(t), cfg.ExcludeMetrics, cfg.IncludeMetrics, "", false, true)
require.NoError(t, err)
md1, err := golden.ReadMetrics(filepath.Join("testdata", "hostmetrics_system_cpu_time_1.yaml"))
@@ -534,7 +570,7 @@ func TestDefaultExcludesTranslated(t *testing.T) {
cfg := f.CreateDefaultConfig().(*Config)
require.NoError(t, setDefaultExcludes(cfg))
- converter, err := translation.NewMetricsConverter(zap.NewNop(), testGetTranslator(t), cfg.ExcludeMetrics, cfg.IncludeMetrics, "", false)
+ converter, err := translation.NewMetricsConverter(zap.NewNop(), testGetTranslator(t), cfg.ExcludeMetrics, cfg.IncludeMetrics, "", false, true)
require.NoError(t, err)
var metrics []map[string]string
@@ -557,7 +593,7 @@ func TestDefaultExcludes_not_translated(t *testing.T) {
cfg := f.CreateDefaultConfig().(*Config)
require.NoError(t, setDefaultExcludes(cfg))
- converter, err := translation.NewMetricsConverter(zap.NewNop(), nil, cfg.ExcludeMetrics, cfg.IncludeMetrics, "", false)
+ converter, err := translation.NewMetricsConverter(zap.NewNop(), nil, cfg.ExcludeMetrics, cfg.IncludeMetrics, "", false, true)
require.NoError(t, err)
var metrics []map[string]string
@@ -577,7 +613,7 @@ func BenchmarkMetricConversion(b *testing.B) {
tr, err := translation.NewMetricTranslator(rules, 1)
require.NoError(b, err)
- c, err := translation.NewMetricsConverter(zap.NewNop(), tr, nil, nil, "", false)
+ c, err := translation.NewMetricsConverter(zap.NewNop(), tr, nil, nil, "", false, true)
require.NoError(b, err)
bytes, err := os.ReadFile("testdata/json/hostmetrics.json")
@@ -622,3 +658,29 @@ func testReadJSON(f string, v any) error {
}
return json.Unmarshal(bytes, &v)
}
+
+func buildHistogramDP(dp pmetric.HistogramDataPoint, timestamp pcommon.Timestamp) {
+ dp.SetStartTimestamp(timestamp)
+ dp.SetTimestamp(timestamp)
+ dp.SetMin(1.0)
+ dp.SetMax(2)
+ dp.SetCount(5)
+ dp.SetSum(7.0)
+ dp.BucketCounts().FromRaw([]uint64{3, 2})
+ dp.ExplicitBounds().FromRaw([]float64{1, 2})
+ dp.Attributes().PutStr("k1", "v1")
+}
+
+func buildHistogram(im pmetric.Metric, name string, timestamp pcommon.Timestamp, dpCount int) {
+ im.SetName(name)
+ im.SetDescription("Histogram")
+ im.SetUnit("1")
+ im.SetEmptyHistogram().SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
+ idps := im.Histogram().DataPoints()
+ idps.EnsureCapacity(dpCount)
+
+ for i := 0; i < dpCount; i++ {
+ dp := idps.AppendEmpty()
+ buildHistogramDP(dp, timestamp)
+ }
+}
diff --git a/exporter/signalfxexporter/generated_component_test.go b/exporter/signalfxexporter/generated_component_test.go
new file mode 100644
index 000000000000..bd3e511048c3
--- /dev/null
+++ b/exporter/signalfxexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package signalfxexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/signalfxexporter/go.mod b/exporter/signalfxexporter/go.mod
index 324a750e7dea..a6ffad13a317 100644
--- a/exporter/signalfxexporter/go.mod
+++ b/exporter/signalfxexporter/go.mod
@@ -1,85 +1,96 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/gobwas/glob v0.2.3
github.com/gogo/protobuf v1.3.2
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.89.0
- github.com/shirou/gopsutil/v3 v3.23.10
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/experimentalmetricmetadata v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/signalfx v0.98.0
+ github.com/shirou/gopsutil/v3 v3.24.3
github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
- golang.org/x/sys v0.14.0
+ go.uber.org/zap v1.27.0
+ golang.org/x/sys v0.19.0
gopkg.in/yaml.v3 v3.0.1
)
require (
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- golang.org/x/net v0.18.0 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
)
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/common => ../../internal/common
diff --git a/exporter/signalfxexporter/go.sum b/exporter/signalfxexporter/go.sum
index 7d2f55241e8d..b2e3a48e10e2 100644
--- a/exporter/signalfxexporter/go.sum
+++ b/exporter/signalfxexporter/go.sum
@@ -1,92 +1,73 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -98,17 +79,20 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
-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/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
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=
@@ -118,102 +102,96 @@ github.com/signalfx/com_signalfx_metrics_protobuf v0.0.3/go.mod h1:gJrXWi7wSGXfi
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
-go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -221,18 +199,14 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
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.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -240,38 +214,23 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/signalfxexporter/internal/apm/correlations/client.go b/exporter/signalfxexporter/internal/apm/correlations/client.go
index 427c0abb685f..ba86baf9a6c2 100644
--- a/exporter/signalfxexporter/internal/apm/correlations/client.go
+++ b/exporter/signalfxexporter/internal/apm/correlations/client.go
@@ -44,6 +44,7 @@ type CorrelationClient interface {
Delete(*Correlation, SuccessfulDeleteCB)
Get(dimName string, dimValue string, cb SuccessfulGetCB)
Start()
+ Shutdown()
}
type request struct {
@@ -387,3 +388,9 @@ func (cc *Client) Start() {
go cc.processChan()
go cc.processRetryChan()
}
+
+// Shutdown the client. This will block until the context's cancel
+// function is complete.
+func (cc *Client) Shutdown() {
+ cc.wg.Wait()
+}
diff --git a/exporter/signalfxexporter/internal/apm/correlations/client_test.go b/exporter/signalfxexporter/internal/apm/correlations/client_test.go
index 48cb24b996de..87ff12866cb6 100644
--- a/exporter/signalfxexporter/internal/apm/correlations/client_test.go
+++ b/exporter/signalfxexporter/internal/apm/correlations/client_test.go
@@ -124,7 +124,7 @@ func makeHandler(t *testing.T, corCh chan<- *request, forcedRespCode *atomic.Val
})
}
-func setup(t *testing.T) (CorrelationClient, chan *request, *atomic.Value, *atomic.Value, context.CancelFunc) {
+func setup(t *testing.T) (CorrelationClient, *httptest.Server, chan *request, *atomic.Value, *atomic.Value, context.CancelFunc, context.Context) {
serverCh := make(chan *request, 100)
var forcedRespCode atomic.Value
@@ -132,10 +132,6 @@ func setup(t *testing.T) (CorrelationClient, chan *request, *atomic.Value, *atom
server := httptest.NewServer(makeHandler(t, serverCh, &forcedRespCode, &forcedRespPayload))
ctx, cancel := context.WithCancel(context.Background())
- go func() {
- <-ctx.Done()
- server.Close()
- }()
serverURL, err := url.Parse(server.URL)
if err != nil {
@@ -176,13 +172,20 @@ func setup(t *testing.T) (CorrelationClient, chan *request, *atomic.Value, *atom
}
client.Start()
- return client, serverCh, &forcedRespCode, &forcedRespPayload, cancel
+ return client, server, serverCh, &forcedRespCode, &forcedRespPayload, cancel, ctx
+}
+
+func teardown(ctx context.Context, client CorrelationClient, server *httptest.Server, serverCh chan *request, cancel context.CancelFunc) {
+ close(serverCh)
+ cancel()
+ <-ctx.Done()
+ client.Shutdown()
+ server.Close()
}
func TestCorrelationClient(t *testing.T) {
- client, serverCh, forcedRespCode, forcedRespPayload, cancel := setup(t)
- defer close(serverCh)
- defer cancel()
+ client, server, serverCh, forcedRespCode, forcedRespPayload, cancel, ctx := setup(t)
+ defer teardown(ctx, client, server, serverCh, cancel)
for _, correlationType := range []Type{Service, Environment} {
for _, op := range []string{http.MethodPut, http.MethodDelete} {
@@ -242,7 +245,7 @@ func TestCorrelationClient(t *testing.T) {
client.Correlate(testData, CorrelateCB(func(_ *Correlation, _ error) {}))
// sending the testData twice tests deduplication, since the 500 status
// will trigger retries, and the requests should be deduped and the
- // TotalRertriedUpdates should still only be 5
+ // TotalRetriedUpdates should still only be 5
client.Correlate(testData, CorrelateCB(func(_ *Correlation, _ error) {}))
cors := waitForCors(serverCh, 1, 4)
diff --git a/exporter/signalfxexporter/internal/apm/correlations/package_test.go b/exporter/signalfxexporter/internal/apm/correlations/package_test.go
new file mode 100644
index 000000000000..334bbbdc8b54
--- /dev/null
+++ b/exporter/signalfxexporter/internal/apm/correlations/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package correlations
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/signalfxexporter/internal/apm/requests/requestcounter/package_test.go b/exporter/signalfxexporter/internal/apm/requests/requestcounter/package_test.go
new file mode 100644
index 000000000000..2cdaafa8e8fb
--- /dev/null
+++ b/exporter/signalfxexporter/internal/apm/requests/requestcounter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package requestcounter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/signalfxexporter/internal/apm/requests/sender.go b/exporter/signalfxexporter/internal/apm/requests/sender.go
index e06e649ea33a..708f00571655 100644
--- a/exporter/signalfxexporter/internal/apm/requests/sender.go
+++ b/exporter/signalfxexporter/internal/apm/requests/sender.go
@@ -48,8 +48,14 @@ func (rs *ReqSender) Send(req *http.Request) {
go rs.processRequests()
}
- // Block until we can get through a request
- rs.requests <- req
+ // Block until we can get the request through, or until the context is cancelled. The request processor
+ // shuts down when the context has been cancelled, so there's no value added to keep blocking. Blocking
+ // forever results in Shutdown never completing.
+ select {
+ case <-rs.ctx.Done():
+ return
+ case rs.requests <- req:
+ }
}
}
diff --git a/exporter/signalfxexporter/internal/apm/tracetracker/package_test.go b/exporter/signalfxexporter/internal/apm/tracetracker/package_test.go
new file mode 100644
index 000000000000..15d86ec4d3a0
--- /dev/null
+++ b/exporter/signalfxexporter/internal/apm/tracetracker/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package tracetracker
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/signalfxexporter/internal/apm/tracetracker/shims.go b/exporter/signalfxexporter/internal/apm/tracetracker/shims.go
deleted file mode 100644
index f239cc198463..000000000000
--- a/exporter/signalfxexporter/internal/apm/tracetracker/shims.go
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-// Originally copied from https://github.com/signalfx/signalfx-agent/blob/fbc24b0fdd3884bd0bbfbd69fe3c83f49d4c0b77/pkg/apm/tracetracker/shims.go
-
-package tracetracker // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/apm/tracetracker"
-
-var (
- _ SpanList = (*fakeSpanList)(nil)
- _ Span = (*fakeSpan)(nil)
-)
-
-// Span is a generic interface for accessing span metadata.
-type Span interface {
- Environment() (string, bool)
- ServiceName() (string, bool)
- Tag(string) (string, bool)
- NumTags() int
-}
-
-// SpanList is a generic interface for accessing a list of spans.
-type SpanList interface {
- Len() int
- At(i int) Span
-}
-
-type fakeSpan struct {
- serviceName string
- tags map[string]string
-}
-
-func (s fakeSpan) Environment() (string, bool) {
- env, ok := s.tags["environment"]
- return env, ok
-}
-
-func (s fakeSpan) ServiceName() (string, bool) {
- return s.serviceName, s.serviceName != ""
-}
-
-func (s fakeSpan) Tag(tag string) (string, bool) {
- t, ok := s.tags[tag]
- return t, ok
-}
-
-func (s fakeSpan) NumTags() int {
- return len(s.tags)
-}
-
-type fakeSpanList []fakeSpan
-
-func (s fakeSpanList) Len() int {
- return len(s)
-}
-
-func (s fakeSpanList) At(i int) Span {
- return s[i]
-}
diff --git a/exporter/signalfxexporter/internal/apm/tracetracker/tracker.go b/exporter/signalfxexporter/internal/apm/tracetracker/tracker.go
index e1511b0e36c9..9637d111549f 100644
--- a/exporter/signalfxexporter/internal/apm/tracetracker/tracker.go
+++ b/exporter/signalfxexporter/internal/apm/tracetracker/tracker.go
@@ -7,14 +7,20 @@ package tracetracker // import "github.com/open-telemetry/opentelemetry-collecto
import (
"context"
"strings"
- "sync"
- "sync/atomic"
"time"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
+
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/apm/correlations"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/apm/log"
)
+// fallbackEnvironment is the environment value to use if no environment is found in the span.
+// This is the same value that is being set on the backend on spans that don't have an environment.
+const fallbackEnvironment = "unknown"
+
// DefaultDimsToSyncSource are the default dimensions to sync correlated environment and services onto.
var DefaultDimsToSyncSource = map[string]string{
"container_id": "container_id",
@@ -25,16 +31,11 @@ var DefaultDimsToSyncSource = map[string]string{
// spans passed through ProcessSpans. It supports expiry of service names if
// they are not seen for a certain amount of time.
type ActiveServiceTracker struct {
- dpCacheLock sync.Mutex
-
log log.Logger
// hostIDDims is the map of key/values discovered by the agent that identify the host
hostIDDims map[string]string
- // sendTraceHostCorrelationMetrics turns metric emission on and off
- sendTraceHostCorrelationMetrics bool
-
// hostServiceCache is a cache of services associated with the host
hostServiceCache *TimeoutCache
@@ -52,37 +53,16 @@ type ActiveServiceTracker struct {
// for more information
tenantEmptyEnvironmentCache *TimeoutCache
- // cache of service names to generate datapoints for
- dpCache map[string]struct{}
-
timeNow func() time.Time
// correlationClient is the client used for updating infrastructure correlation properties
correlationClient correlations.CorrelationClient
- // Internal metrics
- spansProcessed int64
-
// Map of dimensions to sync to with the key being the span attribute to lookup and the value being
// the dimension to sync to.
dimsToSyncSource map[string]string
}
-// addServiceToDPCache creates a datapoint for the given service in the dpCache.
-func (a *ActiveServiceTracker) addServiceToDPCache(service string) {
- a.dpCacheLock.Lock()
- defer a.dpCacheLock.Unlock()
-
- a.dpCache[service] = struct{}{}
-}
-
-// removeServiceFromDPCache removes the datapoint for the given service from the dpCache
-func (a *ActiveServiceTracker) removeServiceFromDPCache(service string) {
- a.dpCacheLock.Lock()
- delete(a.dpCache, service)
- a.dpCacheLock.Unlock()
-}
-
// LoadHostIDDimCorrelations asynchronously retrieves all known correlations from the backend
// for all known hostIDDims. This allows the agent to timeout and manage correlation
// deletions on restart.
@@ -97,11 +77,6 @@ func (a *ActiveServiceTracker) LoadHostIDDimCorrelations() {
// Note that only the value is set for the host service cache because we only track services for the host
// therefore there we don't need to include the dim key and value on the cache key
if isNew := a.hostServiceCache.UpdateOrCreate(&CacheKey{value: service}, a.timeNow()); isNew {
- if a.sendTraceHostCorrelationMetrics {
- // create datapoint for service
- a.addServiceToDPCache(service)
- }
-
a.log.WithFields(log.Fields{"service": service}).Debug("Tracking service name from trace span")
}
}
@@ -125,104 +100,55 @@ func New(
timeout time.Duration,
correlationClient correlations.CorrelationClient,
hostIDDims map[string]string,
- sendTraceHostCorrelationMetrics bool,
dimsToSyncSource map[string]string,
) *ActiveServiceTracker {
a := &ActiveServiceTracker{
- log: log,
- hostIDDims: hostIDDims,
- hostServiceCache: NewTimeoutCache(timeout),
- hostEnvironmentCache: NewTimeoutCache(timeout),
- tenantServiceCache: NewTimeoutCache(timeout),
- tenantEnvironmentCache: NewTimeoutCache(timeout),
- tenantEmptyEnvironmentCache: NewTimeoutCache(timeout),
- dpCache: make(map[string]struct{}),
- correlationClient: correlationClient,
- sendTraceHostCorrelationMetrics: sendTraceHostCorrelationMetrics,
- timeNow: time.Now,
- dimsToSyncSource: dimsToSyncSource,
+ log: log,
+ hostIDDims: hostIDDims,
+ hostServiceCache: NewTimeoutCache(timeout),
+ hostEnvironmentCache: NewTimeoutCache(timeout),
+ tenantServiceCache: NewTimeoutCache(timeout),
+ tenantEnvironmentCache: NewTimeoutCache(timeout),
+ tenantEmptyEnvironmentCache: NewTimeoutCache(timeout),
+ correlationClient: correlationClient,
+ timeNow: time.Now,
+ dimsToSyncSource: dimsToSyncSource,
}
a.LoadHostIDDimCorrelations()
return a
}
-// AddSpansGeneric accepts a list of trace spans and uses them to update the
+// ProcessTraces accepts a list of trace spans and uses them to update the
// current list of active services. This is thread-safe.
-func (a *ActiveServiceTracker) AddSpansGeneric(_ context.Context, spans SpanList) {
+func (a *ActiveServiceTracker) ProcessTraces(_ context.Context, traces ptrace.Traces) {
// Take current time once since this is a system call.
now := a.timeNow()
- for i := 0; i < spans.Len(); i++ {
- a.processEnvironment(spans.At(i), now)
- a.processService(spans.At(i), now)
+ for i := 0; i < traces.ResourceSpans().Len(); i++ {
+ a.processEnvironment(traces.ResourceSpans().At(i).Resource(), now)
+ a.processService(traces.ResourceSpans().At(i).Resource(), now)
}
-
- // Protected by lock above
- atomic.AddInt64(&a.spansProcessed, int64(spans.Len()))
}
-func (a *ActiveServiceTracker) processEnvironment(span Span, now time.Time) {
- if span.NumTags() == 0 {
+func (a *ActiveServiceTracker) processEnvironment(res pcommon.Resource, now time.Time) {
+ attrs := res.Attributes()
+ if attrs.Len() == 0 {
return
}
- environment, environmentFound := span.Environment()
-
- if !environmentFound || strings.TrimSpace(environment) == "" {
- // The following is ONLY to mitigate a corner case scenario where the environment for a container/pod is set on
- // the backend with an old default environment set by the agent, and the agent has been restarted with no
- // default environment. On restart, the agent only fetches existing environment values for hostIDDims, and does
- // not fetch for containers/pod dims. If a container/pod is emitting spans without an environment value, then
- // the agent won't be able to overwrite the value. The agent is also unable to age out environment values for
- // containers/pods from startup.
- //
- // Under that VERY specific circumstance, we need to fetch and delete the environment values for each
- // pod/container that we have not already scraped an environment off of this agent runtime.
- for sourceAttr, dimName := range a.dimsToSyncSource {
- sourceAttr := sourceAttr
- dimName := dimName
- if dimValue, ok := span.Tag(sourceAttr); ok {
- // look up the dimension / value in the environment cache to ensure it doesn't already exist
- // if it does exist, this means we've already scraped and overwritten what was on the backend
- // probably from another span. This also implies that some spans for the tenant have an environment
- // and some do not.
- a.tenantEnvironmentCache.RunIfKeyDoesNotExist(&CacheKey{dimName: dimName, dimValue: dimValue}, func() {
- // create a cache key ensuring that we don't fetch environment values multiple times for spans with
- // empty environments
- if isNew := a.tenantEmptyEnvironmentCache.UpdateOrCreate(&CacheKey{dimName: dimName, dimValue: dimValue}, now); isNew {
- // get the existing value from the backend
- a.correlationClient.Get(dimName, dimValue, func(response map[string][]string) {
- if len(response) == 0 {
- return
- }
-
- // look for the existing environment value
- environments, ok := response["sf_environments"]
- if !ok || len(environments) == 0 {
- return
- }
-
- // Note: This cache operation is OK to execute inside of the encapsulating
- // tenantEnvironmentCache.RunIfKeyDoesNotExist() because it is actually inside an
- // asynchronous callback to the correlation client's Get(). So... by the time the callback
- // is actually executed, the parent RunIfKeyDoesNotExist will have already released the lock
- // on the cache
- a.tenantEnvironmentCache.RunIfKeyDoesNotExist(&CacheKey{dimName: dimName, dimValue: dimValue}, func() {
- a.correlationClient.Delete(&correlations.Correlation{
- Type: correlations.Environment,
- DimName: dimName,
- DimValue: dimValue,
- Value: environments[0], // We already checked for empty, and backend enforces 1 value max.
- }, func(_ *correlations.Correlation) {})
- })
- })
- }
- })
- }
- }
- // return so we don't set empty string or spaces as an environment value
- return
+ // Determine the environment value from the incoming spans.
+ // First check "deployment.environment" attribute.
+ // Then, try "environment" attribute (SignalFx schema).
+ // Otherwise, use the same fallback value as set on the backend.
+ var environment string
+ if env, ok := attrs.Get(conventions.AttributeDeploymentEnvironment); ok {
+ environment = env.Str()
+ } else if env, ok = attrs.Get("environment"); ok {
+ environment = env.Str()
+ }
+ if strings.TrimSpace(environment) == "" {
+ environment = fallbackEnvironment
}
// update the environment for the hostIDDims
@@ -236,7 +162,7 @@ func (a *ActiveServiceTracker) processEnvironment(span Span, now time.Time) {
DimName: dimName,
DimValue: dimValue,
Value: environment,
- }, func(cor *correlations.Correlation, err error) {
+ }, func(_ *correlations.Correlation, err error) {
if err == nil {
a.hostEnvironmentCache.UpdateOrCreate(&CacheKey{value: environment}, now)
}
@@ -255,19 +181,19 @@ func (a *ActiveServiceTracker) processEnvironment(span Span, now time.Time) {
for sourceAttr, dimName := range a.dimsToSyncSource {
sourceAttr := sourceAttr
dimName := dimName
- if dimValue, ok := span.Tag(sourceAttr); ok {
+ if val, ok := attrs.Get(sourceAttr); ok {
// Note that the value is not set on the cache key. We only send the first environment received for a
// given pod/container, and we never delete the values set on the container/pod dimension.
// So we only need to cache the dim name and dim value that have been associated with an environment.
- if exists := a.tenantEnvironmentCache.UpdateIfExists(&CacheKey{dimName: dimName, dimValue: dimValue}, now); !exists {
+ if exists := a.tenantEnvironmentCache.UpdateIfExists(&CacheKey{dimName: dimName, dimValue: val.Str()}, now); !exists {
a.correlationClient.Correlate(&correlations.Correlation{
Type: correlations.Environment,
DimName: dimName,
- DimValue: dimValue,
+ DimValue: val.Str(),
Value: environment,
- }, func(cor *correlations.Correlation, err error) {
+ }, func(_ *correlations.Correlation, err error) {
if err == nil {
- a.tenantEnvironmentCache.UpdateOrCreate(&CacheKey{dimName: dimName, dimValue: dimValue}, now)
+ a.tenantEnvironmentCache.UpdateOrCreate(&CacheKey{dimName: dimName, dimValue: val.Str()}, now)
}
})
}
@@ -275,9 +201,10 @@ func (a *ActiveServiceTracker) processEnvironment(span Span, now time.Time) {
}
}
-func (a *ActiveServiceTracker) processService(span Span, now time.Time) {
+func (a *ActiveServiceTracker) processService(res pcommon.Resource, now time.Time) {
// Can't do anything if the spans don't have a local service name
- service, ok := span.ServiceName()
+ serviceNameAttr, ok := res.Attributes().Get(conventions.AttributeServiceName)
+ service := serviceNameAttr.Str()
if !ok || service == "" {
return
}
@@ -294,7 +221,7 @@ func (a *ActiveServiceTracker) processService(span Span, now time.Time) {
DimName: dimName,
DimValue: dimValue,
Value: service,
- }, func(cor *correlations.Correlation, err error) {
+ }, func(_ *correlations.Correlation, err error) {
if err == nil {
a.hostServiceCache.UpdateOrCreate(&CacheKey{value: service}, now)
}
@@ -306,11 +233,6 @@ func (a *ActiveServiceTracker) processService(span Span, now time.Time) {
}
}
- if a.sendTraceHostCorrelationMetrics {
- // create datapoint for service
- a.addServiceToDPCache(service)
- }
-
a.log.WithFields(log.Fields{"service": service}).Debug("Tracking service name from trace span")
}
@@ -319,19 +241,19 @@ func (a *ActiveServiceTracker) processService(span Span, now time.Time) {
for sourceAttr, dimName := range a.dimsToSyncSource {
sourceAttr := sourceAttr
dimName := dimName
- if dimValue, ok := span.Tag(sourceAttr); ok {
+ if val, ok := res.Attributes().Get(sourceAttr); ok {
// Note that the value is not set on the cache key. We only send the first service received for a
// given pod/container, and we never delete the values set on the container/pod dimension.
// So we only need to cache the dim name and dim value that have been associated with a service.
- if exists := a.tenantServiceCache.UpdateIfExists(&CacheKey{dimName: dimName, dimValue: dimValue}, now); !exists {
+ if exists := a.tenantServiceCache.UpdateIfExists(&CacheKey{dimName: dimName, dimValue: val.Str()}, now); !exists {
a.correlationClient.Correlate(&correlations.Correlation{
Type: correlations.Service,
DimName: dimName,
- DimValue: dimValue,
+ DimValue: val.Str(),
Value: service,
- }, func(cor *correlations.Correlation, err error) {
+ }, func(_ *correlations.Correlation, err error) {
if err == nil {
- a.tenantServiceCache.UpdateOrCreate(&CacheKey{dimName: dimName, dimValue: dimValue}, now)
+ a.tenantServiceCache.UpdateOrCreate(&CacheKey{dimName: dimName, dimValue: val.Str()}, now)
}
})
}
@@ -352,14 +274,10 @@ func (a *ActiveServiceTracker) Purge() {
DimName: dimName,
DimValue: dimValue,
Value: purged.value,
- }, func(cor *correlations.Correlation) {
+ }, func(_ *correlations.Correlation) {
a.hostServiceCache.Delete(purged)
})
}
- // remove host/service correlation metric from tracker
- if a.sendTraceHostCorrelationMetrics {
- a.removeServiceFromDPCache(purged.value)
- }
a.log.WithFields(log.Fields{"serviceName": purged.value}).Debug("No longer tracking service name from trace span")
}
@@ -373,7 +291,7 @@ func (a *ActiveServiceTracker) Purge() {
DimName: dimName,
DimValue: dimValue,
Value: purged.value,
- }, func(cor *correlations.Correlation) {
+ }, func(_ *correlations.Correlation) {
a.hostEnvironmentCache.Delete(purged)
a.log.WithFields(log.Fields{"environmentName": purged.value}).Debug("No longer tracking environment name from trace span")
})
diff --git a/exporter/signalfxexporter/internal/apm/tracetracker/tracker_test.go b/exporter/signalfxexporter/internal/apm/tracetracker/tracker_test.go
index 30640fda8eda..b7fb27695550 100644
--- a/exporter/signalfxexporter/internal/apm/tracetracker/tracker_test.go
+++ b/exporter/signalfxexporter/internal/apm/tracetracker/tracker_test.go
@@ -12,6 +12,9 @@ import (
"time"
"github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+ conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/apm/correlations"
"github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/apm/log"
@@ -26,52 +29,42 @@ func advanceTime(a *ActiveServiceTracker, minutes int64) {
a.timeNow = func() time.Time { return newNow }
}
-// mergeStringMaps merges n maps with a later map's keys overriding earlier maps
-func mergeStringMaps(maps ...map[string]string) map[string]string {
- ret := map[string]string{}
-
+// newResourceWithAttrs creates a new resource with the given attributes.
+func newResourceWithAttrs(maps ...map[string]string) pcommon.Resource {
+ res := pcommon.NewResource()
for _, m := range maps {
for k, v := range m {
- ret[k] = v
+ res.Attributes().PutStr(k, v)
}
}
-
- return ret
+ return res
}
func TestExpiration(t *testing.T) {
correlationClient := &correlationTestClient{}
hostIDDims := map[string]string{"host": "test", "AWSUniqueId": "randomAWSUniqueId"}
- a := New(log.Nil, 5*time.Minute, correlationClient, hostIDDims, true, DefaultDimsToSyncSource)
+ a := New(log.Nil, 5*time.Minute, correlationClient, hostIDDims, DefaultDimsToSyncSource)
setTime(a, time.Unix(100, 0))
- a.AddSpansGeneric(context.Background(), fakeSpanList{
- {
- serviceName: "one",
- tags: mergeStringMaps(hostIDDims, map[string]string{"environment": "environment1"}),
- },
- {
- serviceName: "two",
- tags: mergeStringMaps(hostIDDims, map[string]string{"environment": "environment2"}),
- },
- {
- serviceName: "three",
- tags: mergeStringMaps(hostIDDims, map[string]string{"environment": "environment3"}),
- },
- })
+ fakeTraces := ptrace.NewTraces()
+ newResourceWithAttrs(hostIDDims, map[string]string{conventions.AttributeServiceName: "one", "environment": "environment1"}).
+ CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ newResourceWithAttrs(hostIDDims, map[string]string{conventions.AttributeServiceName: "two", "environment": "environment2"}).
+ CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ newResourceWithAttrs(hostIDDims, map[string]string{conventions.AttributeServiceName: "three", "environment": "environment3"}).
+ CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ a.ProcessTraces(context.Background(), fakeTraces)
assert.Equal(t, int64(3), a.hostServiceCache.ActiveCount, "activeServiceCount is not properly tracked")
assert.Equal(t, int64(3), a.hostEnvironmentCache.ActiveCount, "activeEnvironmentCount is not properly tracked")
advanceTime(a, 4)
- a.AddSpansGeneric(context.Background(), fakeSpanList{
- {
- serviceName: "two",
- tags: mergeStringMaps(hostIDDims, map[string]string{"environment": "environment2"}),
- },
- })
+ fakeTraces = ptrace.NewTraces()
+ newResourceWithAttrs(hostIDDims, map[string]string{conventions.AttributeServiceName: "two", "environment": "environment2"}).
+ CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ a.ProcessTraces(context.Background(), fakeTraces)
advanceTime(a, 2)
a.Purge()
@@ -92,7 +85,8 @@ type correlationTestClient struct {
correlateCounter int64
}
-func (c *correlationTestClient) Start() { /*no-op*/ }
+func (c *correlationTestClient) Start() { /*no-op*/ }
+func (c *correlationTestClient) Shutdown() { /*no-op*/ }
func (c *correlationTestClient) Get(_ string, dimValue string, cb correlations.SuccessfulGetCB) {
atomic.AddInt64(&c.getCounter, 1)
go func() {
@@ -145,29 +139,24 @@ func TestCorrelationEmptyEnvironment(t *testing.T) {
hostIDDims := map[string]string{"host": "test", "AWSUniqueId": "randomAWSUniqueId"}
wg.Add(len(hostIDDims))
containerLevelIDDims := map[string]string{"kubernetes_pod_uid": "testk8sPodUID", "container_id": "testContainerID"}
- a := New(log.Nil, 5*time.Minute, correlationClient, hostIDDims, true, DefaultDimsToSyncSource)
+ a := New(log.Nil, 5*time.Minute, correlationClient, hostIDDims, DefaultDimsToSyncSource)
wg.Wait() // wait for the initial fetch of hostIDDims to complete
- // for each container level ID we're going to perform a GET to check for an environment
- wg.Add(len(containerLevelIDDims))
- a.AddSpansGeneric(context.Background(), fakeSpanList{
- {tags: mergeStringMaps(hostIDDims, containerLevelIDDims)},
- {tags: mergeStringMaps(hostIDDims, containerLevelIDDims)},
- {tags: mergeStringMaps(hostIDDims, containerLevelIDDims)},
- })
-
- wg.Wait() // wait for the gets to complete to check for existing tenant environment values
-
- // there shouldn't be any active tenant environments. None of the spans had environments on them,
- // and we don't actively fetch and store environments from the back end. That's kind of the whole point of this
- // the workaround this is testing.
- assert.Equal(t, int64(0), a.tenantEnvironmentCache.ActiveCount, "tenantEnvironmentCache is not properly tracked")
- // ensure we only have 1 entry per container / pod id
- assert.Equal(t, int64(len(containerLevelIDDims)), a.tenantEmptyEnvironmentCache.ActiveCount, "tenantEmptyEnvironmentCount is not properly tracked")
- // len(hostIDDims) * len(containerLevelIDDims)
- assert.Equal(t, int64(len(containerLevelIDDims)+len(hostIDDims)), atomic.LoadInt64(&correlationClient.getCounter), "")
- // 1 DELETE * len(containerLevelIDDims)
- assert.Equal(t, len(containerLevelIDDims), len(correlationClient.getCorrelations()), "")
+ fakeTraces := ptrace.NewTraces()
+ fakeResource := newResourceWithAttrs(hostIDDims, containerLevelIDDims)
+ fakeResource.CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ fakeResource.CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ fakeResource.CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ a.ProcessTraces(context.Background(), fakeTraces)
+
+ cors := correlationClient.getCorrelations()
+ assert.Equal(t, 4, len(cors), "expected 4 correlations to be made")
+ for _, c := range cors {
+ assert.Contains(t, []string{"container_id", "kubernetes_pod_uid", "host", "AWSUniqueId"}, c.DimName)
+ assert.Contains(t, []string{"test", "randomAWSUniqueId", "testk8sPodUID", "testContainerID"}, c.DimValue)
+ assert.Equal(t, correlations.Type("environment"), c.Type)
+ assert.Equal(t, fallbackEnvironment, c.Value)
+ }
}
func TestCorrelationUpdates(t *testing.T) {
@@ -187,7 +176,7 @@ func TestCorrelationUpdates(t *testing.T) {
hostIDDims := map[string]string{"host": "test", "AWSUniqueId": "randomAWSUniqueId"}
wg.Add(len(hostIDDims))
containerLevelIDDims := map[string]string{"kubernetes_pod_uid": "testk8sPodUID", "container_id": "testContainerID"}
- a := New(log.Nil, 5*time.Minute, correlationClient, hostIDDims, true, DefaultDimsToSyncSource)
+ a := New(log.Nil, 5*time.Minute, correlationClient, hostIDDims, DefaultDimsToSyncSource)
wg.Wait()
assert.Equal(t, int64(1), a.hostServiceCache.ActiveCount, "activeServiceCount is not properly tracked")
assert.Equal(t, int64(1), a.hostEnvironmentCache.ActiveCount, "activeEnvironmentCount is not properly tracked")
@@ -200,20 +189,14 @@ func TestCorrelationUpdates(t *testing.T) {
setTime(a, time.Unix(100, 0))
- a.AddSpansGeneric(context.Background(), fakeSpanList{
- {
- serviceName: "one",
- tags: mergeStringMaps(hostIDDims, mergeStringMaps(containerLevelIDDims, map[string]string{"environment": "environment1"})),
- },
- {
- serviceName: "two",
- tags: mergeStringMaps(hostIDDims, mergeStringMaps(containerLevelIDDims, map[string]string{"environment": "environment2"})),
- },
- {
- serviceName: "three",
- tags: mergeStringMaps(hostIDDims, mergeStringMaps(containerLevelIDDims, map[string]string{"environment": "environment3"})),
- },
- })
+ fakeTraces := ptrace.NewTraces()
+ newResourceWithAttrs(containerLevelIDDims, map[string]string{conventions.AttributeServiceName: "one", "environment": "environment1"}).
+ CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ newResourceWithAttrs(containerLevelIDDims, map[string]string{conventions.AttributeServiceName: "two", "environment": "environment2"}).
+ CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ newResourceWithAttrs(containerLevelIDDims, map[string]string{conventions.AttributeServiceName: "three", "environment": "environment3"}).
+ CopyTo(fakeTraces.ResourceSpans().AppendEmpty().Resource())
+ a.ProcessTraces(context.Background(), fakeTraces)
assert.Equal(t, int64(3), a.hostServiceCache.ActiveCount, "activeServiceCount is not properly tracked")
assert.Equal(t, int64(3), a.hostEnvironmentCache.ActiveCount, "activeEnvironmentCount is not properly tracked")
diff --git a/exporter/signalfxexporter/internal/correlation/config.go b/exporter/signalfxexporter/internal/correlation/config.go
index 89e3cd5718a1..72e20ffa6854 100644
--- a/exporter/signalfxexporter/internal/correlation/config.go
+++ b/exporter/signalfxexporter/internal/correlation/config.go
@@ -17,7 +17,7 @@ import (
// DefaultConfig returns default configuration correlation values.
func DefaultConfig() *Config {
return &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Timeout: 5 * time.Second},
+ ClientConfig: confighttp.ClientConfig{Timeout: 5 * time.Second},
StaleServiceTimeout: 5 * time.Minute,
SyncAttributes: map[string]string{
conventions.AttributeK8SPodUID: conventions.AttributeK8SPodUID,
@@ -36,8 +36,8 @@ func DefaultConfig() *Config {
// Config defines configuration for correlation via traces.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"`
- correlations.Config `mapstructure:",squash"`
+ confighttp.ClientConfig `mapstructure:",squash"`
+ correlations.Config `mapstructure:",squash"`
// How long to wait after a trace span's service name is last seen before
// uncorrelating that service.
@@ -47,11 +47,11 @@ type Config struct {
}
func (c *Config) validate() error {
- if c.HTTPClientSettings.Endpoint == "" {
+ if c.ClientConfig.Endpoint == "" {
return errors.New("`correlation.endpoint` not specified")
}
- _, err := url.Parse(c.HTTPClientSettings.Endpoint)
+ _, err := url.Parse(c.ClientConfig.Endpoint)
if err != nil {
return err
}
diff --git a/exporter/signalfxexporter/internal/correlation/config_test.go b/exporter/signalfxexporter/internal/correlation/config_test.go
index 8de7b1211d99..78e4ec71846f 100644
--- a/exporter/signalfxexporter/internal/correlation/config_test.go
+++ b/exporter/signalfxexporter/internal/correlation/config_test.go
@@ -12,7 +12,7 @@ import (
func TestValidConfig(t *testing.T) {
config := DefaultConfig()
- config.HTTPClientSettings.Endpoint = "https://localhost"
+ config.ClientConfig.Endpoint = "https://localhost"
require.NoError(t, config.validate())
}
@@ -22,7 +22,7 @@ func TestInvalidConfig(t *testing.T) {
require.Error(t, noEndpointErr)
invalid = Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: ":123:456"},
+ ClientConfig: confighttp.ClientConfig{Endpoint: ":123:456"},
}
invalidURLErr := invalid.validate()
require.Error(t, invalidURLErr)
diff --git a/exporter/signalfxexporter/internal/correlation/correlation.go b/exporter/signalfxexporter/internal/correlation/correlation.go
index e2e3dd37957e..29c7ab783570 100644
--- a/exporter/signalfxexporter/internal/correlation/correlation.go
+++ b/exporter/signalfxexporter/internal/correlation/correlation.go
@@ -48,20 +48,20 @@ func NewTracker(cfg *Config, accessToken configopaque.String, params exporter.Cr
}
}
-func newCorrelationClient(cfg *Config, accessToken configopaque.String, params exporter.CreateSettings, host component.Host) (
+func newCorrelationClient(ctx context.Context, cfg *Config, accessToken configopaque.String, params exporter.CreateSettings, host component.Host) (
*correlationContext, error,
) {
- corrURL, err := url.Parse(cfg.HTTPClientSettings.Endpoint)
+ corrURL, err := url.Parse(cfg.ClientConfig.Endpoint)
if err != nil {
- return nil, fmt.Errorf("failed to parse correlation endpoint URL %q: %w", cfg.HTTPClientSettings.Endpoint, err)
+ return nil, fmt.Errorf("failed to parse correlation endpoint URL %q: %w", cfg.ClientConfig.Endpoint, err)
}
- httpClient, err := cfg.ToClient(host, params.TelemetrySettings)
+ httpClient, err := cfg.ToClientContext(ctx, host, params.TelemetrySettings)
if err != nil {
return nil, fmt.Errorf("failed to create correlation API client: %w", err)
}
- ctx, cancel := context.WithCancel(context.Background())
+ ctx, cancel := context.WithCancel(ctx)
client, err := correlations.NewCorrelationClient(ctx, newZapShim(params.Logger), httpClient, correlations.ClientConfig{
Config: cfg.Config,
@@ -80,9 +80,9 @@ func newCorrelationClient(cfg *Config, accessToken configopaque.String, params e
}, nil
}
-// AddSpans processes the provided spans to correlate the services and environment observed
+// ProcessTraces processes the provided spans to correlate the services and environment observed
// to the resources (host, pods, etc.) emitting the spans.
-func (cor *Tracker) AddSpans(ctx context.Context, traces ptrace.Traces) error {
+func (cor *Tracker) ProcessTraces(ctx context.Context, traces ptrace.Traces) error {
if cor == nil || traces.ResourceSpans().Len() == 0 {
return nil
}
@@ -107,7 +107,6 @@ func (cor *Tracker) AddSpans(ctx context.Context, traces ptrace.Traces) error {
map[string]string{
hostDimension: hostID.ID,
},
- false,
cor.cfg.SyncAttributes)
cor.pTicker = &timeutils.PolicyTicker{OnTickFunc: cor.traceTracker.Purge}
@@ -117,15 +116,15 @@ func (cor *Tracker) AddSpans(ctx context.Context, traces ptrace.Traces) error {
})
if cor.traceTracker != nil {
- cor.traceTracker.AddSpansGeneric(ctx, spanListWrap{traces.ResourceSpans()})
+ cor.traceTracker.ProcessTraces(ctx, traces)
}
return nil
}
// Start correlation tracking.
-func (cor *Tracker) Start(_ context.Context, host component.Host) (err error) {
- cor.correlation, err = newCorrelationClient(cor.cfg, cor.accessToken, cor.params, host)
+func (cor *Tracker) Start(ctx context.Context, host component.Host) (err error) {
+ cor.correlation, err = newCorrelationClient(ctx, cor.cfg, cor.accessToken, cor.params, host)
if err != nil {
return err
}
@@ -138,6 +137,7 @@ func (cor *Tracker) Shutdown(_ context.Context) error {
if cor != nil {
if cor.correlation != nil {
cor.correlation.cancel()
+ cor.correlation.CorrelationClient.Shutdown()
}
if cor.pTicker != nil {
diff --git a/exporter/signalfxexporter/internal/correlation/correlation_test.go b/exporter/signalfxexporter/internal/correlation/correlation_test.go
index acc5f3389875..74d688af9366 100644
--- a/exporter/signalfxexporter/internal/correlation/correlation_test.go
+++ b/exporter/signalfxexporter/internal/correlation/correlation_test.go
@@ -33,10 +33,10 @@ func TestTrackerAddSpans(t *testing.T) {
attr.PutStr("host.name", "localhost")
// Add empty first, should ignore.
- assert.NoError(t, tracker.AddSpans(context.Background(), ptrace.NewTraces()))
+ assert.NoError(t, tracker.ProcessTraces(context.Background(), ptrace.NewTraces()))
assert.Nil(t, tracker.traceTracker)
- assert.NoError(t, tracker.AddSpans(context.Background(), traces))
+ assert.NoError(t, tracker.ProcessTraces(context.Background(), traces))
assert.NotNil(t, tracker.traceTracker, "trace tracker should be set")
@@ -54,10 +54,10 @@ func TestTrackerStart(t *testing.T) {
{
name: "invalid http client settings fails",
config: &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "localhost:9090",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/non/existent",
},
},
@@ -86,6 +86,8 @@ func TestTrackerStart(t *testing.T) {
} else {
require.NoError(t, err)
}
+
+ assert.NoError(t, tracker.Shutdown(context.Background()))
})
}
}
diff --git a/exporter/signalfxexporter/internal/correlation/package_test.go b/exporter/signalfxexporter/internal/correlation/package_test.go
new file mode 100644
index 000000000000..80d3ec2c9232
--- /dev/null
+++ b/exporter/signalfxexporter/internal/correlation/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package correlation
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/signalfxexporter/internal/correlation/spanshims.go b/exporter/signalfxexporter/internal/correlation/spanshims.go
deleted file mode 100644
index c8ffe51679f5..000000000000
--- a/exporter/signalfxexporter/internal/correlation/spanshims.go
+++ /dev/null
@@ -1,74 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package correlation // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/correlation"
-
-import (
- "go.opentelemetry.io/collector/pdata/ptrace"
- conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/apm/tracetracker"
-)
-
-var (
- _ tracetracker.SpanList = (*spanListWrap)(nil)
- _ tracetracker.Span = (*spanWrap)(nil)
-)
-
-type spanWrap struct {
- ptrace.ResourceSpans
-}
-
-func (s spanWrap) Environment() (string, bool) {
- attr := s.Resource().Attributes()
-
- // Try to find deployment.environment before falling back to environment (SignalFx value).
- env, ok := attr.Get(conventions.AttributeDeploymentEnvironment)
- if ok && env.Str() != "" {
- return env.Str(), true
- }
-
- env, ok = attr.Get("environment")
- if ok && env.Str() != "" {
- return env.Str(), true
- }
-
- return "", false
-}
-
-func (s spanWrap) ServiceName() (string, bool) {
- attr := s.Resource().Attributes()
-
- serviceName, ok := attr.Get(conventions.AttributeServiceName)
- if ok && serviceName.Str() != "" {
- return serviceName.Str(), true
- }
-
- return "", false
-}
-
-func (s spanWrap) Tag(tag string) (string, bool) {
- attr := s.Resource().Attributes()
- val, ok := attr.Get(tag)
- if ok {
- return val.Str(), true
- }
- return "", false
-}
-
-func (s spanWrap) NumTags() int {
- attr := s.Resource().Attributes()
- return attr.Len()
-}
-
-type spanListWrap struct {
- ptrace.ResourceSpansSlice
-}
-
-func (s spanListWrap) Len() int {
- return s.ResourceSpansSlice.Len()
-}
-
-func (s spanListWrap) At(i int) tracetracker.Span {
- return spanWrap{ResourceSpans: s.ResourceSpansSlice.At(i)}
-}
diff --git a/exporter/signalfxexporter/internal/correlation/spanshims_test.go b/exporter/signalfxexporter/internal/correlation/spanshims_test.go
deleted file mode 100644
index a54dc94eae56..000000000000
--- a/exporter/signalfxexporter/internal/correlation/spanshims_test.go
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package correlation
-
-import (
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/pdata/ptrace"
-)
-
-func TestSpanShimList(t *testing.T) {
- spans := ptrace.NewResourceSpansSlice()
- spans.EnsureCapacity(2)
- s1 := spans.AppendEmpty()
- s2 := spans.AppendEmpty()
- wrapped := spanListWrap{spans}
- assert.Equal(t, 2, wrapped.Len())
- assert.Equal(t, spanWrap{s1}, wrapped.At(0))
- assert.Equal(t, spanWrap{s2}, wrapped.At(1))
-}
-
-func TestSpanShimList_Empty(t *testing.T) {
- spans := ptrace.NewResourceSpansSlice()
- wrapped := spanListWrap{spans}
- assert.Equal(t, 0, wrapped.Len())
-}
-
-func TestSpanShim_Service(t *testing.T) {
- span := ptrace.NewResourceSpans()
- res := span.Resource()
- attr := res.Attributes()
- attr.PutStr("service.name", "shopping-cart")
-
- wrapped := spanWrap{span}
-
- service, ok := wrapped.ServiceName()
- require.True(t, ok)
-
- assert.Equal(t, "shopping-cart", service)
-}
-
-func TestSpanShim_Environment(t *testing.T) {
- span := ptrace.NewResourceSpans()
- res := span.Resource()
- attr := res.Attributes()
- attr.PutStr("deployment.environment", "prod")
-
- wrapped := spanWrap{span}
-
- environment, ok := wrapped.Environment()
- require.True(t, ok)
-
- assert.Equal(t, "prod", environment)
-}
-
-func TestSpanShim_SignalfxEnvironment(t *testing.T) {
- span := ptrace.NewResourceSpans()
- res := span.Resource()
- attr := res.Attributes()
- attr.PutStr("environment", "prod")
-
- wrapped := spanWrap{span}
-
- environment, ok := wrapped.Environment()
- require.True(t, ok)
-
- assert.Equal(t, "prod", environment)
-}
-
-func TestSpanShim_Missing(t *testing.T) {
- span := ptrace.NewResourceSpans()
- wrapped := spanWrap{span}
-
- _, ok := wrapped.Environment()
- assert.False(t, ok)
- _, ok = wrapped.ServiceName()
- assert.False(t, ok)
-}
-
-func TestSpanShim_ResourceNil(t *testing.T) {
- span := ptrace.NewResourceSpans()
-
- wrapped := spanWrap{span}
-
- _, ok := wrapped.Environment()
- assert.False(t, ok)
- _, ok = wrapped.ServiceName()
- assert.False(t, ok)
- _, ok = wrapped.Tag("tag")
- assert.False(t, ok)
-
- assert.Equal(t, 0, wrapped.NumTags())
-}
-
-func TestSpanShim_Tags(t *testing.T) {
- span := ptrace.NewResourceSpans()
- res := span.Resource()
- attr := res.Attributes()
- attr.PutStr("tag1", "tag1val")
-
- wrapped := spanWrap{span}
-
- assert.Equal(t, 1, wrapped.NumTags())
-
- tag, ok := wrapped.Tag("tag1")
- assert.True(t, ok)
- assert.Equal(t, "tag1val", tag)
-
- tag, ok = wrapped.Tag("missing")
- assert.False(t, ok)
- assert.Equal(t, "", tag)
-}
diff --git a/exporter/signalfxexporter/internal/dimensions/metadata_test.go b/exporter/signalfxexporter/internal/dimensions/metadata_test.go
index fc938a481a4b..4fa352dc8f2b 100644
--- a/exporter/signalfxexporter/internal/dimensions/metadata_test.go
+++ b/exporter/signalfxexporter/internal/dimensions/metadata_test.go
@@ -205,6 +205,7 @@ func TestGetDimensionUpdateFromMetadata(t *testing.T) {
nil,
"-_.",
false,
+ true,
)
require.NoError(t, err)
assert.Equal(t, tt.want, getDimensionUpdateFromMetadata(tt.args.metadata, *converter))
diff --git a/exporter/signalfxexporter/internal/hostmetadata/host_linux.go b/exporter/signalfxexporter/internal/hostmetadata/host_linux.go
index dce8e7de296e..b543f767c64b 100644
--- a/exporter/signalfxexporter/internal/hostmetadata/host_linux.go
+++ b/exporter/signalfxexporter/internal/hostmetadata/host_linux.go
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0
//go:build linux
-// +build linux
// Taken from https://github.com/signalfx/golib/blob/master/metadata/hostmetadata/host-linux.go
// with minor modifications.
diff --git a/exporter/signalfxexporter/internal/hostmetadata/host_linux_test.go b/exporter/signalfxexporter/internal/hostmetadata/host_linux_test.go
index 5d0dcee2fdf6..5b662cfdcdf1 100644
--- a/exporter/signalfxexporter/internal/hostmetadata/host_linux_test.go
+++ b/exporter/signalfxexporter/internal/hostmetadata/host_linux_test.go
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0
//go:build linux
-// +build linux
// Taken from https://github.com/signalfx/golib/blob/master/metadata/hostmetadata/host-linux_test.go as is.
diff --git a/exporter/signalfxexporter/internal/hostmetadata/host_others.go b/exporter/signalfxexporter/internal/hostmetadata/host_others.go
index a010c6ee433e..c4f930b2a841 100644
--- a/exporter/signalfxexporter/internal/hostmetadata/host_others.go
+++ b/exporter/signalfxexporter/internal/hostmetadata/host_others.go
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0
//go:build !linux
-// +build !linux
// Taken from https://github.com/signalfx/golib/blob/master/metadata/hostmetadata/host-not-linux.go as is.
diff --git a/exporter/signalfxexporter/internal/hostmetadata/metadata_others_test.go b/exporter/signalfxexporter/internal/hostmetadata/metadata_others_test.go
index 4ba34c49d051..daec25ffc6c4 100644
--- a/exporter/signalfxexporter/internal/hostmetadata/metadata_others_test.go
+++ b/exporter/signalfxexporter/internal/hostmetadata/metadata_others_test.go
@@ -2,7 +2,6 @@
// SPDX-License-Identifier: Apache-2.0
//go:build !linux
-// +build !linux
package hostmetadata
diff --git a/exporter/signalfxexporter/internal/hostmetadata/package_test.go b/exporter/signalfxexporter/internal/hostmetadata/package_test.go
new file mode 100644
index 000000000000..3bc935fd715a
--- /dev/null
+++ b/exporter/signalfxexporter/internal/hostmetadata/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package hostmetadata
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/signalfxexporter/internal/metadata/generated_status.go b/exporter/signalfxexporter/internal/metadata/generated_status.go
index 5b483082c64c..574ac42ee36d 100644
--- a/exporter/signalfxexporter/internal/metadata/generated_status.go
+++ b/exporter/signalfxexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("signalfx")
)
const (
- Type = "signalfx"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/signalfx")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/signalfx")
+}
diff --git a/exporter/signalfxexporter/internal/translation/converter.go b/exporter/signalfxexporter/internal/translation/converter.go
index 7f704d9f8893..9a63c8815e12 100644
--- a/exporter/signalfxexporter/internal/translation/converter.go
+++ b/exporter/signalfxexporter/internal/translation/converter.go
@@ -36,6 +36,7 @@ type MetricsConverter struct {
datapointValidator *datapointValidator
translator *signalfx.FromTranslator
dropHistogramBuckets bool
+ processHistograms bool
}
// NewMetricsConverter creates a MetricsConverter from the passed in logger and
@@ -47,7 +48,8 @@ func NewMetricsConverter(
excludes []dpfilters.MetricFilter,
includes []dpfilters.MetricFilter,
nonAlphanumericDimChars string,
- dropHistogramBuckets bool) (*MetricsConverter, error) {
+ dropHistogramBuckets bool,
+ processHistograms bool) (*MetricsConverter, error) {
fs, err := dpfilters.NewFilterSet(excludes, includes)
if err != nil {
return nil, err
@@ -59,11 +61,13 @@ func NewMetricsConverter(
datapointValidator: newDatapointValidator(logger, nonAlphanumericDimChars),
translator: &signalfx.FromTranslator{},
dropHistogramBuckets: dropHistogramBuckets,
+ processHistograms: processHistograms,
}, nil
}
-// MetricsToSignalFxV2 converts the passed in MetricsData to SFx datapoints,
-// returning those datapoints and the number of time series that had to be
+// MetricsToSignalFxV2 converts the passed in MetricsData to SFx datapoints
+// and if processHistograms is set, histogram metrics are not converted to SFx format.
+// It returns those datapoints and the number of time series that had to be
// dropped because of errors or warnings.
func (c *MetricsConverter) MetricsToSignalFxV2(md pmetric.Metrics) []*sfxpb.DataPoint {
var sfxDataPoints []*sfxpb.DataPoint
@@ -77,7 +81,7 @@ func (c *MetricsConverter) MetricsToSignalFxV2(md pmetric.Metrics) []*sfxpb.Data
var initialDps []*sfxpb.DataPoint
for k := 0; k < ilm.Metrics().Len(); k++ {
currentMetric := ilm.Metrics().At(k)
- dps := c.translator.FromMetric(currentMetric, extraDimensions, c.dropHistogramBuckets)
+ dps := c.translator.FromMetric(currentMetric, extraDimensions, c.dropHistogramBuckets, c.processHistograms)
initialDps = append(initialDps, dps...)
}
diff --git a/exporter/signalfxexporter/internal/translation/converter_test.go b/exporter/signalfxexporter/internal/translation/converter_test.go
index f2f8457c7457..13c5fc711462 100644
--- a/exporter/signalfxexporter/internal/translation/converter_test.go
+++ b/exporter/signalfxexporter/internal/translation/converter_test.go
@@ -603,7 +603,7 @@ func Test_MetricDataToSignalFxV2(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- c, err := NewMetricsConverter(logger, nil, tt.excludeMetrics, tt.includeMetrics, "", true)
+ c, err := NewMetricsConverter(logger, nil, tt.excludeMetrics, tt.includeMetrics, "", true, true)
require.NoError(t, err)
md := tt.metricsFn()
gotSfxDataPoints := c.MetricsToSignalFxV2(md)
@@ -832,7 +832,7 @@ func Test_MetricDataToSignalFxV2WithHistogramBuckets(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- c, err := NewMetricsConverter(logger, nil, tt.excludeMetrics, tt.includeMetrics, "", false)
+ c, err := NewMetricsConverter(logger, nil, tt.excludeMetrics, tt.includeMetrics, "", false, true)
require.NoError(t, err)
md := tt.metricsFn()
gotSfxDataPoints := c.MetricsToSignalFxV2(md)
@@ -982,7 +982,7 @@ func Test_MetricDataToSignalFxV2WithHistogramBuckets(t *testing.T) {
for _, tt := range testsWithDropHistogramBuckets {
t.Run(tt.name, func(t *testing.T) {
- c, err := NewMetricsConverter(logger, nil, tt.excludeMetrics, tt.includeMetrics, "", true)
+ c, err := NewMetricsConverter(logger, nil, tt.excludeMetrics, tt.includeMetrics, "", true, true)
require.NoError(t, err)
md := tt.metricsFn()
gotSfxDataPoints := c.MetricsToSignalFxV2(md)
@@ -994,6 +994,110 @@ func Test_MetricDataToSignalFxV2WithHistogramBuckets(t *testing.T) {
assert.Equal(t, tt.wantSfxDataPoints, gotSfxDataPoints)
})
}
+
+ testsWithProcessHistogramsFalse := []struct {
+ name string
+ metricsFn func() pmetric.Metrics
+ excludeMetrics []dpfilters.MetricFilter
+ includeMetrics []dpfilters.MetricFilter
+ wantCount int
+ wantSfxDataPoints []*sfxpb.DataPoint
+ }{
+ {
+ name: "no_histograms",
+ metricsFn: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ ilm := out.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty()
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("gauge_int_with_dims")
+ initInt64PtWithLabels(m.SetEmptyGauge().DataPoints().AppendEmpty())
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("cumulative_double_with_dims")
+ m.SetEmptySum().SetIsMonotonic(true)
+ initDoublePtWithLabels(m.Sum().DataPoints().AppendEmpty())
+ }
+ return out
+ },
+ wantCount: 2,
+ wantSfxDataPoints: []*sfxpb.DataPoint{
+ int64SFxDataPoint("gauge_int_with_dims", &sfxMetricTypeGauge, labelMap),
+ doubleSFxDataPoint("cumulative_double_with_dims", &sfxMetricTypeCumulativeCounter, labelMap),
+ },
+ },
+ {
+ name: "only_histograms",
+ metricsFn: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ ilm := out.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty()
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("histo_with_buckets")
+ initHistDP(m.SetEmptyHistogram().DataPoints().AppendEmpty())
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("histo_with_buckets_2")
+ initHistDP(m.SetEmptyHistogram().DataPoints().AppendEmpty())
+ }
+ return out
+ },
+ wantCount: 0,
+ wantSfxDataPoints: []*sfxpb.DataPoint(nil),
+ },
+ {
+ name: "mixed_with_histograms",
+ metricsFn: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ ilm := out.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty()
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("gauge_int_with_dims")
+ initInt64PtWithLabels(m.SetEmptyGauge().DataPoints().AppendEmpty())
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("cumulative_double_with_dims")
+ m.SetEmptySum().SetIsMonotonic(true)
+ initDoublePtWithLabels(m.Sum().DataPoints().AppendEmpty())
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("histo_with_no_buckets")
+ initHistDPNoBuckets(m.SetEmptyHistogram().DataPoints().AppendEmpty())
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ m.SetName("histo_with_buckets")
+ initHistDP(m.SetEmptyHistogram().DataPoints().AppendEmpty())
+ }
+ return out
+ },
+ wantCount: 2,
+ wantSfxDataPoints: []*sfxpb.DataPoint{
+ int64SFxDataPoint("gauge_int_with_dims", &sfxMetricTypeGauge, labelMap),
+ doubleSFxDataPoint("cumulative_double_with_dims", &sfxMetricTypeCumulativeCounter, labelMap),
+ },
+ },
+ }
+
+ for _, tt := range testsWithProcessHistogramsFalse {
+ t.Run(tt.name, func(t *testing.T) {
+ c, err := NewMetricsConverter(logger, nil, tt.excludeMetrics, tt.includeMetrics, "", true, false)
+ require.NoError(t, err)
+ md := tt.metricsFn()
+ gotSfxDataPoints := c.MetricsToSignalFxV2(md)
+
+ // Sort SFx dimensions since they are built from maps and the order
+ // of those is not deterministic.
+ sortDimensions(tt.wantSfxDataPoints)
+ sortDimensions(gotSfxDataPoints)
+ assert.Equal(t, tt.wantCount, len(gotSfxDataPoints))
+ assert.Equal(t, tt.wantSfxDataPoints, gotSfxDataPoints)
+ })
+ }
}
func TestMetricDataToSignalFxV2WithTranslation(t *testing.T) {
@@ -1030,7 +1134,7 @@ func TestMetricDataToSignalFxV2WithTranslation(t *testing.T) {
},
},
}
- c, err := NewMetricsConverter(zap.NewNop(), translator, nil, nil, "", false)
+ c, err := NewMetricsConverter(zap.NewNop(), translator, nil, nil, "", false, true)
require.NoError(t, err)
assert.EqualValues(t, expected, c.MetricsToSignalFxV2(md))
}
@@ -1069,7 +1173,7 @@ func TestDimensionKeyCharsWithPeriod(t *testing.T) {
},
},
}
- c, err := NewMetricsConverter(zap.NewNop(), translator, nil, nil, "_-.", false)
+ c, err := NewMetricsConverter(zap.NewNop(), translator, nil, nil, "_-.", false, true)
require.NoError(t, err)
assert.EqualValues(t, expected, c.MetricsToSignalFxV2(md))
@@ -1087,7 +1191,7 @@ func TestInvalidNumberOfDimensions(t *testing.T) {
for i := 0; i < 10; i++ {
dp.Attributes().PutStr(fmt.Sprint("dim_key_", i), fmt.Sprint("dim_val_", i))
}
- c, err := NewMetricsConverter(logger, nil, nil, nil, "_-.", false)
+ c, err := NewMetricsConverter(logger, nil, nil, nil, "_-.", false, true)
require.NoError(t, err)
assert.EqualValues(t, 1, len(c.MetricsToSignalFxV2(md)))
// No log message should be printed
@@ -1193,7 +1297,7 @@ func TestNewMetricsConverter(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- got, err := NewMetricsConverter(zap.NewNop(), nil, tt.excludes, nil, "", false)
+ got, err := NewMetricsConverter(zap.NewNop(), nil, tt.excludes, nil, "", false, true)
if tt.wantErr {
assert.Error(t, err)
return
@@ -1253,7 +1357,7 @@ func TestMetricsConverter_ConvertDimension(t *testing.T) {
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- c, err := NewMetricsConverter(zap.NewNop(), tt.fields.metricTranslator, nil, nil, tt.fields.nonAlphanumericDimChars, false)
+ c, err := NewMetricsConverter(zap.NewNop(), tt.fields.metricTranslator, nil, nil, tt.fields.nonAlphanumericDimChars, false, true)
require.NoError(t, err)
if got := c.ConvertDimension(tt.args.dim); got != tt.want {
t.Errorf("ConvertDimension() = %v, want %v", got, tt.want)
diff --git a/exporter/signalfxexporter/internal/translation/dpfilters/dimensions_test.go b/exporter/signalfxexporter/internal/translation/dpfilters/dimensions_test.go
index 96e31b554123..223b34fa1767 100644
--- a/exporter/signalfxexporter/internal/translation/dpfilters/dimensions_test.go
+++ b/exporter/signalfxexporter/internal/translation/dpfilters/dimensions_test.go
@@ -122,9 +122,9 @@ func TestDimensionsFilter(t *testing.T) {
t.Run(test.name, func(t *testing.T) {
f, err := newDimensionsFilter(test.filter)
if test.shouldError {
- require.NotNil(t, err)
+ require.Error(t, err)
} else {
- require.Nil(t, err)
+ require.NoError(t, err)
}
require.Equal(t, test.shouldMatch, f.Matches(test.input))
diff --git a/exporter/signalfxexporter/internal/translation/dpfilters/package_test.go b/exporter/signalfxexporter/internal/translation/dpfilters/package_test.go
new file mode 100644
index 000000000000..1275a6708a52
--- /dev/null
+++ b/exporter/signalfxexporter/internal/translation/dpfilters/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package dpfilters
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/signalfxexporter/internal/translation/dpfilters/propertyfilter_test.go b/exporter/signalfxexporter/internal/translation/dpfilters/propertyfilter_test.go
index b66a687820d5..736bb856960d 100644
--- a/exporter/signalfxexporter/internal/translation/dpfilters/propertyfilter_test.go
+++ b/exporter/signalfxexporter/internal/translation/dpfilters/propertyfilter_test.go
@@ -72,7 +72,7 @@ property_value: '!/property.value/'`,
cm := confmap.NewFromStringMap(conf)
pf := &PropertyFilter{}
- err = cm.Unmarshal(pf, confmap.WithErrorUnused())
+ err = cm.Unmarshal(pf)
if test.expectedError != "" {
require.EqualError(t, err, test.expectedError)
} else {
diff --git a/exporter/signalfxexporter/internal/translation/dpfilters/string_test.go b/exporter/signalfxexporter/internal/translation/dpfilters/string_test.go
index 8e23aff35939..efdede79d77c 100644
--- a/exporter/signalfxexporter/internal/translation/dpfilters/string_test.go
+++ b/exporter/signalfxexporter/internal/translation/dpfilters/string_test.go
@@ -149,9 +149,9 @@ func TestStringFilter(t *testing.T) {
t.Run(test.name, func(t *testing.T) {
f, err := NewStringFilter(test.filter)
if test.shouldError {
- assert.NotNil(t, err)
+ assert.Error(t, err)
} else {
- assert.Nil(t, err)
+ assert.NoError(t, err)
}
for i := range test.inputs {
assert.Equal(t, test.shouldMatch[i], f.Matches(test.inputs[i]))
diff --git a/exporter/signalfxexporter/internal/translation/translator_test.go b/exporter/signalfxexporter/internal/translation/translator_test.go
index 288f2d500336..10f8c0281dd7 100644
--- a/exporter/signalfxexporter/internal/translation/translator_test.go
+++ b/exporter/signalfxexporter/internal/translation/translator_test.go
@@ -2960,7 +2960,7 @@ func testConverter(t *testing.T, mapping map[string]string) *MetricsConverter {
tr, err := NewMetricTranslator(rules, 1)
require.NoError(t, err)
- c, err := NewMetricsConverter(zap.NewNop(), tr, nil, nil, "", false)
+ c, err := NewMetricsConverter(zap.NewNop(), tr, nil, nil, "", false, true)
require.NoError(t, err)
return c
}
diff --git a/exporter/signalfxexporter/internal/utils/histogram_utils.go b/exporter/signalfxexporter/internal/utils/histogram_utils.go
new file mode 100644
index 000000000000..42f520237c79
--- /dev/null
+++ b/exporter/signalfxexporter/internal/utils/histogram_utils.go
@@ -0,0 +1,138 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package utils // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/signalfxexporter/internal/utils"
+
+import (
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk"
+)
+
+// removeAccessToken removes the SFX access token label if found in the give resource metric as a resource attribute
+func removeAccessToken(dest pmetric.ResourceMetrics) {
+ dest.Resource().Attributes().RemoveIf(func(k string, _ pcommon.Value) bool {
+ return k == splunk.SFxAccessTokenLabel
+ })
+}
+
+// matchedHistogramResourceMetrics returns a map with the keys set to the index of resource Metrics containing
+// Histogram metric type.
+// The value is another map consisting of the ScopeMetric indices in the RM which contain Histogram metric type as keys
+// and the value as an int slice with indices of the Histogram metric within the given scope.
+// Example output {1: {1: [0,2]}}.
+// The above output can be interpreted as Resource at index 1 contains Histogram metrics.
+// Within this resource specifically the scope metric at index 1 contain Histograms.
+// Lastly, the scope metric at index 1 has two Histogram type metric which can be found at index 0 and 2.
+func matchedHistogramResourceMetrics(md pmetric.Metrics) (matchedRMIdx map[int]map[int][]int) {
+ rms := md.ResourceMetrics()
+ for i := 0; i < rms.Len(); i++ {
+ rm := rms.At(i)
+ matchedSMIdx := matchedHistogramScopeMetrics(rm)
+ if len(matchedSMIdx) > 0 {
+ if matchedRMIdx == nil {
+ matchedRMIdx = map[int]map[int][]int{}
+ }
+ matchedRMIdx[i] = matchedSMIdx
+ }
+ }
+ return
+}
+
+// matchedHistogramScopeMetrics returns a map with keys equal to the ScopeMetric indices in the input resource metric
+// which contain Histogram metric type.
+// And the value is an int slice with indices of the Histogram metric within the keyed scope metric.
+// Example output {1: [0,2]}.
+// The above output can be interpreted as scope metrics at index 1 contains Histogram metrics.
+// And that the scope metric at index 1 has two Histogram type metric which can be found at index 0 and 2.
+func matchedHistogramScopeMetrics(rm pmetric.ResourceMetrics) (matchedSMIdx map[int][]int) {
+ ilms := rm.ScopeMetrics()
+ for i := 0; i < ilms.Len(); i++ {
+ ilm := ilms.At(i)
+ matchedMetricsIdx := matchedHistogramMetrics(ilm)
+ if len(matchedMetricsIdx) > 0 {
+ if matchedSMIdx == nil {
+ matchedSMIdx = map[int][]int{}
+ }
+ matchedSMIdx[i] = matchedMetricsIdx
+ }
+ }
+ return
+}
+
+// matchedHistogramMetrics returns an int slice with indices of metrics which are of Histogram type
+// within the input scope metric.
+// Example output [0,2].
+// The above output can be interpreted as input scope metric has Histogram type metric at index 0 and 2.
+func matchedHistogramMetrics(ilm pmetric.ScopeMetrics) (matchedMetricsIdx []int) {
+ ms := ilm.Metrics()
+ for i := 0; i < ms.Len(); i++ {
+ metric := ms.At(i)
+ if metric.Type() == pmetric.MetricTypeHistogram {
+ matchedMetricsIdx = append(matchedMetricsIdx, i)
+ }
+ }
+ return
+}
+
+// GetHistograms returns new Metrics slice containing only Histogram metrics found in the input
+// and the count of histogram metrics
+func GetHistograms(md pmetric.Metrics) (pmetric.Metrics, int) {
+ matchedMetricsIdxes := matchedHistogramResourceMetrics(md)
+ matchedRmCount := len(matchedMetricsIdxes)
+ if matchedRmCount == 0 {
+ return pmetric.Metrics{}, 0
+ }
+
+ metricCount := 0
+ srcRms := md.ResourceMetrics()
+ dest := pmetric.NewMetrics()
+ dstRms := dest.ResourceMetrics()
+ dstRms.EnsureCapacity(matchedRmCount)
+
+ // Iterate over those ResourceMetrics which were found to contain histograms
+ for rmIdx, ilmMap := range matchedMetricsIdxes {
+ srcRm := srcRms.At(rmIdx)
+
+ // Copy resource metric properties to dest
+ destRm := dstRms.AppendEmpty()
+ srcRm.Resource().CopyTo(destRm.Resource())
+ destRm.SetSchemaUrl(srcRm.SchemaUrl())
+
+ // Remove Sfx access token
+ removeAccessToken(destRm)
+
+ matchedIlmCount := len(ilmMap)
+ destIlms := destRm.ScopeMetrics()
+ destIlms.EnsureCapacity(matchedIlmCount)
+ srcIlms := srcRm.ScopeMetrics()
+
+ // Iterate over ScopeMetrics which were found to contain histograms
+ for ilmIdx, metricIdxes := range ilmMap {
+ srcIlm := srcIlms.At(ilmIdx)
+
+ // Copy scope properties to dest
+ destIlm := destIlms.AppendEmpty()
+ srcIlm.Scope().CopyTo(destIlm.Scope())
+ destIlm.SetSchemaUrl(srcIlm.SchemaUrl())
+
+ matchedMetricCount := len(metricIdxes)
+ destMs := destIlm.Metrics()
+ destMs.EnsureCapacity(matchedMetricCount)
+ srcMs := srcIlm.Metrics()
+
+ // Iterate over Metrics which contain histograms
+ for _, srcIdx := range metricIdxes {
+ srcMetric := srcMs.At(srcIdx)
+
+ // Copy metric properties to dest
+ destMetric := destMs.AppendEmpty()
+ srcMetric.CopyTo(destMetric)
+ metricCount++
+ }
+ }
+ }
+
+ return dest, metricCount
+}
diff --git a/exporter/signalfxexporter/internal/utils/histogram_utils_test.go b/exporter/signalfxexporter/internal/utils/histogram_utils_test.go
new file mode 100644
index 000000000000..03d7f366a2c9
--- /dev/null
+++ b/exporter/signalfxexporter/internal/utils/histogram_utils_test.go
@@ -0,0 +1,337 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package utils
+
+import (
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest/pmetrictest"
+)
+
+func initMetric(m pmetric.Metric, name string, ty pmetric.MetricType) {
+ m.SetName(name)
+ m.SetDescription("")
+ m.SetUnit("1")
+ switch ty {
+ case pmetric.MetricTypeGauge:
+ m.SetEmptyGauge()
+ case pmetric.MetricTypeSum:
+ sum := m.SetEmptySum()
+ sum.SetIsMonotonic(true)
+ sum.SetAggregationTemporality(pmetric.AggregationTemporalityCumulative)
+ case pmetric.MetricTypeHistogram:
+ histo := m.SetEmptyHistogram()
+ histo.SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
+ case pmetric.MetricTypeExponentialHistogram:
+ histo := m.SetEmptyExponentialHistogram()
+ histo.SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
+ case pmetric.MetricTypeSummary:
+ m.SetEmptySummary()
+ }
+}
+
+func buildHistogramDP(dp pmetric.HistogramDataPoint, timestamp pcommon.Timestamp) {
+ dp.SetStartTimestamp(timestamp)
+ dp.SetTimestamp(timestamp)
+ dp.SetMin(1.0)
+ dp.SetMax(2)
+ dp.SetCount(5)
+ dp.SetSum(7.0)
+ dp.BucketCounts().FromRaw([]uint64{3, 2})
+ dp.ExplicitBounds().FromRaw([]float64{1, 2})
+ dp.Attributes().PutStr("k1", "v1")
+}
+
+func buildHistogram(im pmetric.Metric, name string, timestamp pcommon.Timestamp, dpCount int) {
+ initMetric(im, name, pmetric.MetricTypeHistogram)
+ idps := im.Histogram().DataPoints()
+ idps.EnsureCapacity(dpCount)
+
+ for i := 0; i < dpCount; i++ {
+ dp := idps.AppendEmpty()
+ buildHistogramDP(dp, timestamp)
+ }
+}
+
+func buildGauge(im pmetric.Metric, name string, timestamp pcommon.Timestamp, dpCount int) {
+ initMetric(im, name, pmetric.MetricTypeGauge)
+ idps := im.Gauge().DataPoints()
+ idps.EnsureCapacity(dpCount)
+
+ for i := 0; i < dpCount; i++ {
+ dp := idps.AppendEmpty()
+ dp.SetTimestamp(timestamp)
+ dp.SetDoubleValue(1000)
+ dp.Attributes().PutStr("k1", "v1")
+ }
+}
+
+func buildSum(im pmetric.Metric, name string, timestamp pcommon.Timestamp, dpCount int) {
+ initMetric(im, name, pmetric.MetricTypeSum)
+ idps := im.Sum().DataPoints()
+ idps.EnsureCapacity(dpCount)
+
+ for i := 0; i < dpCount; i++ {
+ dp := idps.AppendEmpty()
+ dp.SetStartTimestamp(timestamp)
+ dp.SetTimestamp(timestamp)
+ dp.SetIntValue(123)
+ dp.Attributes().PutStr("k1", "v1")
+ }
+}
+
+func TestHistogramsAreRetrieved(t *testing.T) {
+ ts := pcommon.NewTimestampFromTime(time.Date(2024, 2, 9, 20, 26, 13, 789, time.UTC))
+ tests := []struct {
+ name string
+ inMetricsFunc func() pmetric.Metrics
+ wantMetricCount int
+ wantMetrics func() pmetric.Metrics
+ }{
+ {
+ name: "no_histograms",
+ inMetricsFunc: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ ilm := out.ResourceMetrics().AppendEmpty().ScopeMetrics().AppendEmpty()
+ ilm.Metrics().EnsureCapacity(2)
+ {
+ m := ilm.Metrics().AppendEmpty()
+ buildGauge(m, "gauge", ts, 1)
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ buildGauge(m, "sum", ts, 1)
+ }
+ return out
+ },
+ wantMetricCount: 0,
+ wantMetrics: func() pmetric.Metrics { return pmetric.Metrics{} },
+ },
+ {
+ name: "only_histograms",
+ inMetricsFunc: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ rm := out.ResourceMetrics().AppendEmpty()
+ res := rm.Resource()
+ res.Attributes().PutStr("kr0", "vr0")
+ ilms := rm.ScopeMetrics()
+ ilms.EnsureCapacity(3)
+ ilm := ilms.AppendEmpty()
+ ilm.SetSchemaUrl("Scope SchemaUrl")
+ ilm.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm.Scope().SetName("Scope name")
+ ilm.Scope().SetVersion("Scope version")
+ ilm.Metrics().EnsureCapacity(2)
+ {
+ m := ilm.Metrics().AppendEmpty()
+ buildHistogram(m, "histogram_1", ts, 5)
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ buildHistogram(m, "histogram_2", ts, 1)
+ }
+ return out
+ },
+ wantMetricCount: 2,
+ wantMetrics: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ rm := out.ResourceMetrics().AppendEmpty()
+ res := rm.Resource()
+ res.Attributes().PutStr("kr0", "vr0")
+ ilm := rm.ScopeMetrics().AppendEmpty()
+ ilm.SetSchemaUrl("Scope SchemaUrl")
+ ilm.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm.Scope().SetName("Scope name")
+ ilm.Scope().SetVersion("Scope version")
+ ilm.Metrics().EnsureCapacity(2)
+ {
+ m := ilm.Metrics().AppendEmpty()
+ buildHistogram(m, "histogram_1", ts, 5)
+ }
+ {
+ m := ilm.Metrics().AppendEmpty()
+ buildHistogram(m, "histogram_2", ts, 1)
+ }
+ return out
+ },
+ },
+ {
+ name: "mixed_type_multiple_scopes",
+ inMetricsFunc: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ rm := out.ResourceMetrics().AppendEmpty()
+ res := rm.Resource()
+ res.Attributes().PutStr("kr0", "vr0")
+ rm.ScopeMetrics().AppendEmpty()
+ ilm0 := rm.ScopeMetrics().At(0)
+ ilm0.SetSchemaUrl("Scope SchemaUrl s0")
+ ilm0.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm0.Scope().SetName("Scope name s0")
+ ilm0.Scope().SetVersion("Scope version s0")
+ ilm0.Metrics().EnsureCapacity(2)
+ ilm0.Metrics().AppendEmpty()
+ buildHistogram(ilm0.Metrics().At(0), "histogram_1_s0", ts, 1)
+ ilm0.Metrics().AppendEmpty()
+ buildGauge(ilm0.Metrics().At(1), "gauge_s0", ts, 2)
+
+ rm.ScopeMetrics().AppendEmpty()
+ ilm1 := rm.ScopeMetrics().At(1)
+ ilm1.Metrics().AppendEmpty()
+ buildSum(ilm1.Metrics().At(0), "gauge_s1", ts, 2)
+
+ rm.ScopeMetrics().AppendEmpty()
+ ilm2 := rm.ScopeMetrics().At(2)
+ ilm2.SetSchemaUrl("Scope SchemaUrl s2")
+ ilm2.Scope().Attributes().PutStr("ks2", "vs2")
+ ilm2.Metrics().EnsureCapacity(2)
+ ilm2.Metrics().AppendEmpty()
+ buildHistogram(ilm2.Metrics().At(0), "histogram_1_s2", ts, 1)
+ ilm2.Metrics().AppendEmpty()
+ buildHistogram(ilm2.Metrics().At(1), "histogram_2_s2", ts, 2)
+ return out
+ },
+ wantMetricCount: 3,
+ wantMetrics: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ rm := out.ResourceMetrics().AppendEmpty()
+ res := rm.Resource()
+ res.Attributes().PutStr("kr0", "vr0")
+ rm.ScopeMetrics().AppendEmpty()
+ ilm0 := rm.ScopeMetrics().At(0)
+ ilm0.SetSchemaUrl("Scope SchemaUrl s0")
+ ilm0.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm0.Scope().SetName("Scope name s0")
+ ilm0.Scope().SetVersion("Scope version s0")
+ buildHistogram(ilm0.Metrics().AppendEmpty(), "histogram_1_s0", ts, 1)
+
+ rm.ScopeMetrics().AppendEmpty()
+ ilm1 := rm.ScopeMetrics().At(1)
+ ilm1.SetSchemaUrl("Scope SchemaUrl s2")
+ ilm1.Scope().Attributes().PutStr("ks2", "vs2")
+ ilm1.Metrics().EnsureCapacity(2)
+ ilm1.Metrics().AppendEmpty()
+ buildHistogram(ilm1.Metrics().At(0), "histogram_1_s2", ts, 1)
+ ilm1.Metrics().AppendEmpty()
+ buildHistogram(ilm1.Metrics().At(1), "histogram_2_s2", ts, 2)
+ return out
+ }},
+ {
+ name: "mixed_type_multiple_resources",
+ inMetricsFunc: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ out.ResourceMetrics().EnsureCapacity(3)
+ out.ResourceMetrics().AppendEmpty()
+ rm0 := out.ResourceMetrics().At(0)
+ rm0.SetSchemaUrl("Resource SchemaUrl r0")
+ rm0.Resource().Attributes().PutStr("kr0", "vr0")
+ rm0.ScopeMetrics().AppendEmpty()
+ ilm0r0 := rm0.ScopeMetrics().At(0)
+ ilm0r0.SetSchemaUrl("Scope SchemaUrl s0")
+ ilm0r0.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm0r0.Metrics().EnsureCapacity(2)
+ ilm0r0.Metrics().AppendEmpty()
+ buildHistogram(ilm0r0.Metrics().At(0), "histogram_1_s0_r0", ts, 1)
+ ilm0r0.Metrics().AppendEmpty()
+ buildGauge(ilm0r0.Metrics().At(1), "gauge_s0_r0", ts, 1)
+ rm0.ScopeMetrics().AppendEmpty()
+ ilm1r0 := rm0.ScopeMetrics().At(1)
+ ilm1r0.Metrics().AppendEmpty()
+ buildGauge(ilm1r0.Metrics().At(0), "gauge_s1_r0", ts, 1)
+
+ out.ResourceMetrics().AppendEmpty()
+ rm1 := out.ResourceMetrics().At(1)
+ rm1.Resource().Attributes().PutStr("kr1", "vr1")
+ ilm0r1 := rm1.ScopeMetrics().AppendEmpty()
+ ilm0r1.SetSchemaUrl("Scope SchemaUrl s0")
+ ilm0r1.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm0r1.Metrics().AppendEmpty()
+ buildGauge(ilm0r1.Metrics().At(0), "gauge_s0_r1", ts, 1)
+
+ out.ResourceMetrics().AppendEmpty()
+ rm2 := out.ResourceMetrics().At(2)
+ rm2.Resource().Attributes().PutStr("kr2", "vr2")
+ ilm0r2 := rm2.ScopeMetrics().AppendEmpty()
+ ilm0r2.SetSchemaUrl("Scope SchemaUrl s0")
+ ilm0r2.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm0r2.Metrics().AppendEmpty()
+ ilm0r2.Metrics().EnsureCapacity(2)
+ buildGauge(ilm0r2.Metrics().At(0), "gauge_s0_r2", ts, 1)
+ ilm0r2.Metrics().AppendEmpty()
+ buildHistogram(ilm0r2.Metrics().At(1), "histogram_s0_r2", ts, 1)
+
+ return out
+ },
+ wantMetricCount: 2,
+ wantMetrics: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ out.ResourceMetrics().AppendEmpty()
+ rm := out.ResourceMetrics().At(0)
+ rm.SetSchemaUrl("Resource SchemaUrl r0")
+ rm.Resource().Attributes().PutStr("kr0", "vr0")
+ rm.ScopeMetrics().AppendEmpty()
+ ilm0 := rm.ScopeMetrics().At(0)
+ ilm0.SetSchemaUrl("Scope SchemaUrl s0")
+ ilm0.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm0.Metrics().EnsureCapacity(1)
+ ilm0.Metrics().AppendEmpty()
+ buildHistogram(ilm0.Metrics().At(0), "histogram_1_s0_r0", ts, 1)
+
+ out.ResourceMetrics().AppendEmpty()
+ rm1 := out.ResourceMetrics().At(1)
+ rm1.Resource().Attributes().PutStr("kr2", "vr2")
+ ilm0r1 := rm1.ScopeMetrics().AppendEmpty()
+ ilm0r1.SetSchemaUrl("Scope SchemaUrl s0")
+ ilm0r1.Scope().Attributes().PutStr("ks0", "vs0")
+ ilm0r1.Metrics().AppendEmpty()
+ buildHistogram(ilm0r1.Metrics().At(0), "histogram_s0_r2", ts, 1)
+
+ return out
+ }},
+ {
+ name: "remove_access_token",
+ inMetricsFunc: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ rm := out.ResourceMetrics().AppendEmpty()
+ res := rm.Resource()
+ res.Attributes().PutStr("kr0", "vr0")
+ res.Attributes().PutStr("com.splunk.signalfx.access_token", "abcd")
+ ilms := rm.ScopeMetrics()
+ ilm := ilms.AppendEmpty()
+ buildHistogram(ilm.Metrics().AppendEmpty(), "histogram_1", ts, 1)
+ return out
+ },
+ wantMetricCount: 1,
+ wantMetrics: func() pmetric.Metrics {
+ out := pmetric.NewMetrics()
+ rm := out.ResourceMetrics().AppendEmpty()
+ res := rm.Resource()
+ res.Attributes().PutStr("kr0", "vr0")
+ ilms := rm.ScopeMetrics()
+ ilm := ilms.AppendEmpty()
+ buildHistogram(ilm.Metrics().AppendEmpty(), "histogram_1", ts, 1)
+ return out
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ md := tt.inMetricsFunc()
+ gotMetrics, gotCount := GetHistograms(md)
+ assert.Equal(t, tt.wantMetricCount, gotCount)
+ if tt.wantMetricCount == 0 {
+ assert.Equal(t, tt.wantMetrics(), gotMetrics)
+ } else {
+ err := pmetrictest.CompareMetrics(tt.wantMetrics(), gotMetrics,
+ pmetrictest.IgnoreResourceMetricsOrder(), pmetrictest.IgnoreScopeMetricsOrder())
+ assert.NoError(t, err)
+ }
+ })
+ }
+}
diff --git a/exporter/signalfxexporter/metadata.yaml b/exporter/signalfxexporter/metadata.yaml
index 777f6c51b5ce..7e11fe3224ed 100644
--- a/exporter/signalfxexporter/metadata.yaml
+++ b/exporter/signalfxexporter/metadata.yaml
@@ -1,9 +1,20 @@
type: signalfx
+scope_name: otelcol/signalfx
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, splunk, observiq, aws]
+ distributions: [contrib]
codeowners:
active: [dmitryax, crobert-1]
+tests:
+ config:
+ access_token: "my_fake_token"
+ ingest_url: "http://localhost:1234"
+ api_url: "http://localhost:1234"
+ sending_queue:
+ enabled: false
+ retry_on_failure:
+ enabled: false
+ expect_consumer_error: true
diff --git a/exporter/signalfxexporter/testdata/config.yaml b/exporter/signalfxexporter/testdata/config.yaml
index d82534b51563..edc8f0d9765b 100644
--- a/exporter/signalfxexporter/testdata/config.yaml
+++ b/exporter/signalfxexporter/testdata/config.yaml
@@ -79,3 +79,4 @@ signalfx/allsettings:
property_value: '!globbed*value'
dimension_name: globbed*
dimension_value: '!globbed*value'
+ send_otlp_histograms: true
diff --git a/exporter/skywalkingexporter/README.md b/exporter/skywalkingexporter/README.md
index 86859e0f0194..8168be3a5919 100644
--- a/exporter/skywalkingexporter/README.md
+++ b/exporter/skywalkingexporter/README.md
@@ -3,12 +3,13 @@
| Status | |
| ------------- |-----------|
-| Stability | [beta]: metrics, logs |
+| Stability | [unmaintained]: metrics, logs |
| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fskywalking%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fskywalking) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fskywalking%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fskywalking) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@liqiangz](https://www.github.com/liqiangz) |
+| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | |
+| Emeritus | [@liqiangz](https://www.github.com/liqiangz) |
-[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
+[unmaintained]: https://github.com/open-telemetry/opentelemetry-collector#unmaintained
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
diff --git a/exporter/skywalkingexporter/config.go b/exporter/skywalkingexporter/config.go
index 33da44d12b6b..dbe20d0c43bf 100644
--- a/exporter/skywalkingexporter/config.go
+++ b/exporter/skywalkingexporter/config.go
@@ -8,14 +8,15 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
// Config defines configuration for SkyWalking exporter.
type Config struct {
- configgrpc.GRPCClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ configgrpc.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
// The number of grpc streams that send the gRPC requests.
diff --git a/exporter/skywalkingexporter/config_test.go b/exporter/skywalkingexporter/config_test.go
index 17622d35ee30..5f28d24bccb9 100644
--- a/exporter/skywalkingexporter/config_test.go
+++ b/exporter/skywalkingexporter/config_test.go
@@ -14,6 +14,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configgrpc"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -41,7 +42,7 @@ func TestLoadConfig(t *testing.T) {
{
id: component.NewIDWithName(metadata.Type, "2"),
expected: &Config{
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -57,7 +58,7 @@ func TestLoadConfig(t *testing.T) {
TimeoutSettings: exporterhelper.TimeoutSettings{
Timeout: 10 * time.Second,
},
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Headers: map[string]configopaque.String{
"can you have a . here?": "F0000000-0000-0000-0000-000000000000",
"header1": "234",
@@ -65,8 +66,8 @@ func TestLoadConfig(t *testing.T) {
},
Endpoint: "1.2.3.4:11800",
Compression: "gzip",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "/var/lib/mycert.pem",
},
Insecure: false,
@@ -101,7 +102,7 @@ func TestLoadConfig(t *testing.T) {
func TestValidate(t *testing.T) {
c1 := &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: "",
},
NumStreams: 3,
@@ -109,7 +110,7 @@ func TestValidate(t *testing.T) {
err := c1.Validate()
assert.Error(t, err)
c2 := &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: "",
},
NumStreams: 0,
diff --git a/exporter/skywalkingexporter/factory.go b/exporter/skywalkingexporter/factory.go
index 8f42d5779907..61f1758e8d32 100644
--- a/exporter/skywalkingexporter/factory.go
+++ b/exporter/skywalkingexporter/factory.go
@@ -8,6 +8,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configgrpc"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -26,10 +27,10 @@ func NewFactory() exporter.Factory {
func createDefaultConfig() component.Config {
return &Config{
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
// We almost read 0 bytes, so no need to tune ReadBufferSize.
WriteBufferSize: 512 * 1024,
},
@@ -50,7 +51,7 @@ func createLogsExporter(
cfg,
oce.pushLogs,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
exporterhelper.WithTimeout(oCfg.TimeoutSettings),
exporterhelper.WithStart(oce.start),
@@ -67,7 +68,7 @@ func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, cfg
cfg,
oce.pushMetrics,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(oCfg.RetrySettings),
+ exporterhelper.WithRetry(oCfg.BackOffConfig),
exporterhelper.WithQueue(oCfg.QueueSettings),
exporterhelper.WithTimeout(oCfg.TimeoutSettings),
exporterhelper.WithStart(oce.start),
diff --git a/exporter/skywalkingexporter/factory_test.go b/exporter/skywalkingexporter/factory_test.go
index 65e064085478..948dc6b5d65d 100644
--- a/exporter/skywalkingexporter/factory_test.go
+++ b/exporter/skywalkingexporter/factory_test.go
@@ -37,9 +37,9 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "UseSecure",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: false,
},
},
@@ -49,7 +49,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "Keepalive",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Keepalive: &configgrpc.KeepaliveClientConfig{
Time: 30 * time.Second,
@@ -63,7 +63,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "Compression",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Compression: "gzip",
},
@@ -73,7 +73,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "Headers",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Headers: map[string]configopaque.String{
"hdr1": "val1",
@@ -86,7 +86,7 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "CompressionError",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
Compression: "unknown compression",
},
@@ -98,10 +98,10 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "CaCert",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "testdata/test_cert.pem",
},
Insecure: false,
@@ -113,10 +113,10 @@ func TestCreateTracesExporter(t *testing.T) {
{
name: "CertPemFileError",
config: &Config{
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: endpoint,
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "nosuchfile",
},
},
@@ -141,7 +141,7 @@ func TestCreateTracesExporter(t *testing.T) {
func checkErrorsAndStartAndShutdown(t *testing.T, exporter component.Component, err error, mustFailOnCreate, mustFailOnStart bool) {
if mustFailOnCreate {
- assert.NotNil(t, err)
+ assert.Error(t, err)
return
}
assert.NoError(t, err)
diff --git a/exporter/skywalkingexporter/generated_component_test.go b/exporter/skywalkingexporter/generated_component_test.go
new file mode 100644
index 000000000000..1827d9cf9e4f
--- /dev/null
+++ b/exporter/skywalkingexporter/generated_component_test.go
@@ -0,0 +1,94 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package skywalkingexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/skywalkingexporter/go.mod b/exporter/skywalkingexporter/go.mod
index ec9d0226227f..b9fcb4219fab 100644
--- a/exporter/skywalkingexporter/go.mod
+++ b/exporter/skywalkingexporter/go.mod
@@ -1,70 +1,77 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/skywalkingexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configgrpc v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- google.golang.org/grpc v1.59.0
- skywalking.apache.org/repo/goapi v0.0.0-20211122071111-ffc517fbfe21
+ github.com/cenkalti/backoff/v4 v4.3.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/common v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configgrpc v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ google.golang.org/grpc v1.63.2
+ skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4
)
require (
- cloud.google.com/go/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mostynb/go-grpc-compression v1.2.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/confignet v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/oauth2 v0.14.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231012201019-e917dd12ba7a // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/skywalkingexporter/go.sum b/exporter/skywalkingexporter/go.sum
index 758eef2c997e..aad0e9b46422 100644
--- a/exporter/skywalkingexporter/go.sum
+++ b/exporter/skywalkingexporter/go.sum
@@ -1,25 +1,20 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-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/compute/metadata v0.2.4-0.20230617002413-005d2dfb6b68/go.mod h1:1a3eRNYX12fs5UABBIXS8HXVvQbX9hRB/RkEBPORpe8=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
-github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k=
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=
@@ -30,22 +25,19 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
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/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-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -60,8 +52,6 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -69,12 +59,14 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
@@ -88,15 +80,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -108,88 +99,96 @@ github.com/mostynb/go-grpc-compression v1.2.2 h1:XaDbnRvt2+1vgr0b/l0qh4mJAfIxE0b
github.com/mostynb/go-grpc-compression v1.2.2/go.mod h1:GOCr2KBxXcblCuczg3YdLQlcin1/NfyDA348ckuCH6w=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
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/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/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=
-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.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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0 h1:PzIubN4/sjByhDRHLviCjJuweBXWFZWhghjg7cS28+M=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.46.0/go.mod h1:Ct6zzQEuGK3WpJs2n4dn+wfJYzd/+hNnxMRTWjGn30M=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
+github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0 h1:4yP/TphwQnbgLpJ72NymXaERVjLjuDAQp4iDKCTcv5g=
+go.opentelemetry.io/collector/config/configgrpc v0.98.0/go.mod h1:tIng0xx1XlVr4I0YG5bNpts0hZDjwzN3Jkz6cKaSH/s=
+go.opentelemetry.io/collector/config/confignet v0.98.0 h1:pXDBb2hFe10T/NMHlL/oMgk1aFfe4NmmJFdFoioyC9o=
+go.opentelemetry.io/collector/config/confignet v0.98.0/go.mod h1:3naWoPss70RhDHhYjGACi7xh4NcVRvs9itzIRVWyu1k=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 h1:4Pp6oUg3+e/6M4C0A/3kJ2VYa++dsWVTtGgLVj5xtHg=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
+golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
@@ -199,6 +198,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
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.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
+golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
+golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -209,15 +210,16 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/net v0.0.0-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-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-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/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
+golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
+golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.14.0 h1:P0Vrf/2538nmC0H+pEQ3MNFRRnVR7RlqyVw+bvm26z0=
-golang.org/x/oauth2 v0.14.0/go.mod h1:lAtNWgaWfL4cm7j2OV8TxGi9Qb7ECORx8DktCY74OwM=
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=
@@ -225,6 +227,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/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.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -232,16 +236,27 @@ golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20210917161153-d61c044b1678/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/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/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.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
+golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/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.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
+golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
+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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -254,31 +269,31 @@ golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapK
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
+golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
+golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
-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/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:H4O17MA/PE9BsGx3w+a+W2VOLLD1Qf7oJneAoU6WktY=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM=
google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
-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/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM=
+google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA=
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=
@@ -290,18 +305,17 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-skywalking.apache.org/repo/goapi v0.0.0-20211122071111-ffc517fbfe21 h1:USC28w3toXoRiNzSCN3lLgnmT8l6RokW7++GiXcNMCU=
-skywalking.apache.org/repo/goapi v0.0.0-20211122071111-ffc517fbfe21/go.mod h1:4KrWd+Oi4lkB+PtxZgIlf+3T6EECPru4fOWNMEHjxRk=
+skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4 h1:3YIFmsshgsU6FzHgnkG9Z24CkXkgoexBN5O0aSzK79g=
+skywalking.apache.org/repo/goapi v0.0.0-20240104145220-ba7202308dd4/go.mod h1:oD2dxcDAHVIt95Ee7kJHgZ5f64QNhrqTjQYARwfafc4=
diff --git a/exporter/skywalkingexporter/internal/metadata/generated_status.go b/exporter/skywalkingexporter/internal/metadata/generated_status.go
index 1f86caa24833..5edad7ceb341 100644
--- a/exporter/skywalkingexporter/internal/metadata/generated_status.go
+++ b/exporter/skywalkingexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("skywalking")
)
const (
- Type = "skywalking"
- MetricsStability = component.StabilityLevelBeta
- LogsStability = component.StabilityLevelBeta
+ MetricsStability = component.StabilityLevelUnmaintained
+ LogsStability = component.StabilityLevelUnmaintained
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/skywalking")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/skywalking")
+}
diff --git a/exporter/skywalkingexporter/metadata.yaml b/exporter/skywalkingexporter/metadata.yaml
index 42c59039b459..740d109da83b 100644
--- a/exporter/skywalkingexporter/metadata.yaml
+++ b/exporter/skywalkingexporter/metadata.yaml
@@ -1,9 +1,14 @@
type: skywalking
+scope_name: otelcol/skywalking
status:
class: exporter
stability:
- beta: [metrics, logs]
+ unmaintained: [metrics, logs]
distributions: [contrib]
codeowners:
- active: [liqiangz]
+ active: []
+ emeritus: [liqiangz]
+
+tests:
+ skip_lifecycle: true
diff --git a/exporter/skywalkingexporter/skywalking.go b/exporter/skywalkingexporter/skywalking.go
index 17a3cdafd0ae..a61b761fde2f 100644
--- a/exporter/skywalkingexporter/skywalking.go
+++ b/exporter/skywalkingexporter/skywalking.go
@@ -50,7 +50,7 @@ func newSwExporter(_ context.Context, cfg *Config, settings component.TelemetryS
metadata: metadata.New(nil),
settings: settings,
}
- for k, v := range cfg.GRPCClientSettings.Headers {
+ for k, v := range cfg.ClientConfig.Headers {
oce.metadata.Set(k, string(v))
}
return oce
@@ -58,7 +58,7 @@ func newSwExporter(_ context.Context, cfg *Config, settings component.TelemetryS
// start creates the gRPC client Connection
func (oce *swExporter) start(ctx context.Context, host component.Host) error {
- clientConn, err := oce.cfg.GRPCClientSettings.ToClientConn(ctx, host, oce.settings)
+ clientConn, err := oce.cfg.ClientConfig.ToClientConn(ctx, host, oce.settings)
if err != nil {
return err
}
diff --git a/exporter/skywalkingexporter/skywalking_benchmark_test.go b/exporter/skywalkingexporter/skywalking_benchmark_test.go
index e8084343b62c..4a232bbb19ad 100644
--- a/exporter/skywalkingexporter/skywalking_benchmark_test.go
+++ b/exporter/skywalkingexporter/skywalking_benchmark_test.go
@@ -126,9 +126,9 @@ func doInit(numStream int, t *testing.T) (*swExporter, *grpc.Server, *mockLogHan
NumConsumers: 1,
QueueSize: 1000,
},
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: addr.String(),
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
},
@@ -141,7 +141,7 @@ func doInit(numStream int, t *testing.T) (*swExporter, *grpc.Server, *mockLogHan
tt,
oce.pushLogs,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(tt.RetrySettings),
+ exporterhelper.WithRetry(tt.BackOffConfig),
exporterhelper.WithQueue(tt.QueueSettings),
exporterhelper.WithTimeout(tt.TimeoutSettings),
exporterhelper.WithStart(oce.start),
diff --git a/exporter/skywalkingexporter/skywalking_test.go b/exporter/skywalkingexporter/skywalking_test.go
index 7e9614ef2370..e75c957b621c 100644
--- a/exporter/skywalkingexporter/skywalking_test.go
+++ b/exporter/skywalkingexporter/skywalking_test.go
@@ -31,9 +31,9 @@ func TestSwExporter(t *testing.T) {
server, addr, handler := initializeGRPCTestServer(t, grpc.MaxConcurrentStreams(10))
tt := &Config{
NumStreams: 10,
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: addr.String(),
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
},
@@ -46,7 +46,7 @@ func TestSwExporter(t *testing.T) {
tt,
oce.pushLogs,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(tt.RetrySettings),
+ exporterhelper.WithRetry(tt.BackOffConfig),
exporterhelper.WithQueue(tt.QueueSettings),
exporterhelper.WithTimeout(tt.TimeoutSettings),
exporterhelper.WithStart(oce.start),
@@ -104,9 +104,9 @@ func TestSwExporter(t *testing.T) {
server, addr, handler2 := initializeGRPCTestServerMetric(t, grpc.MaxConcurrentStreams(10))
tt = &Config{
NumStreams: 10,
- GRPCClientSettings: configgrpc.GRPCClientSettings{
+ ClientConfig: configgrpc.ClientConfig{
Endpoint: addr.String(),
- TLSSetting: configtls.TLSClientSetting{
+ TLSSetting: configtls.ClientConfig{
Insecure: true,
},
},
@@ -119,7 +119,7 @@ func TestSwExporter(t *testing.T) {
tt,
oce.pushMetrics,
exporterhelper.WithCapabilities(consumer.Capabilities{MutatesData: false}),
- exporterhelper.WithRetry(tt.RetrySettings),
+ exporterhelper.WithRetry(tt.BackOffConfig),
exporterhelper.WithQueue(tt.QueueSettings),
exporterhelper.WithTimeout(tt.TimeoutSettings),
exporterhelper.WithStart(oce.start),
diff --git a/exporter/splunkhecexporter/README.md b/exporter/splunkhecexporter/README.md
index e9991e0ada66..57d17eff7466 100644
--- a/exporter/splunkhecexporter/README.md
+++ b/exporter/splunkhecexporter/README.md
@@ -4,14 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [beta]: traces, metrics, logs |
-| Distributions | [contrib], [observiq], [splunk] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fsplunkhec%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fsplunkhec) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fsplunkhec%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fsplunkhec) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@atoulme](https://www.github.com/atoulme), [@dmitryax](https://www.github.com/dmitryax) |
[beta]: https://github.com/open-telemetry/opentelemetry-collector#beta
[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-[observiq]: https://github.com/observIQ/observiq-otel-collector
-[splunk]: https://github.com/signalfx/splunk-otel-collector
## Configuration
@@ -29,14 +27,17 @@ The following configuration options can also be configured:
- `use_multi_metric_format` (default: false): Combines metrics with the same metadata to reduce ingest using the [multiple-metric JSON format](https://docs.splunk.com/Documentation/Splunk/9.0.0/Metrics/GetMetricsInOther#The_multiple-metric_JSON_format). Applicable in the `metrics` pipeline only.
- `disable_compression` (default: false): Whether to disable gzip compression over HTTP.
- `timeout` (default: 10s): HTTP timeout when sending data.
+- `http2_read_idle_timeout` (default = 10s): Send a ping frame for a health check if the connection has been idle for the configured value.
+ 0s means http/2 health check will be disabled.
+- `http2_ping_timeout` (default = 10s): Triggered by `http2_read_idle_timeout`; When there's no response to the ping within the configured value,
+ the connection will be closed. If this value is set to 0, it will default to 15s.
- `insecure_skip_verify` (default: false): Whether to skip checking the certificate of the HEC endpoint when sending data over HTTPS.
- `ca_file` (no default) Path to the CA cert to verify the server being connected to.
- `cert_file` (no default) Path to the TLS cert to use for client connections when TLS client auth is required.
- `key_file` (no default) Path to the TLS key to use for TLS required connections.
- `max_content_length_logs` (default: 2097152): Maximum log payload size in bytes. Log batches of bigger size will be
broken down into several requests. Default value is 2097152 bytes (2 MiB). Maximum allowed value is 838860800
- (~ 800 MB). Keep in mind that Splunk Observability backend doesn't accept requests bigger than 2 MiB. This
- configuration value can be raised only if used with Splunk Core/Cloud. When set to 0, it will treat as infinite length and it will create only 1 request per batch.
+ (~ 800 MB). When set to 0, it will treat as infinite length and it will create only 1 request per batch.
- `max_content_length_metrics` (default: 2097152): Maximum metric payload size in bytes. Metric batches of bigger size
will be broken down into several requests. Default value is 2097152 bytes (2 MiB). Maximum allowed value is 838860800
(~ 800 MB). When set to 0, it will treat as infinite length and it will create only one request per batch.
diff --git a/exporter/splunkhecexporter/batchperscope_test.go b/exporter/splunkhecexporter/batchperscope_test.go
index f196ec7ca8a5..3608bb4ee5c3 100644
--- a/exporter/splunkhecexporter/batchperscope_test.go
+++ b/exporter/splunkhecexporter/batchperscope_test.go
@@ -1,7 +1,7 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
-package splunkhecexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr"
+package splunkhecexporter
import (
"context"
diff --git a/exporter/splunkhecexporter/client.go b/exporter/splunkhecexporter/client.go
index 074e6776642b..33d72704e99c 100644
--- a/exporter/splunkhecexporter/client.go
+++ b/exporter/splunkhecexporter/client.go
@@ -618,7 +618,7 @@ func (c *client) stop(context.Context) error {
func (c *client) start(ctx context.Context, host component.Host) (err error) {
- httpClient, err := buildHTTPClient(c.config, host, c.telemetrySettings)
+ httpClient, err := buildHTTPClient(ctx, c.config, host, c.telemetrySettings)
if err != nil {
return err
}
@@ -662,10 +662,10 @@ func checkHecHealth(ctx context.Context, client *http.Client, healthCheckURL *ur
return nil
}
-func buildHTTPClient(config *Config, host component.Host, telemetrySettings component.TelemetrySettings) (*http.Client, error) {
+func buildHTTPClient(ctx context.Context, config *Config, host component.Host, telemetrySettings component.TelemetrySettings) (*http.Client, error) {
// we handle compression explicitly.
- config.HTTPClientSettings.Compression = ""
- return config.ToClient(host, telemetrySettings)
+ config.ClientConfig.Compression = ""
+ return config.ToClientContext(ctx, host, telemetrySettings)
}
func buildHTTPHeaders(config *Config, buildInfo component.BuildInfo) map[string]string {
diff --git a/exporter/splunkhecexporter/client_test.go b/exporter/splunkhecexporter/client_test.go
index ab6efdadaec3..e2943797d1ff 100644
--- a/exporter/splunkhecexporter/client_test.go
+++ b/exporter/splunkhecexporter/client_test.go
@@ -202,7 +202,9 @@ func (c *capturingData) ServeHTTP(w http.ResponseWriter, r *http.Request) {
panic(err)
}
go func() {
- c.receivedRequest <- receivedRequest{body, r.Header}
+ if c.receivedRequest != nil {
+ c.receivedRequest <- receivedRequest{body, r.Header}
+ }
}()
w.WriteHeader(c.statusCode)
}
@@ -214,7 +216,7 @@ func runMetricsExport(cfg *Config, metrics pmetric.Metrics, expectedBatchesNum i
}
factory := NewFactory()
- cfg.HTTPClientSettings.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
+ cfg.ClientConfig.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
cfg.Token = "1234-1234"
cfg.UseMultiMetricFormat = useMultiMetricsFormat
@@ -266,7 +268,7 @@ func runTraceExport(testConfig *Config, traces ptrace.Traces, expectedBatchesNum
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
+ cfg.ClientConfig.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
cfg.DisableCompression = testConfig.DisableCompression
cfg.MaxContentLengthTraces = testConfig.MaxContentLengthTraces
cfg.Token = "1234-1234"
@@ -328,7 +330,7 @@ func runLogExport(cfg *Config, ld plog.Logs, expectedBatchesNum int, t *testing.
panic(err)
}
- cfg.HTTPClientSettings.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
+ cfg.ClientConfig.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
cfg.Token = "1234-1234"
rr := make(chan receivedRequest)
@@ -1266,7 +1268,7 @@ func Test_PushMetricsData_Summary_NaN_Sum(t *testing.T) {
func TestReceiveMetricsWithCompression(t *testing.T) {
cfg := NewFactory().CreateDefaultConfig().(*Config)
cfg.MaxContentLengthMetrics = 1800
- request, err := runMetricsExport(cfg, createMetricsData(1, 100), 1, false, t)
+ request, err := runMetricsExport(cfg, createMetricsData(1, 100), 2, false, t)
assert.NoError(t, err)
assert.Equal(t, "gzip", request[0].headers.Get("Content-Encoding"))
assert.NotEqual(t, "", request)
@@ -1292,12 +1294,12 @@ func TestErrorReceived(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
+ cfg.ClientConfig.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
// Disable QueueSettings to ensure that we execute the request when calling ConsumeTraces
// otherwise we will not see the error.
cfg.QueueSettings.Enabled = false
// Disable retries to not wait too much time for the return error.
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
cfg.DisableCompression = true
cfg.Token = "1234-1234"
@@ -1346,8 +1348,8 @@ func TestInvalidURL(t *testing.T) {
// otherwise we will not see the error.
cfg.QueueSettings.Enabled = false
// Disable retries to not wait too much time for the return error.
- cfg.RetrySettings.Enabled = false
- cfg.HTTPClientSettings.Endpoint = "ftp://example.com:134"
+ cfg.BackOffConfig.Enabled = false
+ cfg.ClientConfig.Endpoint = "ftp://example.com:134"
cfg.Token = "1234-1234"
params := exportertest.NewNopCreateSettings()
exporter, err := factory.CreateTracesExporter(context.Background(), params, cfg)
@@ -1363,8 +1365,7 @@ func TestInvalidURL(t *testing.T) {
}
func TestHeartbeatStartupFailed(t *testing.T) {
- rr := make(chan receivedRequest)
- capture := capturingData{receivedRequest: rr, statusCode: 403}
+ capture := capturingData{statusCode: 403}
listener, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
panic(err)
@@ -1381,12 +1382,12 @@ func TestHeartbeatStartupFailed(t *testing.T) {
}()
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
+ cfg.ClientConfig.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
// Disable QueueSettings to ensure that we execute the request when calling ConsumeTraces
// otherwise we will not see the error.
cfg.QueueSettings.Enabled = false
// Disable retries to not wait too much time for the return error.
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
cfg.DisableCompression = true
cfg.Token = "1234-1234"
cfg.Heartbeat.Startup = true
@@ -1394,8 +1395,11 @@ func TestHeartbeatStartupFailed(t *testing.T) {
params := exportertest.NewNopCreateSettings()
exporter, err := factory.CreateTracesExporter(context.Background(), params, cfg)
assert.NoError(t, err)
- // The exporter's name is "" while generating default params
- assert.EqualError(t, exporter.Start(context.Background(), componenttest.NewNopHost()), ": heartbeat on startup failed: HTTP 403 \"Forbidden\"")
+ assert.EqualError(t,
+ exporter.Start(context.Background(), componenttest.NewNopHost()),
+ fmt.Sprintf("%s: heartbeat on startup failed: HTTP 403 \"Forbidden\"", params.ID.String()),
+ )
+ assert.NoError(t, exporter.Shutdown(context.Background()))
}
func TestHeartbeatStartupPass_Disabled(t *testing.T) {
@@ -1417,12 +1421,12 @@ func TestHeartbeatStartupPass_Disabled(t *testing.T) {
}()
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
+ cfg.ClientConfig.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
// Disable QueueSettings to ensure that we execute the request when calling ConsumeTraces
// otherwise we will not see the error.
cfg.QueueSettings.Enabled = false
// Disable retries to not wait too much time for the return error.
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
cfg.DisableCompression = true
cfg.Token = "1234-1234"
cfg.Heartbeat.Startup = false
@@ -1431,11 +1435,11 @@ func TestHeartbeatStartupPass_Disabled(t *testing.T) {
exporter, err := factory.CreateTracesExporter(context.Background(), params, cfg)
assert.NoError(t, err)
assert.NoError(t, exporter.Start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, exporter.Shutdown(context.Background()))
}
func TestHeartbeatStartupPass(t *testing.T) {
- rr := make(chan receivedRequest)
- capture := capturingData{receivedRequest: rr, statusCode: 200}
+ capture := capturingData{statusCode: 200}
listener, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
panic(err)
@@ -1452,12 +1456,12 @@ func TestHeartbeatStartupPass(t *testing.T) {
}()
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
+ cfg.ClientConfig.Endpoint = "http://" + listener.Addr().String() + "/services/collector"
// Disable QueueSettings to ensure that we execute the request when calling ConsumeTraces
// otherwise we will not see the error.
cfg.QueueSettings.Enabled = false
// Disable retries to not wait too much time for the return error.
- cfg.RetrySettings.Enabled = false
+ cfg.BackOffConfig.Enabled = false
cfg.DisableCompression = true
cfg.Token = "1234-1234"
cfg.Heartbeat.Startup = true
@@ -1466,6 +1470,7 @@ func TestHeartbeatStartupPass(t *testing.T) {
exporter, err := factory.CreateTracesExporter(context.Background(), params, cfg)
assert.NoError(t, err)
assert.NoError(t, exporter.Start(context.Background(), componenttest.NewNopHost()))
+ assert.NoError(t, exporter.Shutdown(context.Background()))
}
type badJSON struct {
diff --git a/exporter/splunkhecexporter/config.go b/exporter/splunkhecexporter/config.go
index c11a1836ae3b..9d2e73a722bc 100644
--- a/exporter/splunkhecexporter/config.go
+++ b/exporter/splunkhecexporter/config.go
@@ -12,6 +12,7 @@ import (
"go.opentelemetry.io/collector/config/confighttp"
"go.opentelemetry.io/collector/config/configopaque"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk"
@@ -63,9 +64,9 @@ type HecTelemetry struct {
// Config defines configuration for Splunk exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"`
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ confighttp.ClientConfig `mapstructure:",squash"`
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// LogDataEnabled can be used to disable sending logs by the exporter.
LogDataEnabled bool `mapstructure:"log_data_enabled"`
@@ -136,7 +137,7 @@ type Config struct {
func (cfg *Config) getURL() (out *url.URL, err error) {
- out, err = url.Parse(cfg.HTTPClientSettings.Endpoint)
+ out, err = url.Parse(cfg.ClientConfig.Endpoint)
if err != nil {
return out, err
}
@@ -152,7 +153,7 @@ func (cfg *Config) Validate() error {
if !cfg.LogDataEnabled && !cfg.ProfilingDataEnabled {
return errors.New(`either "log_data_enabled" or "profiling_data_enabled" has to be true`)
}
- if cfg.HTTPClientSettings.Endpoint == "" {
+ if cfg.ClientConfig.Endpoint == "" {
return errors.New(`requires a non-empty "endpoint"`)
}
_, err := cfg.getURL()
@@ -179,8 +180,5 @@ func (cfg *Config) Validate() error {
return fmt.Errorf(`requires "max_event_size" <= %d`, maxMaxEventSize)
}
- if err := cfg.QueueSettings.Validate(); err != nil {
- return fmt.Errorf("sending_queue settings has invalid configuration: %w", err)
- }
return nil
}
diff --git a/exporter/splunkhecexporter/config_test.go b/exporter/splunkhecexporter/config_test.go
index 602e36137322..996c59a27c39 100644
--- a/exporter/splunkhecexporter/config_test.go
+++ b/exporter/splunkhecexporter/config_test.go
@@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/confmap/confmaptest"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -30,7 +31,7 @@ func TestLoadConfig(t *testing.T) {
// Endpoint and Token do not have a default value so set them directly.
defaultCfg := createDefaultConfig().(*Config)
defaultCfg.Token = "00000000-0000-0000-0000-0000000000000"
- defaultCfg.HTTPClientSettings.Endpoint = "https://splunk:8088/services/collector"
+ defaultCfg.ClientConfig.Endpoint = "https://splunk:8088/services/collector"
hundred := 100
idleConnTimeout := 10 * time.Second
@@ -59,22 +60,24 @@ func TestLoadConfig(t *testing.T) {
MaxContentLengthLogs: 2 * 1024 * 1024,
MaxContentLengthMetrics: 2 * 1024 * 1024,
MaxContentLengthTraces: 2 * 1024 * 1024,
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: 10 * time.Second,
Endpoint: "https://splunk:8088/services/collector",
- TLSSetting: configtls.TLSClientSetting{
- TLSSetting: configtls.TLSSetting{
+ TLSSetting: configtls.ClientConfig{
+ Config: configtls.Config{
CAFile: "",
CertFile: "",
KeyFile: "",
},
InsecureSkipVerify: false,
},
- MaxIdleConns: &hundred,
- MaxIdleConnsPerHost: &hundred,
- IdleConnTimeout: &idleConnTimeout,
+ MaxIdleConns: &hundred,
+ MaxIdleConnsPerHost: &hundred,
+ IdleConnTimeout: &idleConnTimeout,
+ HTTP2ReadIdleTimeout: 10 * time.Second,
+ HTTP2PingTimeout: 10 * time.Second,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 10 * time.Second,
MaxInterval: 1 * time.Minute,
@@ -146,7 +149,7 @@ func TestConfig_Validate(t *testing.T) {
name: "bad url",
cfg: func() *Config {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "cache_object:foo/bar"
+ cfg.ClientConfig.Endpoint = "cache_object:foo/bar"
cfg.Token = "foo"
return cfg
}(),
@@ -156,7 +159,7 @@ func TestConfig_Validate(t *testing.T) {
name: "missing token",
cfg: func() *Config {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://example.com"
+ cfg.ClientConfig.Endpoint = "http://example.com"
return cfg
}(),
wantErr: "requires a non-empty \"token\"",
@@ -165,7 +168,7 @@ func TestConfig_Validate(t *testing.T) {
name: "max default content-length for logs",
cfg: func() *Config {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://foo_bar.com"
+ cfg.ClientConfig.Endpoint = "http://foo_bar.com"
cfg.MaxContentLengthLogs = maxContentLengthLogsLimit + 1
cfg.Token = "foo"
return cfg
@@ -176,7 +179,7 @@ func TestConfig_Validate(t *testing.T) {
name: "max default content-length for metrics",
cfg: func() *Config {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://foo_bar.com"
+ cfg.ClientConfig.Endpoint = "http://foo_bar.com"
cfg.MaxContentLengthMetrics = maxContentLengthMetricsLimit + 1
cfg.Token = "foo"
return cfg
@@ -187,7 +190,7 @@ func TestConfig_Validate(t *testing.T) {
name: "max default content-length for traces",
cfg: func() *Config {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://foo_bar.com"
+ cfg.ClientConfig.Endpoint = "http://foo_bar.com"
cfg.MaxContentLengthTraces = maxContentLengthTracesLimit + 1
cfg.Token = "foo"
return cfg
@@ -198,18 +201,30 @@ func TestConfig_Validate(t *testing.T) {
name: "max default event-size",
cfg: func() *Config {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "http://foo_bar.com"
+ cfg.ClientConfig.Endpoint = "http://foo_bar.com"
cfg.MaxEventSize = maxMaxEventSize + 1
cfg.Token = "foo"
return cfg
}(),
wantErr: "requires \"max_event_size\" <= 838860800",
},
+ {
+ name: "negative queue size",
+ cfg: func() *Config {
+ cfg := createDefaultConfig().(*Config)
+ cfg.ClientConfig.Endpoint = "http://foo_bar.com"
+ cfg.QueueSettings.Enabled = true
+ cfg.QueueSettings.QueueSize = -5
+ cfg.Token = "foo"
+ return cfg
+ }(),
+ wantErr: "queue size must be positive",
+ },
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
- err := tt.cfg.Validate()
+ err := component.ValidateConfig(tt.cfg)
if tt.wantErr == "" {
require.NoError(t, err)
} else {
diff --git a/exporter/splunkhecexporter/example/Dockerfile b/exporter/splunkhecexporter/example/Dockerfile
index 26e83570bc5e..29289f483359 100644
--- a/exporter/splunkhecexporter/example/Dockerfile
+++ b/exporter/splunkhecexporter/example/Dockerfile
@@ -1,4 +1,4 @@
-FROM golang:1.21 AS build
+FROM golang:1.22 AS build
WORKDIR /src
ADD . /src
diff --git a/exporter/splunkhecexporter/factory.go b/exporter/splunkhecexporter/factory.go
index 9321d86c8bbe..b67baa3d4dce 100644
--- a/exporter/splunkhecexporter/factory.go
+++ b/exporter/splunkhecexporter/factory.go
@@ -9,6 +9,7 @@ import (
"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/consumer"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -20,10 +21,12 @@ import (
)
const (
- defaultMaxIdleCons = 100
- defaultHTTPTimeout = 10 * time.Second
- defaultIdleConnTimeout = 10 * time.Second
- defaultSplunkAppName = "OpenTelemetry Collector Contrib"
+ defaultMaxIdleCons = 100
+ defaultHTTPTimeout = 10 * time.Second
+ defaultHTTP2ReadIdleTimeout = time.Second * 10
+ defaultHTTP2PingTimeout = time.Second * 10
+ defaultIdleConnTimeout = 10 * time.Second
+ defaultSplunkAppName = "OpenTelemetry Collector Contrib"
)
// TODO: Find a place for this to be shared.
@@ -38,6 +41,12 @@ type baseLogsExporter struct {
consumer.Logs
}
+// TODO: Find a place for this to be shared.
+type baseTracesExporter struct {
+ component.Component
+ consumer.Traces
+}
+
// NewFactory creates a factory for Splunk HEC exporter.
func NewFactory() exporter.Factory {
return exporter.NewFactory(
@@ -54,14 +63,16 @@ func createDefaultConfig() component.Config {
return &Config{
LogDataEnabled: true,
ProfilingDataEnabled: true,
- HTTPClientSettings: confighttp.HTTPClientSettings{
- Timeout: defaultHTTPTimeout,
- IdleConnTimeout: &defaultIdleConnTimeout,
- MaxIdleConnsPerHost: &defaultMaxConns,
- MaxIdleConns: &defaultMaxConns,
+ ClientConfig: confighttp.ClientConfig{
+ Timeout: defaultHTTPTimeout,
+ IdleConnTimeout: &defaultIdleConnTimeout,
+ MaxIdleConnsPerHost: &defaultMaxConns,
+ MaxIdleConns: &defaultMaxConns,
+ HTTP2ReadIdleTimeout: defaultHTTP2ReadIdleTimeout,
+ HTTP2PingTimeout: defaultHTTP2PingTimeout,
},
SplunkAppName: defaultSplunkAppName,
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: exporterhelper.NewDefaultQueueSettings(),
DisableCompression: false,
MaxContentLengthLogs: defaultContentLengthLogsLimit,
@@ -98,17 +109,28 @@ func createTracesExporter(
c := newTracesClient(set, cfg)
- return exporterhelper.NewTracesExporter(
+ e, err := exporterhelper.NewTracesExporter(
ctx,
set,
cfg,
c.pushTraceData,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithStart(c.start),
exporterhelper.WithShutdown(c.stop))
+
+ if err != nil {
+ return nil, err
+ }
+
+ wrapped := &baseTracesExporter{
+ Component: e,
+ Traces: batchperresourceattr.NewMultiBatchPerResourceTraces([]string{splunk.HecTokenLabel, splunk.DefaultIndexLabel}, e),
+ }
+
+ return wrapped, nil
}
func createMetricsExporter(
@@ -120,14 +142,14 @@ func createMetricsExporter(
c := newMetricsClient(set, cfg)
- exporter, err := exporterhelper.NewMetricsExporter(
+ e, err := exporterhelper.NewMetricsExporter(
ctx,
set,
cfg,
c.pushMetricsData,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithStart(c.start),
exporterhelper.WithShutdown(c.stop))
@@ -136,8 +158,8 @@ func createMetricsExporter(
}
wrapped := &baseMetricsExporter{
- Component: exporter,
- Metrics: batchperresourceattr.NewBatchPerResourceMetrics(splunk.HecTokenLabel, exporter),
+ Component: e,
+ Metrics: batchperresourceattr.NewMultiBatchPerResourceMetrics([]string{splunk.HecTokenLabel, splunk.DefaultIndexLabel}, e),
}
return wrapped, nil
@@ -159,7 +181,7 @@ func createLogsExporter(
c.pushLogData,
// explicitly disable since we rely on http.Client timeout logic.
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithStart(c.start),
exporterhelper.WithShutdown(c.stop))
@@ -170,7 +192,7 @@ func createLogsExporter(
wrapped := &baseLogsExporter{
Component: logsExporter,
- Logs: batchperresourceattr.NewBatchPerResourceLogs(splunk.HecTokenLabel, &perScopeBatcher{
+ Logs: batchperresourceattr.NewMultiBatchPerResourceLogs([]string{splunk.HecTokenLabel, splunk.DefaultIndexLabel}, &perScopeBatcher{
logsEnabled: cfg.LogDataEnabled,
profilingEnabled: cfg.ProfilingDataEnabled,
logger: set.Logger,
diff --git a/exporter/splunkhecexporter/factory_test.go b/exporter/splunkhecexporter/factory_test.go
index 3e7146014b4e..0ae3358958b8 100644
--- a/exporter/splunkhecexporter/factory_test.go
+++ b/exporter/splunkhecexporter/factory_test.go
@@ -22,7 +22,7 @@ func TestCreateDefaultConfig(t *testing.T) {
func TestCreateMetricsExporter(t *testing.T) {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://example.com:8088/services/collector"
+ cfg.ClientConfig.Endpoint = "https://example.com:8088/services/collector"
cfg.Token = "1234-1234"
params := exportertest.NewNopCreateSettings()
@@ -32,7 +32,7 @@ func TestCreateMetricsExporter(t *testing.T) {
func TestCreateTracesExporter(t *testing.T) {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://example.com:8088/services/collector"
+ cfg.ClientConfig.Endpoint = "https://example.com:8088/services/collector"
cfg.Token = "1234-1234"
params := exportertest.NewNopCreateSettings()
@@ -42,7 +42,7 @@ func TestCreateTracesExporter(t *testing.T) {
func TestCreateLogsExporter(t *testing.T) {
cfg := createDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://example.com:8088/services/collector"
+ cfg.ClientConfig.Endpoint = "https://example.com:8088/services/collector"
cfg.Token = "1234-1234"
params := exportertest.NewNopCreateSettings()
@@ -54,7 +54,7 @@ func TestCreateInstanceViaFactory(t *testing.T) {
factory := NewFactory()
cfg := factory.CreateDefaultConfig().(*Config)
- cfg.HTTPClientSettings.Endpoint = "https://example.com:8088/services/collector"
+ cfg.ClientConfig.Endpoint = "https://example.com:8088/services/collector"
cfg.Token = "1234-1234"
params := exportertest.NewNopCreateSettings()
exp, err := factory.CreateMetricsExporter(
@@ -65,7 +65,7 @@ func TestCreateInstanceViaFactory(t *testing.T) {
// Set values that don't have a valid default.
cfg.Token = "testToken"
- cfg.HTTPClientSettings.Endpoint = "https://example.com"
+ cfg.ClientConfig.Endpoint = "https://example.com"
exp, err = factory.CreateMetricsExporter(
context.Background(), params,
cfg)
@@ -78,7 +78,7 @@ func TestCreateInstanceViaFactory(t *testing.T) {
func TestFactory_CreateMetricsExporter(t *testing.T) {
config := &Config{
Token: "testToken",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "https://example.com:8000",
},
}
diff --git a/exporter/splunkhecexporter/generated_component_test.go b/exporter/splunkhecexporter/generated_component_test.go
new file mode 100644
index 000000000000..96814b3ddc8a
--- /dev/null
+++ b/exporter/splunkhecexporter/generated_component_test.go
@@ -0,0 +1,140 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package splunkhecexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/component/componenttest"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "traces",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateTracesExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ t.Run(test.name+"-lifecycle", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ host := componenttest.NewNopHost()
+ err = c.Start(context.Background(), host)
+ require.NoError(t, err)
+ require.NotPanics(t, func() {
+ switch test.name {
+ case "logs":
+ e, ok := c.(exporter.Logs)
+ require.True(t, ok)
+ logs := generateLifecycleTestLogs()
+ if !e.Capabilities().MutatesData {
+ logs.MarkReadOnly()
+ }
+ err = e.ConsumeLogs(context.Background(), logs)
+ case "metrics":
+ e, ok := c.(exporter.Metrics)
+ require.True(t, ok)
+ metrics := generateLifecycleTestMetrics()
+ if !e.Capabilities().MutatesData {
+ metrics.MarkReadOnly()
+ }
+ err = e.ConsumeMetrics(context.Background(), metrics)
+ case "traces":
+ e, ok := c.(exporter.Traces)
+ require.True(t, ok)
+ traces := generateLifecycleTestTraces()
+ if !e.Capabilities().MutatesData {
+ traces.MarkReadOnly()
+ }
+ err = e.ConsumeTraces(context.Background(), traces)
+ }
+ })
+
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/splunkhecexporter/go.mod b/exporter/splunkhecexporter/go.mod
index ff80c8a8e88f..b42680a02b70 100644
--- a/exporter/splunkhecexporter/go.mod
+++ b/exporter/splunkhecexporter/go.mod
@@ -1,29 +1,33 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/splunkhecexporter
-go 1.20
+go 1.21
require (
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/json-iterator/go v1.1.12
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.89.0
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.89.0
- github.com/stretchr/testify v1.8.4
- github.com/testcontainers/testcontainers-go v0.26.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/internal/splunk v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/batchperresourceattr v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden v0.98.0
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest v0.98.0
+ github.com/stretchr/testify v1.9.0
+ github.com/testcontainers/testcontainers-go v0.29.1
go.opencensus.io v0.24.0
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/config/configopaque v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/confmap v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configopaque v1.5.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/collector/semconv v0.98.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
+ go.uber.org/goleak v1.3.0
go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
+ go.uber.org/zap v1.27.0
gopkg.in/yaml.v3 v3.0.1
)
@@ -31,77 +35,83 @@ require (
dario.cat/mergo v1.0.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
- github.com/Microsoft/hcsshim v0.11.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
- github.com/containerd/containerd v1.7.7 // indirect
+ github.com/Microsoft/hcsshim v0.11.4 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.3.0 // indirect
+ github.com/containerd/containerd v1.7.12 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/cpuguy83/dockercfg v0.3.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/docker/distribution v2.8.2+incompatible // indirect
- github.com/docker/docker v24.0.7+incompatible // indirect
- github.com/docker/go-connections v0.4.0 // indirect
+ github.com/distribution/reference v0.5.0 // indirect
+ github.com/docker/docker v25.0.5+incompatible // indirect
+ github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
- github.com/google/uuid v1.4.0 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/moby/patternmatcher v0.6.0 // indirect
github.com/moby/sys/sequential v0.5.0 // indirect
+ github.com/moby/sys/user v0.1.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/morikuni/aec v1.0.0 // indirect
- github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.89.0 // indirect
+ github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil v0.98.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
- github.com/opencontainers/image-spec v1.1.0-rc5 // indirect
- github.com/opencontainers/runc v1.1.12 // indirect
+ github.com/opencontainers/image-spec v1.1.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
+ github.com/shirou/gopsutil/v3 v3.24.3 // indirect
github.com/shoenig/go-m1cpu v0.1.6 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
- go.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/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/internal v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/receiver v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ github.com/yusufpapurcu/wmi v1.2.4 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 // indirect
- golang.org/x/mod v0.14.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/mod v0.16.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.15.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
)
replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal => ../../internal/coreinternal
diff --git a/exporter/splunkhecexporter/go.sum b/exporter/splunkhecexporter/go.sum
index 51350d770191..fcc791abf985 100644
--- a/exporter/splunkhecexporter/go.sum
+++ b/exporter/splunkhecexporter/go.sum
@@ -1,39 +1,41 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk=
dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
+github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
-github.com/Microsoft/hcsshim v0.11.1 h1:hJ3s7GbWlGK4YVV92sO88BQSyF4ZLVy7/awqOlPxFbA=
-github.com/Microsoft/hcsshim v0.11.1/go.mod h1:nFJmaO4Zr5Y7eADdFOpYswDDlNVbvcIJJNJLECr5JQg=
+github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8=
+github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
+github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/containerd/containerd v1.7.7 h1:QOC2K4A42RQpcrZyptP6z9EJZnlHfHJUfZrAAHe15q4=
-github.com/containerd/containerd v1.7.7/go.mod h1:3c4XZv6VeT9qgf9GMTxNTMFxGJrGpI2vz1yk4ye+YY8=
+github.com/containerd/containerd v1.7.12 h1:+KQsnv4VnzyxWcfO9mlxxELaoztsDEjOuCMPAuPqgU0=
+github.com/containerd/containerd v1.7.12/go.mod h1:/5OMpE1p0ylxtEUGY8kuCYkDRzJm9NO1TFMWjUpdevk=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/cpuguy83/dockercfg v0.3.1 h1:/FpZ+JaygUR/lZP2NlFI2DVfrOEMAIKP5wWEJdoYe9E=
github.com/cpuguy83/dockercfg v0.3.1/go.mod h1:sugsbF4//dDlL/i+S+rtpIWp+5h0BHJHfjj5/jFyUJc=
github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY=
+github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
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/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8=
-github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
-github.com/docker/docker v24.0.7+incompatible h1:Wo6l37AuwP3JaMnZa226lzVXGA3F9Ig1seQen0cKYlM=
-github.com/docker/docker v24.0.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
-github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
+github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0=
+github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
+github.com/docker/docker v25.0.5+incompatible h1:UmQydMduGkrD5nQde1mecF/YnSbTOaPeFIeP5C4W+DE=
+github.com/docker/docker v25.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
+github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -44,20 +46,21 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
+github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -86,40 +89,42 @@ 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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
-github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc=
github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo=
+github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg=
+github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU=
github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -131,27 +136,29 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
-github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI=
-github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
-github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss=
-github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8=
+github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug=
+github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
-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/shirou/gopsutil/v3 v3.24.3 h1:eoUGJSmdfLzJ3mxIhmOAhgKEKgQkeOwKpz1NbhVnuPE=
+github.com/shirou/gopsutil/v3 v3.24.3/go.mod h1:JpND7O217xa72ewWz9zN2eIIkPWsDN/3pl0H8Qt0uwg=
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=
@@ -161,77 +168,93 @@ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVs
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
+github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/testcontainers/testcontainers-go v0.26.0 h1:uqcYdoOHBy1ca7gKODfBd9uTHVK3a7UL848z09MVZ0c=
-github.com/testcontainers/testcontainers-go v0.26.0/go.mod h1:ICriE9bLX5CLxL9OFQ2N+2N+f+803LNJ1utJb1+Inx0=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+github.com/testcontainers/testcontainers-go v0.29.1 h1:z8kxdFlovA2y97RWx98v/TQ+tR+SXZm6p35M+xB92zk=
+github.com/testcontainers/testcontainers-go v0.29.1/go.mod h1:SnKnKQav8UcgtKqjp/AD8bE1MqZm+3TDb/B8crE3XnI=
github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/collector/semconv v0.98.0 h1:zO4L4TmlxXoYu8UgPeYElGY19BW7wPjM+quL5CzoOoY=
+go.opentelemetry.io/collector/semconv v0.98.0/go.mod h1:8ElcRZ8Cdw5JnvhTOQOdYizkJaQ10Z2fS+R6djOnj6A=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0 h1:t6wl9SPayj+c7lEIFgm4ooDBZVb01IhLB4InpomhRw8=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.24.0/go.mod h1:iSDOcsnSA5INXzZtwaBPrKp/lWu/V14Dd+llD0oI2EA=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 h1:Xw8U6u2f8DK2XAkGRFV7BBLENgnTGX9i4rQRxJf+/vs=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0/go.mod h1:6KW1Fm6R/s6Z3PGXwSJN2K4eT6wQB3vXX6CVnYX9NmM=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI=
+go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -243,8 +266,8 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
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.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
-golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
+golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
+golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -254,15 +277,16 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE=
+golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
+golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/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-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -273,14 +297,15 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/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.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/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
+golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
@@ -300,15 +325,18 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU=
+google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
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=
@@ -320,14 +348,15 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
+gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/splunkhecexporter/heartbeat_test.go b/exporter/splunkhecexporter/heartbeat_test.go
index cec3bfb9f199..c17177231d8b 100644
--- a/exporter/splunkhecexporter/heartbeat_test.go
+++ b/exporter/splunkhecexporter/heartbeat_test.go
@@ -82,7 +82,7 @@ func resetMetrics(metricsNames ...string) {
func Test_newHeartbeater_disabled(t *testing.T) {
config := createTestConfig(map[string]string{}, false)
config.Heartbeat.Interval = 0
- hb := newHeartbeater(config, component.NewDefaultBuildInfo(), func(ctx context.Context, ld plog.Logs) error {
+ hb := newHeartbeater(config, component.NewDefaultBuildInfo(), func(_ context.Context, _ plog.Logs) error {
return nil
})
assert.Nil(t, hb)
@@ -111,7 +111,7 @@ func Test_Heartbeat_success(t *testing.T) {
for _, tt := range tests {
consumeLogsChan := make(chan plog.Logs, 10)
- consumeFn := func(ctx context.Context, ld plog.Logs) error {
+ consumeFn := func(_ context.Context, ld plog.Logs) error {
consumeLogsChan <- ld
return nil
}
@@ -142,7 +142,7 @@ func Test_Heartbeat_success(t *testing.T) {
func Test_Heartbeat_failure(t *testing.T) {
resetMetrics()
- consumeFn := func(ctx context.Context, ld plog.Logs) error {
+ consumeFn := func(_ context.Context, _ plog.Logs) error {
return errors.New("always error")
}
initHeartbeater(t, map[string]string{}, true, consumeFn)
diff --git a/exporter/splunkhecexporter/integration_test.go b/exporter/splunkhecexporter/integration_test.go
index 88f315d4c2d6..72c8d736e954 100644
--- a/exporter/splunkhecexporter/integration_test.go
+++ b/exporter/splunkhecexporter/integration_test.go
@@ -10,7 +10,7 @@ import (
"crypto/tls"
"fmt"
"net/http"
- "os"
+ "net/url"
"os/exec"
"strconv"
"testing"
@@ -58,7 +58,7 @@ func teardown(cfg SplunkContainerConfig) {
fmt.Println("Stopping container")
err := cfg.container.Terminate(cfg.conCtx)
if err != nil {
- fmt.Printf("Error while terminiating container")
+ fmt.Printf("Error while terminating container")
panic(err)
}
// Remove docker image after tests
@@ -74,17 +74,6 @@ func teardown(cfg SplunkContainerConfig) {
fmt.Printf("Command output:\n%s\n", output)
}
-func TestMain(m *testing.M) {
- splunkContCfg := setup()
-
- // Run the tests
- code := m.Run()
-
- teardown(splunkContCfg)
- // Exit with the test result code
- os.Exit(code)
-}
-
func createInsecureClient() *http.Client {
// Create a custom transport with insecure settings
tr := &http.Transport{
@@ -222,177 +211,180 @@ func prepareTracesData(index string, source string, sourcetype string) ptrace.Tr
return traces
}
-func TestSplunkHecExporterEventsToSplunk(t *testing.T) {
- logger := zaptest.NewLogger(t)
- logger.Info("Test -> Splunk running at:", zap.String("host", integrationtestutils.GetConfigVariable("HOST")),
- zap.String("uiPort", integrationtestutils.GetConfigVariable("UI_PORT")),
- zap.String("hecPort", integrationtestutils.GetConfigVariable("HEC_PORT")),
- zap.String("managementPort", integrationtestutils.GetConfigVariable("MANAGEMENT_PORT")),
- )
- // Endpoint and Token do not have a default value so set them directly.
- config := NewFactory().CreateDefaultConfig().(*Config)
- config.Token = configopaque.String(integrationtestutils.GetConfigVariable("HEC_TOKEN"))
- config.HTTPClientSettings.Endpoint = "https://" + integrationtestutils.GetConfigVariable("HOST") + ":" + integrationtestutils.GetConfigVariable("HEC_PORT") + "/services/collector"
- config.Source = "otel"
- config.SourceType = "st-otel"
- config.Index = "main"
- config.TLSSetting.InsecureSkipVerify = true
-
- url, err := config.getURL()
- require.NoError(t, err, "Must not error while getting URL")
- settings := exportertest.NewNopCreateSettings()
- c := newLogsClient(settings, config)
- logs := prepareLogs()
- httpClient := createInsecureClient()
- c.hecWorker = &defaultHecWorker{url, httpClient, buildHTTPHeaders(config, component.NewDefaultBuildInfo())}
+type cfg struct {
+ event string
+ index string
+ source string
+ sourcetype string
+}
- err = c.pushLogData(context.Background(), logs)
- require.NoError(t, err, "Must not error while sending Logs data")
- waitForEventToBeIndexed()
+type telemetryType string
- query := "index=main *"
- events := integrationtestutils.CheckEventsFromSplunk(query, "-3h@h")
- logger.Info("Splunk received %d events in the last minute", zap.Int("no. of events", len(events)))
- assert.True(t, len(events) == 1)
- // check events fields
- data, ok := events[0].(map[string]any)
- if !ok {
- logger.Info("Invalid event format")
- }
- assert.True(t, "test log" == data["_raw"].(string))
- assert.True(t, "main" == data["index"].(string))
- assert.True(t, "otel" == data["source"].(string))
- assert.True(t, "st-otel" == data["sourcetype"].(string))
+var metricsType = telemetryType("metrics")
+var logsType = telemetryType("logs")
+var tracesType = telemetryType("traces")
+
+type testCfg struct {
+ name string
+ config *cfg
+ startTime string
+ telType telemetryType
}
-func TestSplunkHecExporterEventsToSplunkNonDefaultIndex(t *testing.T) {
- logger := zaptest.NewLogger(t)
- logger.Info("Test -> Splunk running at:", zap.String("host", integrationtestutils.GetConfigVariable("HOST")),
- zap.String("uiPort", integrationtestutils.GetConfigVariable("UI_PORT")),
- zap.String("hecPort", integrationtestutils.GetConfigVariable("HEC_PORT")),
- zap.String("managementPort", integrationtestutils.GetConfigVariable("MANAGEMENT_PORT")),
- )
-
- event := "This is my new event! And some number 101"
- index := integrationtestutils.GetConfigVariable("EVENT_INDEX")
- source := "otel-source"
- sourcetype := "sck-otel-st"
-
- // Endpoint and Token do not have a default value so set them directly.
- config := NewFactory().CreateDefaultConfig().(*Config)
- config.Token = configopaque.String(integrationtestutils.GetConfigVariable("HEC_TOKEN"))
- config.HTTPClientSettings.Endpoint = "https://" + integrationtestutils.GetConfigVariable("HOST") + ":" + integrationtestutils.GetConfigVariable("HEC_PORT") + "/services/collector"
- config.Source = "otel"
- config.SourceType = "st-otel"
- config.Index = "main"
- config.TLSSetting.InsecureSkipVerify = true
-
- url, err := config.getURL()
- require.NoError(t, err, "Must not error while getting URL")
+func logsTest(t *testing.T, config *Config, url *url.URL, test testCfg) {
settings := exportertest.NewNopCreateSettings()
c := newLogsClient(settings, config)
- logs := prepareLogsNonDefaultParams(index, source, sourcetype, event)
+ var logs plog.Logs
+ if test.config.index != "main" {
+ logs = prepareLogsNonDefaultParams(test.config.index, test.config.source, test.config.sourcetype, test.config.event)
+ } else {
+ logs = prepareLogs()
+ }
+
httpClient := createInsecureClient()
c.hecWorker = &defaultHecWorker{url, httpClient, buildHTTPHeaders(config, component.NewDefaultBuildInfo())}
- err = c.pushLogData(context.Background(), logs)
+ err := c.pushLogData(context.Background(), logs)
require.NoError(t, err, "Must not error while sending Logs data")
waitForEventToBeIndexed()
- query := "index=" + index + " *"
- events := integrationtestutils.CheckEventsFromSplunk(query, "-1m@m")
- logger.Info("Splunk received %d events in the last minute", zap.Int("no. of events", len(events)))
- assert.True(t, len(events) == 1)
+ events := integrationtestutils.CheckEventsFromSplunk("index="+test.config.index+" *", test.startTime)
+ assert.Equal(t, len(events), 1)
// check events fields
data, ok := events[0].(map[string]any)
- if !ok {
- logger.Info("Invalid event format")
- }
- assert.True(t, event == data["_raw"].(string))
- assert.True(t, index == data["index"].(string))
- assert.True(t, source == data["source"].(string))
- assert.True(t, sourcetype == data["sourcetype"].(string))
+ assert.True(t, ok, "Invalid event format")
+ assert.Equal(t, test.config.event, data["_raw"].(string))
+ assert.Equal(t, test.config.index, data["index"].(string))
+ assert.Equal(t, test.config.source, data["source"].(string))
+ assert.Equal(t, test.config.sourcetype, data["sourcetype"].(string))
}
-func TestSplunkHecExporterMetricsToSplunk(t *testing.T) {
- logger := zaptest.NewLogger(t)
- logger.Info("Test -> Splunk running at:", zap.String("host", integrationtestutils.GetConfigVariable("HOST")),
- zap.String("uiPort", integrationtestutils.GetConfigVariable("UI_PORT")),
- zap.String("hecPort", integrationtestutils.GetConfigVariable("HEC_PORT")),
- zap.String("managementPort", integrationtestutils.GetConfigVariable("MANAGEMENT_PORT")),
- )
- index := integrationtestutils.GetConfigVariable("METRIC_INDEX")
- metricName := "test.metric"
- // Endpoint and Token do not have a default value so set them directly.
- config := NewFactory().CreateDefaultConfig().(*Config)
- config.Token = configopaque.String(integrationtestutils.GetConfigVariable("HEC_TOKEN"))
- config.HTTPClientSettings.Endpoint = "https://" + integrationtestutils.GetConfigVariable("HOST") + ":" + integrationtestutils.GetConfigVariable("HEC_PORT") + "/services/collector"
- config.Source = "otel"
- config.SourceType = "st-otel"
- config.Index = index
- config.TLSSetting.InsecureSkipVerify = true
-
- url, err := config.getURL()
- require.NoError(t, err, "Must not error while getting URL")
+func metricsTest(t *testing.T, config *Config, url *url.URL, test testCfg) {
settings := exportertest.NewNopCreateSettings()
c := newMetricsClient(settings, config)
- metricData := prepareMetricsData(metricName)
+ metricData := prepareMetricsData(test.config.event)
httpClient := createInsecureClient()
c.hecWorker = &defaultHecWorker{url, httpClient, buildHTTPHeaders(config, component.NewDefaultBuildInfo())}
- err = c.pushMetricsData(context.Background(), metricData)
+ err := c.pushMetricsData(context.Background(), metricData)
require.NoError(t, err, "Must not error while sending Metrics data")
waitForEventToBeIndexed()
- events := integrationtestutils.CheckMetricsFromSplunk(index, metricName)
- assert.True(t, len(events) == 1, "Events length is less than 1. No metrics found")
+ events := integrationtestutils.CheckMetricsFromSplunk(test.config.index, test.config.event)
+ assert.Equal(t, len(events), 1, "Events length is less than 1. No metrics found")
}
-func TestSplunkHecExporterTracesToSplunk(t *testing.T) {
- logger := zaptest.NewLogger(t)
- logger.Info("Test -> Splunk running at:", zap.String("host", integrationtestutils.GetConfigVariable("HOST")),
- zap.String("uiPort", integrationtestutils.GetConfigVariable("UI_PORT")),
- zap.String("hecPort", integrationtestutils.GetConfigVariable("HEC_PORT")),
- zap.String("managementPort", integrationtestutils.GetConfigVariable("MANAGEMENT_PORT")),
- )
- index := integrationtestutils.GetConfigVariable("TRACE_INDEX")
- source := "trace-source"
- sourcetype := "trace-sourcetype"
- // Endpoint and Token do not have a default value so set them directly.
- config := NewFactory().CreateDefaultConfig().(*Config)
- config.Token = configopaque.String(integrationtestutils.GetConfigVariable("HEC_TOKEN"))
- config.HTTPClientSettings.Endpoint = "https://" + integrationtestutils.GetConfigVariable("HOST") + ":" + integrationtestutils.GetConfigVariable("HEC_PORT") + "/services/collector"
- config.Source = "otel"
- config.SourceType = "st-otel"
- config.Index = "main"
- config.TLSSetting.InsecureSkipVerify = true
-
- url, err := config.getURL()
- require.NoError(t, err, "Must not error while getting URL")
+func tracesTest(t *testing.T, config *Config, url *url.URL, test testCfg) {
settings := exportertest.NewNopCreateSettings()
c := newTracesClient(settings, config)
- tracesData := prepareTracesData(index, source, sourcetype)
+ tracesData := prepareTracesData(test.config.index, test.config.source, test.config.sourcetype)
httpClient := createInsecureClient()
c.hecWorker = &defaultHecWorker{url, httpClient, buildHTTPHeaders(config, component.NewDefaultBuildInfo())}
- err = c.pushTraceData(context.Background(), tracesData)
+ err := c.pushTraceData(context.Background(), tracesData)
require.NoError(t, err, "Must not error while sending Trace data")
-
waitForEventToBeIndexed()
- query := "index=" + index + " *"
- events := integrationtestutils.CheckEventsFromSplunk(query, "-1m@m")
- logger.Info("Splunk received %d events in the last minute", zap.Int("no. of events", len(events)))
- assert.True(t, len(events) == 1)
+
+ events := integrationtestutils.CheckEventsFromSplunk("index="+test.config.index+" *", test.startTime)
+ assert.Equal(t, len(events), 1)
// check fields
data, ok := events[0].(map[string]any)
- if !ok {
- logger.Info("Invalid event format")
+ assert.True(t, ok, "Invalid event format")
+ assert.Equal(t, test.config.index, data["index"].(string))
+ assert.Equal(t, test.config.source, data["source"].(string))
+ assert.Equal(t, test.config.sourcetype, data["sourcetype"].(string))
+}
+
+func TestSplunkHecExporter(t *testing.T) {
+ splunkContCfg := setup()
+ defer teardown(splunkContCfg)
+
+ tests := []testCfg{
+ {
+ name: "Events to Splunk",
+ config: &cfg{
+ event: "test log",
+ index: "main",
+ source: "otel",
+ sourcetype: "st-otel",
+ },
+ startTime: "-3h@h",
+ telType: logsType,
+ },
+ {
+ name: "Events to Splunk - Non default index",
+ config: &cfg{
+ event: "This is my new event! And some number 101",
+ index: integrationtestutils.GetConfigVariable("EVENT_INDEX"),
+ source: "otel-source",
+ sourcetype: "sck-otel-st",
+ },
+ startTime: "-1m@m",
+ telType: logsType,
+ },
+ {
+ name: "Events to Splunk - metrics",
+ config: &cfg{
+ event: "test.metric",
+ index: integrationtestutils.GetConfigVariable("METRIC_INDEX"),
+ source: "otel",
+ sourcetype: "st-otel",
+ },
+ startTime: "",
+ telType: metricsType,
+ },
+ {
+ name: "Events to Splunk - traces",
+ config: &cfg{
+ event: "",
+ index: integrationtestutils.GetConfigVariable("TRACE_INDEX"),
+ source: "trace-source",
+ sourcetype: "trace-sourcetype",
+ },
+ startTime: "-1m@m",
+ telType: tracesType,
+ },
+ }
+ for _, test := range tests {
+ t.Run(test.name, func(t *testing.T) {
+ logger := zaptest.NewLogger(t)
+ logger.Info("Test -> Splunk running at:", zap.String("host", integrationtestutils.GetConfigVariable("HOST")),
+ zap.String("uiPort", integrationtestutils.GetConfigVariable("UI_PORT")),
+ zap.String("hecPort", integrationtestutils.GetConfigVariable("HEC_PORT")),
+ zap.String("managementPort", integrationtestutils.GetConfigVariable("MANAGEMENT_PORT")),
+ )
+
+ // Endpoint and Token do not have a default value so set them directly.
+ config := NewFactory().CreateDefaultConfig().(*Config)
+ config.Token = configopaque.String(integrationtestutils.GetConfigVariable("HEC_TOKEN"))
+ config.ClientConfig.Endpoint = "https://" + integrationtestutils.GetConfigVariable("HOST") + ":" + integrationtestutils.GetConfigVariable("HEC_PORT") + "/services/collector"
+ config.Source = "otel"
+ config.SourceType = "st-otel"
+
+ if test.telType == metricsType {
+ config.Index = test.config.index
+ } else {
+ config.Index = "main"
+ }
+ config.TLSSetting.InsecureSkipVerify = true
+
+ url, err := config.getURL()
+ require.NoError(t, err, "Must not error while getting URL")
+
+ switch test.telType {
+ case logsType:
+ logsTest(t, config, url, test)
+ case metricsType:
+ metricsTest(t, config, url, test)
+ case tracesType:
+ tracesTest(t, config, url, test)
+ default:
+ assert.Fail(t, "Telemetry type must be set to one of the following values: metrics, traces, or logs.")
+ }
+ })
}
- assert.True(t, index == data["index"].(string))
- assert.True(t, source == data["source"].(string))
- assert.True(t, sourcetype == data["sourcetype"].(string))
}
func waitForEventToBeIndexed() {
diff --git a/exporter/splunkhecexporter/internal/integrationtestutils/splunk.go b/exporter/splunkhecexporter/internal/integrationtestutils/splunk.go
index f89ea09b9be4..4d5e47cf1676 100644
--- a/exporter/splunkhecexporter/internal/integrationtestutils/splunk.go
+++ b/exporter/splunkhecexporter/internal/integrationtestutils/splunk.go
@@ -112,7 +112,7 @@ func checkSearchJobStatusCode(user string, password string, baseURL string, jobI
// logger.Println(checkJSONResponse) // debug
// Print isDone field from response
isDone := checkJSONResponse["entry"].([]any)[0].(map[string]any)["content"].(map[string]any)["isDone"]
- logger.Printf("Is Splunk Search compleated [isDone flag]: %v\n", isDone)
+ logger.Printf("Is Splunk Search completed [isDone flag]: %v\n", isDone)
return isDone
}
func postSearchRequest(user string, password string, baseURL string, searchQuery string, startTime string, endTime string) string {
diff --git a/exporter/splunkhecexporter/internal/metadata/generated_status.go b/exporter/splunkhecexporter/internal/metadata/generated_status.go
index d3e300fe92eb..def1a7fcd1c4 100644
--- a/exporter/splunkhecexporter/internal/metadata/generated_status.go
+++ b/exporter/splunkhecexporter/internal/metadata/generated_status.go
@@ -4,11 +4,24 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("splunk_hec")
)
const (
- Type = "splunk_hec"
TracesStability = component.StabilityLevelBeta
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/splunkhec")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/splunkhec")
+}
diff --git a/exporter/splunkhecexporter/logdata_to_splunk.go b/exporter/splunkhecexporter/logdata_to_splunk.go
index 065b5e7c4b94..b28c4b783a1b 100644
--- a/exporter/splunkhecexporter/logdata_to_splunk.go
+++ b/exporter/splunkhecexporter/logdata_to_splunk.go
@@ -83,13 +83,18 @@ func mapLogRecordToSplunkEvent(res pcommon.Resource, lr plog.LogRecord, config *
return true
})
+ body := lr.Body().AsRaw()
+ if body == nil {
+ body = ""
+ }
+
return &splunk.Event{
Time: nanoTimestampToEpochMilliseconds(lr.Timestamp()),
Host: host,
Source: source,
SourceType: sourcetype,
Index: index,
- Event: lr.Body().AsRaw(),
+ Event: body,
Fields: fields,
}
}
diff --git a/exporter/splunkhecexporter/logdata_to_splunk_test.go b/exporter/splunkhecexporter/logdata_to_splunk_test.go
index dc73249e2ec5..7896affb4cbb 100644
--- a/exporter/splunkhecexporter/logdata_to_splunk_test.go
+++ b/exporter/splunkhecexporter/logdata_to_splunk_test.go
@@ -188,7 +188,7 @@ func Test_mapLogRecordToSplunkEvent(t *testing.T) {
return config
},
wantSplunkEvents: []*splunk.Event{
- commonLogSplunkEvent(nil, 0, map[string]any{}, "unknown", "source", "sourcetype"),
+ commonLogSplunkEvent("", 0, map[string]any{}, "unknown", "source", "sourcetype"),
},
},
{
@@ -207,7 +207,7 @@ func Test_mapLogRecordToSplunkEvent(t *testing.T) {
return config
},
wantSplunkEvents: func() []*splunk.Event {
- event := commonLogSplunkEvent(nil, 0, map[string]any{}, "unknown", "source", "sourcetype")
+ event := commonLogSplunkEvent("", 0, map[string]any{}, "unknown", "source", "sourcetype")
event.Fields["span_id"] = "0000000000000032"
event.Fields["trace_id"] = "00000000000000000000000000000064"
return []*splunk.Event{event}
@@ -330,7 +330,7 @@ func Test_mapLogRecordToSplunkEvent(t *testing.T) {
return config
},
wantSplunkEvents: []*splunk.Event{
- commonLogSplunkEvent(nil, ts, map[string]any{"custom": "custom"},
+ commonLogSplunkEvent("", ts, map[string]any{"custom": "custom"},
"myhost", "myapp", "myapp-type"),
},
},
@@ -454,7 +454,7 @@ func Test_emptyLogRecord(t *testing.T) {
assert.Zero(t, event.Source)
assert.Zero(t, event.SourceType)
assert.Zero(t, event.Index)
- assert.Nil(t, event.Event)
+ assert.Equal(t, "", event.Event)
assert.Empty(t, event.Fields)
}
diff --git a/exporter/splunkhecexporter/metadata.yaml b/exporter/splunkhecexporter/metadata.yaml
index fb77ac506dfc..b3305538b79a 100644
--- a/exporter/splunkhecexporter/metadata.yaml
+++ b/exporter/splunkhecexporter/metadata.yaml
@@ -1,9 +1,19 @@
type: splunk_hec
+scope_name: otelcol/splunkhec
status:
class: exporter
stability:
beta: [traces, metrics, logs]
- distributions: [contrib, splunk, observiq]
+ distributions: [contrib]
codeowners:
- active: [atoulme, dmitryax]
\ No newline at end of file
+ active: [atoulme, dmitryax]
+tests:
+ config:
+ token: "my_fake_token"
+ endpoint: "http://localhost:0"
+ sending_queue:
+ enabled: false
+ retry_on_failure:
+ enabled: false
+ expect_consumer_error: true
diff --git a/exporter/splunkhecexporter/package_test.go b/exporter/splunkhecexporter/package_test.go
new file mode 100644
index 000000000000..6bf200240882
--- /dev/null
+++ b/exporter/splunkhecexporter/package_test.go
@@ -0,0 +1,17 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package splunkhecexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+// The IgnoreTopFunction call prevents catching the leak generated by opencensus
+// defaultWorker.Start which at this time is part of the package's init call.
+// See https://github.com/census-instrumentation/opencensus-go/issues/1191 for more information.
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m, goleak.IgnoreTopFunction("go.opencensus.io/stats/view.(*worker).start"))
+}
diff --git a/exporter/sumologicexporter/config.go b/exporter/sumologicexporter/config.go
index 2c88a6b95739..16382c6942c7 100644
--- a/exporter/sumologicexporter/config.go
+++ b/exporter/sumologicexporter/config.go
@@ -9,14 +9,15 @@ import (
"time"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
)
// Config defines configuration for Sumo Logic exporter.
type Config struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ confighttp.ClientConfig `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
+ exporterhelper.QueueSettings `mapstructure:"sending_queue"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
// Compression encoding format, either empty string, gzip or deflate (default gzip)
// Empty string means no compression
@@ -59,11 +60,11 @@ type Config struct {
Client string `mapstructure:"client"`
}
-// createDefaultHTTPClientSettings returns default http client settings
-func createDefaultHTTPClientSettings() confighttp.HTTPClientSettings {
- return confighttp.HTTPClientSettings{
- Timeout: defaultTimeout,
- }
+// createDefaultClientConfig returns default http client settings
+func createDefaultClientConfig() confighttp.ClientConfig {
+ config := confighttp.NewDefaultClientConfig()
+ config.Timeout = defaultTimeout
+ return config
}
// LogFormatType represents log_format
@@ -147,7 +148,7 @@ func (cfg *Config) Validate() error {
return fmt.Errorf("unexpected compression encoding: %s", cfg.CompressEncoding)
}
- if len(cfg.HTTPClientSettings.Endpoint) == 0 {
+ if len(cfg.ClientConfig.Endpoint) == 0 {
return errors.New("endpoint is not set")
}
diff --git a/exporter/sumologicexporter/config_test.go b/exporter/sumologicexporter/config_test.go
index 5659d65f5bb9..8eca2feb0951 100644
--- a/exporter/sumologicexporter/config_test.go
+++ b/exporter/sumologicexporter/config_test.go
@@ -24,7 +24,7 @@ func TestConfigValidation(t *testing.T) {
LogFormat: "test_format",
MetricFormat: "carbon2",
CompressEncoding: "gzip",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
Endpoint: "test_endpoint",
},
@@ -36,7 +36,7 @@ func TestConfigValidation(t *testing.T) {
cfg: &Config{
LogFormat: "json",
MetricFormat: "test_format",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
Endpoint: "test_endpoint",
},
@@ -50,7 +50,7 @@ func TestConfigValidation(t *testing.T) {
LogFormat: "json",
MetricFormat: "carbon2",
CompressEncoding: "test_format",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
Endpoint: "test_endpoint",
},
@@ -63,7 +63,7 @@ func TestConfigValidation(t *testing.T) {
LogFormat: "json",
MetricFormat: "carbon2",
CompressEncoding: "gzip",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
},
},
@@ -75,7 +75,7 @@ func TestConfigValidation(t *testing.T) {
LogFormat: "json",
MetricFormat: "carbon2",
CompressEncoding: "gzip",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
Endpoint: "test_endpoint",
},
@@ -92,7 +92,7 @@ func TestConfigValidation(t *testing.T) {
LogFormat: "json",
MetricFormat: "carbon2",
CompressEncoding: "gzip",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
Endpoint: "test_endpoint",
},
@@ -109,7 +109,7 @@ func TestConfigValidation(t *testing.T) {
if tc.expectedErr == "" {
assert.NoError(t, err)
} else {
- require.NotNil(t, err)
+ require.Error(t, err)
assert.EqualError(t, err, tc.expectedErr)
}
})
diff --git a/exporter/sumologicexporter/exporter.go b/exporter/sumologicexporter/exporter.go
index bbc4f454a9f7..0f5b85e5e1f4 100644
--- a/exporter/sumologicexporter/exporter.go
+++ b/exporter/sumologicexporter/exporter.go
@@ -94,7 +94,7 @@ func newLogsExporter(
// Disable exporterhelper Timeout, since we are using a custom mechanism
// within exporter itself
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithStart(se.start),
)
@@ -117,15 +117,15 @@ func newMetricsExporter(
// Disable exporterhelper Timeout, since we are using a custom mechanism
// within exporter itself
exporterhelper.WithTimeout(exporterhelper.TimeoutSettings{Timeout: 0}),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
exporterhelper.WithStart(se.start),
)
}
// start starts the exporter
-func (se *sumologicexporter) start(_ context.Context, host component.Host) (err error) {
- client, err := se.config.HTTPClientSettings.ToClient(host, se.settings)
+func (se *sumologicexporter) start(ctx context.Context, host component.Host) (err error) {
+ client, err := se.config.ClientConfig.ToClientContext(ctx, host, se.settings)
if err != nil {
return fmt.Errorf("failed to create HTTP Client: %w", err)
}
diff --git a/exporter/sumologicexporter/exporter_test.go b/exporter/sumologicexporter/exporter_test.go
index 70b456c574d2..5a9a95879166 100644
--- a/exporter/sumologicexporter/exporter_test.go
+++ b/exporter/sumologicexporter/exporter_test.go
@@ -35,7 +35,7 @@ func TestInitExporter(t *testing.T) {
LogFormat: "json",
MetricFormat: "carbon2",
CompressEncoding: "gzip",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
Endpoint: "test_endpoint",
},
@@ -45,7 +45,7 @@ func TestInitExporter(t *testing.T) {
func TestAllSuccess(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, `Example log`, body)
assert.Equal(t, "", req.Header.Get("X-Sumo-Fields"))
@@ -61,7 +61,7 @@ func TestAllSuccess(t *testing.T) {
func TestResourceMerge(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, `Example log`, body)
assert.Equal(t, "key1=original_value, key2=additional_value", req.Header.Get("X-Sumo-Fields"))
@@ -113,7 +113,7 @@ func TestPartiallyFailed(t *testing.T) {
assert.Equal(t, "Example log", body)
assert.Equal(t, "key1=value1, key2=value2", req.Header.Get("X-Sumo-Fields"))
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, "Another example log", body)
assert.Equal(t, "key3=value3, key4=value4", req.Header.Get("X-Sumo-Fields"))
@@ -142,7 +142,7 @@ func TestInvalidSourceFormats(t *testing.T) {
LogFormat: "json",
MetricFormat: "carbon2",
CompressEncoding: "gzip",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Timeout: defaultTimeout,
Endpoint: "test_endpoint",
},
@@ -156,9 +156,9 @@ func TestInvalidHTTPCLient(t *testing.T) {
LogFormat: "json",
MetricFormat: "carbon2",
CompressEncoding: "gzip",
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: "test_endpoint",
- CustomRoundTripper: func(next http.RoundTripper) (http.RoundTripper, error) {
+ CustomRoundTripper: func(_ http.RoundTripper) (http.RoundTripper, error) {
return nil, errors.New("roundTripperException")
},
},
@@ -172,7 +172,7 @@ func TestInvalidHTTPCLient(t *testing.T) {
func TestPushInvalidCompressor(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, `Example log`, body)
assert.Equal(t, "", req.Header.Get("X-Sumo-Fields"))
@@ -228,7 +228,7 @@ func TestPushFailedBatch(t *testing.T) {
func TestAllMetricsSuccess(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `test_metric_data{test="test_value",test2="second_value"} 14500 1605534165000
gauge_metric_name{foo="bar",remote_name="156920",url="http://example_url"} 124 1608124661166
@@ -288,7 +288,7 @@ func TestMetricsPartiallyFailed(t *testing.T) {
assert.Equal(t, expected, body)
assert.Equal(t, "application/vnd.sumologic.prometheus", req.Header.Get("Content-Type"))
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `gauge_metric_name{foo="bar",remote_name="156920",url="http://example_url"} 124 1608124661166
gauge_metric_name{foo="bar",remote_name="156955",url="http://another_url"} 245 1608124662166`
@@ -317,7 +317,7 @@ gauge_metric_name{foo="bar",remote_name="156955",url="http://another_url"} 245 1
func TestPushMetricsInvalidCompressor(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, `Example log`, body)
assert.Equal(t, "", req.Header.Get("X-Sumo-Fields"))
@@ -346,7 +346,7 @@ func TestMetricsDifferentMetadata(t *testing.T) {
assert.Equal(t, expected, body)
assert.Equal(t, "application/vnd.sumologic.prometheus", req.Header.Get("Content-Type"))
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `gauge_metric_name{foo="bar",key2="value2",remote_name="156920",url="http://example_url"} 124 1608124661166
gauge_metric_name{foo="bar",key2="value2",remote_name="156955",url="http://another_url"} 245 1608124662166`
diff --git a/exporter/sumologicexporter/factory.go b/exporter/sumologicexporter/factory.go
index 169f1149ce46..dadb64969fea 100644
--- a/exporter/sumologicexporter/factory.go
+++ b/exporter/sumologicexporter/factory.go
@@ -10,6 +10,7 @@ import (
"fmt"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -42,9 +43,9 @@ func createDefaultConfig() component.Config {
Client: DefaultClient,
GraphiteTemplate: DefaultGraphiteTemplate,
- HTTPClientSettings: createDefaultHTTPClientSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- QueueSettings: qs,
+ ClientConfig: createDefaultClientConfig(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
+ QueueSettings: qs,
}
}
diff --git a/exporter/sumologicexporter/factory_test.go b/exporter/sumologicexporter/factory_test.go
index 854ec4bc6af7..c37ad2e8ebb3 100644
--- a/exporter/sumologicexporter/factory_test.go
+++ b/exporter/sumologicexporter/factory_test.go
@@ -8,16 +8,18 @@ import (
"time"
"github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/component/componenttest"
"go.opentelemetry.io/collector/config/confighttp"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter/internal/metadata"
)
func TestType(t *testing.T) {
factory := NewFactory()
pType := factory.Type()
- assert.Equal(t, pType, component.Type("sumologic"))
+ assert.Equal(t, pType, metadata.Type)
}
func TestCreateDefaultConfig(t *testing.T) {
@@ -37,10 +39,12 @@ func TestCreateDefaultConfig(t *testing.T) {
Client: "otelcol",
GraphiteTemplate: "%{_metric_}",
- HTTPClientSettings: confighttp.HTTPClientSettings{
- Timeout: 5 * time.Second,
+ ClientConfig: confighttp.ClientConfig{
+ IdleConnTimeout: confighttp.NewDefaultClientConfig().IdleConnTimeout,
+ MaxIdleConns: confighttp.NewDefaultClientConfig().MaxIdleConns,
+ Timeout: 5 * time.Second,
},
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: qs,
})
assert.NoError(t, componenttest.CheckConfigStruct(cfg))
diff --git a/exporter/sumologicexporter/generated_component_test.go b/exporter/sumologicexporter/generated_component_test.go
new file mode 100644
index 000000000000..9dc51201a441
--- /dev/null
+++ b/exporter/sumologicexporter/generated_component_test.go
@@ -0,0 +1,94 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package sumologicexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+
+ {
+ name: "metrics",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateMetricsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/sumologicexporter/go.mod b/exporter/sumologicexporter/go.mod
index 10fb6baf1f13..fb1809c82e89 100644
--- a/exporter/sumologicexporter/go.mod
+++ b/exporter/sumologicexporter/go.mod
@@ -1,63 +1,76 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter
-go 1.20
+go 1.21
require (
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
+ github.com/stretchr/testify v1.9.0
+ go.opencensus.io v0.24.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/confighttp v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1 // indirect
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cenkalti/backoff/v4 v4.3.0 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
+ github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/golang/snappy v0.0.4 // indirect
+ github.com/google/uuid v1.6.0 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.2 // indirect
+ github.com/klauspost/compress v1.17.8 // 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/knadh/koanf/v2 v2.1.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
github.com/rs/cors v1.10.1 // indirect
- go.opencensus.io v0.24.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/configopaque v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls 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 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/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configauth v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configcompression v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configtls v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/internal v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension/auth v0.98.0 // indirect
+ go.opentelemetry.io/collector/featuregate v1.5.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
- go.uber.org/zap v1.26.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ go.uber.org/zap v1.27.0 // indirect
+ golang.org/x/net v0.24.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/sumologicexporter/go.sum b/exporter/sumologicexporter/go.sum
index da08e8ce56ea..af56edd0819d 100644
--- a/exporter/sumologicexporter/go.sum
+++ b/exporter/sumologicexporter/go.sum
@@ -1,11 +1,12 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -19,18 +20,18 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -54,29 +55,31 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
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/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
-github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU=
+github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -86,13 +89,17 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -102,61 +109,70 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
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.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/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/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/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/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/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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configauth v0.98.0 h1:FPffZ1dRL6emStrDUEGpL0rCChbUZNAQgpArXD0SESI=
+go.opentelemetry.io/collector/config/configauth v0.98.0/go.mod h1:5pMzf2zgFwS7tujNq0AtOOli5vxIvnrNi7JlZwrBOFo=
+go.opentelemetry.io/collector/config/configcompression v1.5.0 h1:FTxKbFPN4LznRCH/GQ+b+0tAWmg80Y2eEka79S2sLZ0=
+go.opentelemetry.io/collector/config/configcompression v1.5.0/go.mod h1:O0fOPCADyGwGLLIf5lf7N3960NsnIfxsm6dr/mIpL+M=
+go.opentelemetry.io/collector/config/confighttp v0.98.0 h1:pW7gR34TTXcrCHJgemL6A4VBVBS2NyDAkruSMvQj1Vo=
+go.opentelemetry.io/collector/config/confighttp v0.98.0/go.mod h1:M9PMtiKrTJMG8i3SqJ+AUVKhR6sa3G/8S2F1+Dxkkr0=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/config/internal v0.98.0 h1:wz/6ncawMX5cfIiXJEYSUm1g1U6iE/VxFRm4/WhVBPI=
+go.opentelemetry.io/collector/config/internal v0.98.0/go.mod h1:xPnEE6QaTSXr+ctYMSTBxI2qwTntTUM4cYk7OTm6Ugc=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/extension/auth v0.98.0 h1:7b1jioijJbTMqaOCrz5Hoqf+zJn2iPlGmtN7pXLNWbA=
+go.opentelemetry.io/collector/extension/auth v0.98.0/go.mod h1:gssWC4AxAwAEKI2CqS93lhjWffsVdzD8q7UGL6LaRr0=
+go.opentelemetry.io/collector/featuregate v1.5.0 h1:uK8qnYQKz1TMkK+FDTFsywg/EybW/gbnOUaPNUkRznM=
+go.opentelemetry.io/collector/featuregate v1.5.0/go.mod h1:w7nUODKxEi3FLf1HslCiE6YWtMtOOrMnSwsDam8Mg9w=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
@@ -175,8 +191,8 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg=
-golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ=
+golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
+golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
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=
@@ -187,8 +203,8 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
@@ -210,15 +226,15 @@ google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
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=
@@ -230,11 +246,11 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/exporter/sumologicexporter/internal/metadata/generated_status.go b/exporter/sumologicexporter/internal/metadata/generated_status.go
index c230f2f43bf5..68e1ef803a9f 100644
--- a/exporter/sumologicexporter/internal/metadata/generated_status.go
+++ b/exporter/sumologicexporter/internal/metadata/generated_status.go
@@ -4,10 +4,23 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("sumologic")
)
const (
- Type = "sumologic"
MetricsStability = component.StabilityLevelBeta
LogsStability = component.StabilityLevelBeta
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/sumologic")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/sumologic")
+}
diff --git a/exporter/sumologicexporter/internal/observability/observability.go b/exporter/sumologicexporter/internal/observability/observability.go
new file mode 100644
index 000000000000..8476713bd2c7
--- /dev/null
+++ b/exporter/sumologicexporter/internal/observability/observability.go
@@ -0,0 +1,126 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package observability // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter/internal/observability"
+
+import (
+ "context"
+ "fmt"
+ "time"
+
+ "go.opencensus.io/stats"
+ "go.opencensus.io/stats/view"
+ "go.opencensus.io/tag"
+)
+
+func init() {
+ err := view.Register(
+ viewRequestsSent,
+ viewRequestsDuration,
+ viewRequestsBytes,
+ viewRequestsRecords,
+ )
+ if err != nil {
+ fmt.Printf("Failed to register sumologic exporter's views: %v\n", err)
+ }
+}
+
+var (
+ mRequestsSent = stats.Int64("exporter/requests/sent", "Number of requests", "1")
+ mRequestsDuration = stats.Int64("exporter/requests/duration", "Duration of HTTP requests (in milliseconds)", "0")
+ mRequestsBytes = stats.Int64("exporter/requests/bytes", "Total size of requests (in bytes)", "0")
+ mRequestsRecords = stats.Int64("exporter/requests/records", "Total size of requests (in number of records)", "0")
+
+ statusKey, _ = tag.NewKey("status_code") // nolint:errcheck
+ endpointKey, _ = tag.NewKey("endpoint") // nolint:errcheck
+ pipelineKey, _ = tag.NewKey("pipeline") // nolint:errcheck
+ exporterKey, _ = tag.NewKey("exporter") // nolint:errcheck
+)
+
+var viewRequestsSent = &view.View{
+ Name: mRequestsSent.Name(),
+ Description: mRequestsSent.Description(),
+ Measure: mRequestsSent,
+ TagKeys: []tag.Key{statusKey, endpointKey, pipelineKey, exporterKey},
+ Aggregation: view.Count(),
+}
+
+var viewRequestsDuration = &view.View{
+ Name: mRequestsDuration.Name(),
+ Description: mRequestsDuration.Description(),
+ Measure: mRequestsDuration,
+ TagKeys: []tag.Key{statusKey, endpointKey, pipelineKey, exporterKey},
+ Aggregation: view.Sum(),
+}
+
+var viewRequestsBytes = &view.View{
+ Name: mRequestsBytes.Name(),
+ Description: mRequestsBytes.Description(),
+ Measure: mRequestsBytes,
+ TagKeys: []tag.Key{statusKey, endpointKey, pipelineKey, exporterKey},
+ Aggregation: view.Sum(),
+}
+
+var viewRequestsRecords = &view.View{
+ Name: mRequestsRecords.Name(),
+ Description: mRequestsRecords.Description(),
+ Measure: mRequestsRecords,
+ TagKeys: []tag.Key{statusKey, endpointKey, pipelineKey, exporterKey},
+ Aggregation: view.Sum(),
+}
+
+// RecordRequestsSent increments the metric that records sent requests
+func RecordRequestsSent(statusCode int, endpoint string, pipeline string, exporter string) error {
+ return stats.RecordWithTags(
+ context.Background(),
+ []tag.Mutator{
+ tag.Insert(statusKey, fmt.Sprint(statusCode)),
+ tag.Insert(endpointKey, endpoint),
+ tag.Insert(pipelineKey, pipeline),
+ tag.Insert(exporterKey, exporter),
+ },
+ mRequestsSent.M(int64(1)),
+ )
+}
+
+// RecordRequestsDuration update metric which records request duration
+func RecordRequestsDuration(duration time.Duration, statusCode int, endpoint string, pipeline string, exporter string) error {
+ return stats.RecordWithTags(
+ context.Background(),
+ []tag.Mutator{
+ tag.Insert(statusKey, fmt.Sprint(statusCode)),
+ tag.Insert(endpointKey, endpoint),
+ tag.Insert(pipelineKey, pipeline),
+ tag.Insert(exporterKey, exporter),
+ },
+ mRequestsDuration.M(duration.Milliseconds()),
+ )
+}
+
+// RecordRequestsBytes update metric which records number of send bytes
+func RecordRequestsBytes(bytes int64, statusCode int, endpoint string, pipeline string, exporter string) error {
+ return stats.RecordWithTags(
+ context.Background(),
+ []tag.Mutator{
+ tag.Insert(statusKey, fmt.Sprint(statusCode)),
+ tag.Insert(endpointKey, endpoint),
+ tag.Insert(pipelineKey, pipeline),
+ tag.Insert(exporterKey, exporter),
+ },
+ mRequestsBytes.M(bytes),
+ )
+}
+
+// RecordRequestsRecords update metric which records number of sent records
+func RecordRequestsRecords(records int64, statusCode int, endpoint string, pipeline string, exporter string) error {
+ return stats.RecordWithTags(
+ context.Background(),
+ []tag.Mutator{
+ tag.Insert(statusKey, fmt.Sprint(statusCode)),
+ tag.Insert(endpointKey, endpoint),
+ tag.Insert(pipelineKey, pipeline),
+ tag.Insert(exporterKey, exporter),
+ },
+ mRequestsRecords.M(records),
+ )
+}
diff --git a/exporter/sumologicexporter/internal/observability/observability_test.go b/exporter/sumologicexporter/internal/observability/observability_test.go
new file mode 100644
index 000000000000..321394115ac8
--- /dev/null
+++ b/exporter/sumologicexporter/internal/observability/observability_test.go
@@ -0,0 +1,177 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package observability // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/sumologicexporter/internal/observability"
+
+import (
+ "context"
+ "sort"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+ "go.opencensus.io/metric/metricdata"
+ "go.opencensus.io/metric/metricexport"
+)
+
+type exporter struct {
+ pipe chan *metricdata.Metric
+}
+
+func newExporter() *exporter {
+ return &exporter{
+ make(chan *metricdata.Metric),
+ }
+}
+
+// Run goroutine which is going to receive `after` metrics.
+// Goroutine is writing to returned chan
+func (e *exporter) ReturnAfter(after int) chan []*metricdata.Metric {
+ ch := make(chan []*metricdata.Metric)
+ go func() {
+ received := []*metricdata.Metric{}
+ for m := range e.pipe {
+ received = append(received, m)
+ if len(received) >= after {
+ break
+ }
+ }
+ ch <- received
+ }()
+ return ch
+}
+
+// Write received metrics to data channel
+func (e *exporter) ExportMetrics(_ context.Context, data []*metricdata.Metric) error {
+ for _, m := range data {
+ e.pipe <- m
+ }
+ return nil
+}
+
+// Creates metrics reader and forward metrics from it to chData
+// Sens empty structs to fail chan afterwards
+func metricReader(chData chan []*metricdata.Metric, fail chan struct{}, count int) {
+
+ // Add a manual retry mechanism in case there's a hiccup reading the
+ // metrics from producers in ReadAndExport(): we can wait for the metrics
+ // to come instead of failing because they didn't come right away.
+ for i := 0; i < 10; i++ {
+ e := newExporter()
+ ch := e.ReturnAfter(count)
+ go metricexport.NewReader().ReadAndExport(e)
+
+ select {
+ case <-time.After(500 * time.Millisecond):
+
+ case data := <-ch:
+ chData <- data
+ return
+ }
+ }
+
+ fail <- struct{}{}
+}
+
+// NOTE:
+// This test can only be run with -count 1 because of static
+// metricproducer.GlobalManager() used in metricexport.NewReader().
+func TestMetrics(t *testing.T) {
+ const (
+ statusCode = 200
+ endpoint = "some/uri"
+ pipeline = "metrics"
+ exporter = "sumologic/my-name"
+ bytesFunc = "bytes"
+ recordsFunc = "records"
+ durationFunc = "duration"
+ sentFunc = "sent"
+ )
+ type testCase struct {
+ name string
+ bytes int64
+ records int64
+ recordFunc string
+ duration time.Duration
+ }
+ tests := []testCase{
+ {
+ name: "exporter/requests/sent",
+ recordFunc: sentFunc,
+ },
+ {
+ name: "exporter/requests/duration",
+ recordFunc: durationFunc,
+ duration: time.Millisecond,
+ },
+ {
+ name: "exporter/requests/bytes",
+ recordFunc: bytesFunc,
+ bytes: 1,
+ },
+ {
+ name: "exporter/requests/records",
+ recordFunc: recordsFunc,
+ records: 1,
+ },
+ }
+
+ var (
+ fail = make(chan struct{})
+ chData = make(chan []*metricdata.Metric)
+ )
+
+ go metricReader(chData, fail, len(tests))
+
+ for _, tt := range tests {
+ switch tt.recordFunc {
+ case sentFunc:
+ require.NoError(t, RecordRequestsSent(statusCode, endpoint, pipeline, exporter))
+ case durationFunc:
+ require.NoError(t, RecordRequestsDuration(tt.duration, statusCode, endpoint, pipeline, exporter))
+ case bytesFunc:
+ require.NoError(t, RecordRequestsBytes(tt.bytes, statusCode, endpoint, pipeline, exporter))
+ case recordsFunc:
+ require.NoError(t, RecordRequestsRecords(tt.records, statusCode, endpoint, pipeline, exporter))
+ }
+ }
+
+ var data []*metricdata.Metric
+ select {
+ case <-fail:
+ t.Fatalf("timedout waiting for metrics to arrive")
+ case data = <-chData:
+ }
+
+ sort.Slice(tests, func(i, j int) bool {
+ return tests[i].name < tests[j].name
+ })
+
+ sort.Slice(data, func(i, j int) bool {
+ return data[i].Descriptor.Name < data[j].Descriptor.Name
+ })
+
+ for i, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ require.Len(t, data, len(tests))
+ d := data[i]
+ assert.Equal(t, tt.name, d.Descriptor.Name, "Expected %v at index %v, but got %v.", tt.name, i, d.Descriptor.Name)
+ require.Len(t, d.TimeSeries, 1)
+ require.Len(t, d.TimeSeries[0].Points, 1)
+ assert.Equal(t, d.TimeSeries[0].Points[0].Value, int64(1))
+
+ require.Len(t, d.TimeSeries[0].LabelValues, 4)
+
+ require.True(t, d.TimeSeries[0].LabelValues[0].Present)
+ require.True(t, d.TimeSeries[0].LabelValues[1].Present)
+ require.True(t, d.TimeSeries[0].LabelValues[2].Present)
+ require.True(t, d.TimeSeries[0].LabelValues[3].Present)
+
+ assert.Equal(t, d.TimeSeries[0].LabelValues[0].Value, "some/uri")
+ assert.Equal(t, d.TimeSeries[0].LabelValues[1].Value, "sumologic/my-name")
+ assert.Equal(t, d.TimeSeries[0].LabelValues[2].Value, "metrics")
+ assert.Equal(t, d.TimeSeries[0].LabelValues[3].Value, "200")
+ })
+ }
+}
diff --git a/exporter/sumologicexporter/metadata.yaml b/exporter/sumologicexporter/metadata.yaml
index 7b7e746efafa..219657ea0094 100644
--- a/exporter/sumologicexporter/metadata.yaml
+++ b/exporter/sumologicexporter/metadata.yaml
@@ -1,4 +1,5 @@
type: sumologic
+scope_name: otelcol/sumologic
status:
class: exporter
@@ -7,3 +8,7 @@ status:
distributions: [contrib]
codeowners:
active: [sumo-drosiek]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
diff --git a/exporter/sumologicexporter/sender.go b/exporter/sumologicexporter/sender.go
index 08dfec87a2aa..0b7f0b516ff9 100644
--- a/exporter/sumologicexporter/sender.go
+++ b/exporter/sumologicexporter/sender.go
@@ -97,7 +97,7 @@ func (s *sender) send(ctx context.Context, pipeline PipelineType, body io.Reader
if err != nil {
return err
}
- req, err := http.NewRequestWithContext(ctx, http.MethodPost, s.config.HTTPClientSettings.Endpoint, data)
+ req, err := http.NewRequestWithContext(ctx, http.MethodPost, s.config.ClientConfig.Endpoint, data)
if err != nil {
return err
}
diff --git a/exporter/sumologicexporter/sender_test.go b/exporter/sumologicexporter/sender_test.go
index 68c6bb47efb7..5cf4a1e1b6a4 100644
--- a/exporter/sumologicexporter/sender_test.go
+++ b/exporter/sumologicexporter/sender_test.go
@@ -42,7 +42,7 @@ func prepareSenderTest(t *testing.T, cb []func(w http.ResponseWriter, req *http.
}))
cfg := &Config{
- HTTPClientSettings: confighttp.HTTPClientSettings{
+ ClientConfig: confighttp.ClientConfig{
Endpoint: testServer.URL,
Timeout: defaultTimeout,
},
@@ -73,7 +73,7 @@ func prepareSenderTest(t *testing.T, cb []func(w http.ResponseWriter, req *http.
s: newSender(
cfg,
&http.Client{
- Timeout: cfg.HTTPClientSettings.Timeout,
+ Timeout: cfg.ClientConfig.Timeout,
},
f,
sourceFormats{
@@ -168,7 +168,7 @@ func exampleMultitypeLogs() []plog.LogRecord {
func TestSendLogs(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, "Example log\nAnother example log", body)
assert.Equal(t, "key1=value, key2=value2", req.Header.Get("X-Sumo-Fields"))
@@ -186,7 +186,7 @@ func TestSendLogs(t *testing.T) {
func TestSendLogsMultitype(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `{"lk1":"lv1","lk2":13}
["lv2",13]`
@@ -206,11 +206,11 @@ func TestSendLogsMultitype(t *testing.T) {
func TestSendLogsSplit(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, "Example log", body)
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, "Another example log", body)
},
@@ -230,7 +230,7 @@ func TestSendLogsSplitFailedOne(t *testing.T) {
body := extractBody(t, req)
assert.Equal(t, "Example log", body)
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, "Another example log", body)
},
@@ -276,7 +276,7 @@ func TestSendLogsSplitFailedAll(t *testing.T) {
func TestSendLogsJson(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `{"key1":"value1","key2":"value2","log":"Example log"}
{"key1":"value1","key2":"value2","log":"Another example log"}`
@@ -296,7 +296,7 @@ func TestSendLogsJson(t *testing.T) {
func TestSendLogsJsonMultitype(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `{"key1":"value1","key2":"value2","log":{"lk1":"lv1","lk2":13}}
{"key1":"value1","key2":"value2","log":["lv2",13]}`
@@ -316,11 +316,11 @@ func TestSendLogsJsonMultitype(t *testing.T) {
func TestSendLogsJsonSplit(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, `{"key1":"value1","key2":"value2","log":"Example log"}`, body)
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, `{"key1":"value1","key2":"value2","log":"Another example log"}`, body)
},
@@ -342,7 +342,7 @@ func TestSendLogsJsonSplitFailedOne(t *testing.T) {
body := extractBody(t, req)
assert.Equal(t, `{"key1":"value1","key2":"value2","log":"Example log"}`, body)
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
assert.Equal(t, `{"key1":"value1","key2":"value2","log":"Another example log"}`, body)
},
@@ -388,7 +388,7 @@ func TestSendLogsJsonSplitFailedAll(t *testing.T) {
func TestSendLogsUnexpectedFormat(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, _ *http.Request) {
},
})
defer func() { test.srv.Close() }()
@@ -403,7 +403,7 @@ func TestSendLogsUnexpectedFormat(t *testing.T) {
func TestOverrideSourceName(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
assert.Equal(t, "Test source name/test_name", req.Header.Get("X-Sumo-Name"))
},
})
@@ -418,7 +418,7 @@ func TestOverrideSourceName(t *testing.T) {
func TestOverrideSourceCategory(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
assert.Equal(t, "Test source category/test_name", req.Header.Get("X-Sumo-Category"))
},
})
@@ -433,7 +433,7 @@ func TestOverrideSourceCategory(t *testing.T) {
func TestOverrideSourceHost(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
assert.Equal(t, "Test source host/test_name", req.Header.Get("X-Sumo-Host"))
},
})
@@ -474,7 +474,7 @@ func TestInvalidEndpoint(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){})
defer func() { test.srv.Close() }()
- test.s.config.HTTPClientSettings.Endpoint = ":"
+ test.s.config.ClientConfig.Endpoint = ":"
test.s.logBuffer = exampleLog()
_, err := test.s.sendLogs(context.Background(), newFields(pcommon.NewMap()))
@@ -485,7 +485,7 @@ func TestInvalidPostRequest(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){})
defer func() { test.srv.Close() }()
- test.s.config.HTTPClientSettings.Endpoint = ""
+ test.s.config.ClientConfig.Endpoint = ""
test.s.logBuffer = exampleLog()
_, err := test.s.sendLogs(context.Background(), newFields(pcommon.NewMap()))
@@ -496,7 +496,7 @@ func TestLogsBufferOverflow(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){})
defer func() { test.srv.Close() }()
- test.s.config.HTTPClientSettings.Endpoint = ":"
+ test.s.config.ClientConfig.Endpoint = ":"
log := exampleLog()
flds := newFields(pcommon.NewMap())
@@ -602,7 +602,7 @@ func TestInvalidContentEncoding(t *testing.T) {
func TestSendMetrics(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `test_metric_data{test="test_value",test2="second_value"} 14500 1605534165000
gauge_metric_name{foo="bar",remote_name="156920",url="http://example_url"} 124 1608124661166
@@ -629,12 +629,12 @@ gauge_metric_name{foo="bar",remote_name="156955",url="http://another_url"} 245 1
func TestSendMetricsSplit(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `test_metric_data{test="test_value",test2="second_value"} 14500 1605534165000`
assert.Equal(t, expected, body)
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `gauge_metric_name{foo="bar",remote_name="156920",url="http://example_url"} 124 1608124661166
gauge_metric_name{foo="bar",remote_name="156955",url="http://another_url"} 245 1608124662166`
@@ -662,7 +662,7 @@ func TestSendMetricsSplitFailedOne(t *testing.T) {
expected := `test_metric_data{test="test_value",test2="second_value"} 14500 1605534165000`
assert.Equal(t, expected, body)
},
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `gauge_metric_name{foo="bar",remote_name="156920",url="http://example_url"} 124 1608124661166
gauge_metric_name{foo="bar",remote_name="156955",url="http://another_url"} 245 1608124662166`
@@ -719,7 +719,7 @@ gauge_metric_name{foo="bar",remote_name="156955",url="http://another_url"} 245 1
func TestSendMetricsUnexpectedFormat(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, _ *http.Request) {
},
})
defer func() { test.srv.Close() }()
@@ -766,7 +766,7 @@ func TestMetricsBufferOverflow(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){})
defer func() { test.srv.Close() }()
- test.s.config.HTTPClientSettings.Endpoint = ":"
+ test.s.config.ClientConfig.Endpoint = ":"
test.s.config.MetricFormat = PrometheusFormat
test.s.config.MaxRequestBodySize = 1024 * 1024 * 1024 * 1024
metric := exampleIntMetric()
@@ -784,7 +784,7 @@ func TestMetricsBufferOverflow(t *testing.T) {
func TestSendCarbon2Metrics(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `test=test_value test2=second_value _unit=m/s escape_me=:invalid_ metric=true metric=test.metric.data unit=bytes 14500 1605534165
foo=bar metric=gauge_metric_name 124 1608124661
@@ -817,7 +817,7 @@ foo=bar metric=gauge_metric_name 245 1608124662`
func TestSendGraphiteMetrics(t *testing.T) {
test := prepareSenderTest(t, []func(w http.ResponseWriter, req *http.Request){
- func(w http.ResponseWriter, req *http.Request) {
+ func(_ http.ResponseWriter, req *http.Request) {
body := extractBody(t, req)
expected := `test_metric_data.true.m/s 14500 1605534165
gauge_metric_name.. 124 1608124661
diff --git a/exporter/syslogexporter/README.md b/exporter/syslogexporter/README.md
index fb530780777c..08457ec06fe2 100644
--- a/exporter/syslogexporter/README.md
+++ b/exporter/syslogexporter/README.md
@@ -4,11 +4,12 @@
| Status | |
| ------------- |-----------|
| Stability | [alpha]: logs |
-| Distributions | [] |
+| Distributions | [contrib] |
| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Fsyslog%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Fsyslog) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Fsyslog%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Fsyslog) |
| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@kkujawa-sumo](https://www.github.com/kkujawa-sumo), [@rnishtala-sumo](https://www.github.com/rnishtala-sumo), [@astencel-sumo](https://www.github.com/astencel-sumo) |
[alpha]: https://github.com/open-telemetry/opentelemetry-collector#alpha
+[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
The Syslog exporter sends logs in [syslog][syslog_wikipedia] format to a remote syslog server.
@@ -26,7 +27,8 @@ This means that syslog messages received via the Syslog receiver and exported vi
- `protocol` - (default = `rfc5424`) rfc5424/rfc3164
- `rfc5424` - Expects the syslog messages to be rfc5424 compliant
- `rfc3164` - Expects the syslog messages to be rfc3164 compliant
-- `tls` - configuration for TLS/mTLS
+- `enable_octet_counting` (default = `false`) - Whether or not to enable rfc6587 octet counting
+- `tls` - configuration for TLS/mTLS (applied only when `network` is set to `tcp`)
- `insecure` (default = `false`) whether to enable client transport security, by default, TLS is enabled.
- `cert_file` - Path to the TLS cert to use for TLS required connections. Should only be used if `insecure` is set to `false`.
- `key_file` - Path to the TLS key to use for TLS required connections. Should only be used if `insecure` is set to `false`.
diff --git a/exporter/syslogexporter/config.go b/exporter/syslogexporter/config.go
index ea3fbbc75ffd..31f0c0c4bfc1 100644
--- a/exporter/syslogexporter/config.go
+++ b/exporter/syslogexporter/config.go
@@ -7,6 +7,7 @@ import (
"errors"
"strings"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/exporter/exporterhelper"
"go.uber.org/multierr"
@@ -17,6 +18,7 @@ var (
errInvalidEndpoint = errors.New("invalid endpoint: endpoint is required but it is not configured")
errUnsupportedNetwork = errors.New("unsupported network: network is required, only tcp/udp supported")
errUnsupportedProtocol = errors.New("unsupported protocol: Only rfc5424 and rfc3164 supported")
+ errOctetCounting = errors.New("octet counting is only supported for rfc5424 protocol")
)
// Config defines configuration for Syslog exporter.
@@ -32,11 +34,14 @@ type Config struct {
// options: rfc5424, rfc3164
Protocol string `mapstructure:"protocol"`
+ // Wether or not to enable RFC 6587 Octet Counting.
+ EnableOctetCounting bool `mapstructure:"enable_octet_counting"`
+
// TLSSetting struct exposes TLS client configuration.
- TLSSetting configtls.TLSClientSetting `mapstructure:"tls"`
+ TLSSetting configtls.ClientConfig `mapstructure:"tls"`
exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
+ configretry.BackOffConfig `mapstructure:"retry_on_failure"`
exporterhelper.TimeoutSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct
}
@@ -62,6 +67,10 @@ func (cfg *Config) Validate() error {
invalidFields = append(invalidFields, errUnsupportedProtocol)
}
+ if cfg.EnableOctetCounting && cfg.Protocol != protocolRFC5424Str {
+ invalidFields = append(invalidFields, errOctetCounting)
+ }
+
if len(invalidFields) > 0 {
return multierr.Combine(invalidFields...)
}
diff --git a/exporter/syslogexporter/exporter.go b/exporter/syslogexporter/exporter.go
index c96274ee0d62..890b1071559e 100644
--- a/exporter/syslogexporter/exporter.go
+++ b/exporter/syslogexporter/exporter.go
@@ -25,18 +25,22 @@ type syslogexporter struct {
}
func initExporter(cfg *Config, createSettings exporter.CreateSettings) (*syslogexporter, error) {
- tlsConfig, err := cfg.TLSSetting.LoadTLSConfig()
- if err != nil {
- return nil, err
- }
-
cfg.Network = strings.ToLower(cfg.Network)
+ var loadedTLSConfig *tls.Config
+ if cfg.Network == "tcp" {
+ var err error
+ loadedTLSConfig, err = cfg.TLSSetting.LoadTLSConfig()
+ if err != nil {
+ return nil, err
+ }
+ }
+
s := &syslogexporter{
config: cfg,
logger: createSettings.Logger,
- tlsConfig: tlsConfig,
- formatter: createFormatter(cfg.Protocol),
+ tlsConfig: loadedTLSConfig,
+ formatter: createFormatter(cfg.Protocol, cfg.EnableOctetCounting),
}
s.logger.Info("Syslog Exporter configured",
@@ -64,7 +68,7 @@ func newLogsExporter(
cfg,
s.pushLogsData,
exporterhelper.WithTimeout(cfg.TimeoutSettings),
- exporterhelper.WithRetry(cfg.RetrySettings),
+ exporterhelper.WithRetry(cfg.BackOffConfig),
exporterhelper.WithQueue(cfg.QueueSettings),
)
}
diff --git a/exporter/syslogexporter/exporter_test.go b/exporter/syslogexporter/exporter_test.go
index 58cdb03a61aa..189e89e73f40 100644
--- a/exporter/syslogexporter/exporter_test.go
+++ b/exporter/syslogexporter/exporter_test.go
@@ -5,6 +5,7 @@ package syslogexporter
import (
"context"
+ "crypto/tls"
"errors"
"io"
"net"
@@ -15,6 +16,7 @@ import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configtls"
"go.opentelemetry.io/collector/consumer/consumererror"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/pdata/pcommon"
@@ -183,3 +185,55 @@ func TestSyslogExportFail(t *testing.T) {
assert.ErrorContains(t, consumerErr, "dial tcp 127.0.0.1:112: connect")
assert.Equal(t, droppedLog, originalForm)
}
+
+func TestTLSConfig(t *testing.T) {
+
+ tests := []struct {
+ name string
+ network string
+ tlsSettings configtls.ClientConfig
+ tlsConfig *tls.Config
+ }{
+ {name: "TCP with TLS configuration",
+ network: "tcp",
+ tlsSettings: configtls.ClientConfig{},
+ tlsConfig: &tls.Config{},
+ },
+ {name: "TCP insecure",
+ network: "tcp",
+ tlsSettings: configtls.ClientConfig{Insecure: true},
+ tlsConfig: nil,
+ },
+ {name: "UDP with TLS configuration",
+ network: "udp",
+ tlsSettings: configtls.ClientConfig{},
+ tlsConfig: nil,
+ },
+ {name: "UDP insecure",
+ network: "udp",
+ tlsSettings: configtls.ClientConfig{Insecure: true},
+ tlsConfig: nil,
+ },
+ }
+
+ for _, testInstance := range tests {
+ t.Run(testInstance.name, func(t *testing.T) {
+
+ exporter, err := initExporter(
+ &Config{Endpoint: "test.com",
+ Network: testInstance.network,
+ Port: 514,
+ Protocol: "rfc5424",
+ TLSSetting: testInstance.tlsSettings},
+ createExporterCreateSettings())
+
+ assert.NoError(t, err)
+ if testInstance.tlsConfig != nil {
+ assert.NotNil(t, exporter.tlsConfig)
+ } else {
+ assert.Nil(t, exporter.tlsConfig)
+ }
+
+ })
+ }
+}
diff --git a/exporter/syslogexporter/factory.go b/exporter/syslogexporter/factory.go
index d922688b437b..6234c41347de 100644
--- a/exporter/syslogexporter/factory.go
+++ b/exporter/syslogexporter/factory.go
@@ -8,6 +8,7 @@ import (
"fmt"
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter"
"go.opentelemetry.io/collector/exporter/exporterhelper"
@@ -31,7 +32,7 @@ func createDefaultConfig() component.Config {
Port: DefaultPort,
Network: DefaultNetwork,
Protocol: DefaultProtocol,
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
+ BackOffConfig: configretry.NewDefaultBackOffConfig(),
QueueSettings: qs,
TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(),
}
diff --git a/exporter/syslogexporter/factory_test.go b/exporter/syslogexporter/factory_test.go
index 3f547388e353..47cfc42a35d2 100644
--- a/exporter/syslogexporter/factory_test.go
+++ b/exporter/syslogexporter/factory_test.go
@@ -9,14 +9,16 @@ import (
"github.com/cenkalti/backoff/v4"
"github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/config/configretry"
"go.opentelemetry.io/collector/exporter/exporterhelper"
+
+ "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter/internal/metadata"
)
func TestType(t *testing.T) {
factory := NewFactory()
pType := factory.Type()
- assert.Equal(t, pType, component.Type("syslog"))
+ assert.Equal(t, pType, metadata.Type)
}
func TestCreateDefaultConfig(t *testing.T) {
@@ -31,7 +33,7 @@ func TestCreateDefaultConfig(t *testing.T) {
NumConsumers: 10,
QueueSize: 1000,
},
- RetrySettings: exporterhelper.RetrySettings{
+ BackOffConfig: configretry.BackOffConfig{
Enabled: true,
InitialInterval: 5 * time.Second,
RandomizationFactor: backoff.DefaultRandomizationFactor,
diff --git a/exporter/syslogexporter/formatter.go b/exporter/syslogexporter/formatter.go
index c184ce2813e6..2b0a127aca46 100644
--- a/exporter/syslogexporter/formatter.go
+++ b/exporter/syslogexporter/formatter.go
@@ -7,9 +7,9 @@ import (
"go.opentelemetry.io/collector/pdata/plog"
)
-func createFormatter(protocol string) formatter {
+func createFormatter(protocol string, octetCounting bool) formatter {
if protocol == protocolRFC5424Str {
- return newRFC5424Formatter()
+ return newRFC5424Formatter(octetCounting)
}
return newRFC3164Formatter()
}
diff --git a/exporter/syslogexporter/generated_component_test.go b/exporter/syslogexporter/generated_component_test.go
new file mode 100644
index 000000000000..4acdd30f1a29
--- /dev/null
+++ b/exporter/syslogexporter/generated_component_test.go
@@ -0,0 +1,87 @@
+// Code generated by mdatagen. DO NOT EDIT.
+
+package syslogexporter
+
+import (
+ "context"
+ "testing"
+ "time"
+
+ "github.com/stretchr/testify/require"
+ "go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/collector/confmap/confmaptest"
+ "go.opentelemetry.io/collector/exporter"
+ "go.opentelemetry.io/collector/exporter/exportertest"
+ "go.opentelemetry.io/collector/pdata/pcommon"
+ "go.opentelemetry.io/collector/pdata/plog"
+ "go.opentelemetry.io/collector/pdata/pmetric"
+ "go.opentelemetry.io/collector/pdata/ptrace"
+)
+
+func TestComponentLifecycle(t *testing.T) {
+ factory := NewFactory()
+
+ tests := []struct {
+ name string
+ createFn func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error)
+ }{
+
+ {
+ name: "logs",
+ createFn: func(ctx context.Context, set exporter.CreateSettings, cfg component.Config) (component.Component, error) {
+ return factory.CreateLogsExporter(ctx, set, cfg)
+ },
+ },
+ }
+
+ cm, err := confmaptest.LoadConf("metadata.yaml")
+ require.NoError(t, err)
+ cfg := factory.CreateDefaultConfig()
+ sub, err := cm.Sub("tests::config")
+ require.NoError(t, err)
+ require.NoError(t, component.UnmarshalConfig(sub, cfg))
+
+ for _, test := range tests {
+ t.Run(test.name+"-shutdown", func(t *testing.T) {
+ c, err := test.createFn(context.Background(), exportertest.NewNopCreateSettings(), cfg)
+ require.NoError(t, err)
+ err = c.Shutdown(context.Background())
+ require.NoError(t, err)
+ })
+ }
+}
+
+func generateLifecycleTestLogs() plog.Logs {
+ logs := plog.NewLogs()
+ rl := logs.ResourceLogs().AppendEmpty()
+ rl.Resource().Attributes().PutStr("resource", "R1")
+ l := rl.ScopeLogs().AppendEmpty().LogRecords().AppendEmpty()
+ l.Body().SetStr("test log message")
+ l.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return logs
+}
+
+func generateLifecycleTestMetrics() pmetric.Metrics {
+ metrics := pmetric.NewMetrics()
+ rm := metrics.ResourceMetrics().AppendEmpty()
+ rm.Resource().Attributes().PutStr("resource", "R1")
+ m := rm.ScopeMetrics().AppendEmpty().Metrics().AppendEmpty()
+ m.SetName("test_metric")
+ dp := m.SetEmptyGauge().DataPoints().AppendEmpty()
+ dp.Attributes().PutStr("test_attr", "value_1")
+ dp.SetIntValue(123)
+ dp.SetTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return metrics
+}
+
+func generateLifecycleTestTraces() ptrace.Traces {
+ traces := ptrace.NewTraces()
+ rs := traces.ResourceSpans().AppendEmpty()
+ rs.Resource().Attributes().PutStr("resource", "R1")
+ span := rs.ScopeSpans().AppendEmpty().Spans().AppendEmpty()
+ span.Attributes().PutStr("test_attr", "value_1")
+ span.SetName("test_span")
+ span.SetStartTimestamp(pcommon.NewTimestampFromTime(time.Now().Add(-1 * time.Second)))
+ span.SetEndTimestamp(pcommon.NewTimestampFromTime(time.Now()))
+ return traces
+}
diff --git a/exporter/syslogexporter/go.mod b/exporter/syslogexporter/go.mod
index a0b104a038fb..0ac751bf3c43 100644
--- a/exporter/syslogexporter/go.mod
+++ b/exporter/syslogexporter/go.mod
@@ -1,53 +1,65 @@
module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/syslogexporter
-go 1.20
+go 1.21
require (
- github.com/stretchr/testify v1.8.4
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/configtls v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.uber.org/zap v1.26.0
+ github.com/stretchr/testify v1.9.0
+ go.opentelemetry.io/collector/component v0.98.0
+ go.opentelemetry.io/collector/config/configretry v0.98.0
+ go.opentelemetry.io/collector/config/configtls v0.98.0
+ go.opentelemetry.io/collector/exporter v0.98.0
+ go.opentelemetry.io/collector/pdata v1.5.0
+ go.uber.org/goleak v1.3.0
+ go.uber.org/zap v1.27.0
)
require (
+ github.com/beorn7/perks v1.0.1 // indirect
+ github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
+ github.com/go-logr/logr v1.4.1 // indirect
+ github.com/go-logr/stdr v1.2.2 // indirect
+ github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1 // indirect
+ github.com/google/uuid v1.6.0 // 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
- go.opentelemetry.io/collector v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configopaque v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/extension v0.89.0 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d // indirect
+ github.com/knadh/koanf/v2 v2.1.1 // indirect
+ github.com/prometheus/client_golang v1.19.0 // indirect
+ github.com/prometheus/client_model v0.6.1 // indirect
+ github.com/prometheus/common v0.48.0 // indirect
+ github.com/prometheus/procfs v0.12.0 // indirect
+ go.opentelemetry.io/collector v0.98.0 // indirect
+ go.opentelemetry.io/collector/config/configopaque v1.5.0 // indirect
+ go.opentelemetry.io/collector/config/configtelemetry v0.98.0 // indirect
+ go.opentelemetry.io/collector/extension v0.98.0 // indirect
+ go.opentelemetry.io/collector/receiver v0.98.0 // indirect
+ go.opentelemetry.io/otel/exporters/prometheus v0.47.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.25.0 // indirect
+ go.opentelemetry.io/otel/sdk/metric v1.25.0 // indirect
+ google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 // indirect
)
require (
- github.com/cenkalti/backoff/v4 v4.2.1
+ github.com/cenkalti/backoff/v4 v4.3.0
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.3 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector/confmap v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0
- go.opentelemetry.io/collector/featuregate v1.0.0-rcv0018 // indirect
- go.opentelemetry.io/otel v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
+ go.opentelemetry.io/collector/confmap v0.98.0
+ go.opentelemetry.io/collector/consumer v0.98.0
+ go.opentelemetry.io/otel v1.25.0 // indirect
+ go.opentelemetry.io/otel/metric v1.25.0
+ go.opentelemetry.io/otel/trace v1.25.0
go.uber.org/multierr v1.11.0
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
+ golang.org/x/net v0.23.0 // indirect
+ golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
+ google.golang.org/grpc v1.62.1 // indirect
+ google.golang.org/protobuf v1.33.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
diff --git a/exporter/syslogexporter/go.sum b/exporter/syslogexporter/go.sum
index cf50e9a2e581..e9f1365b1ff0 100644
--- a/exporter/syslogexporter/go.sum
+++ b/exporter/syslogexporter/go.sum
@@ -1,56 +1,32 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
+github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
+github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
+github.com/go-logr/logr v1.4.1/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-viper/mapstructure/v2 v2.0.0-alpha.1 h1:TQcrn6Wq+sKGkpyPvppOz99zsMBaUOKXq6HSv655U1c=
+github.com/go-viper/mapstructure/v2 v2.0.0-alpha.1/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
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/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-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/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -59,15 +35,14 @@ github.com/knadh/koanf/maps v0.1.1 h1:G5TjmUh2D7G2YWf5SQQqSiHRJEjaicvU0KpypqB3NI
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/knadh/koanf/v2 v2.1.1 h1:/R8eXqasSTsmDCsAyYj+81Wteg8AqrV9CP6gvsTsOmM=
+github.com/knadh/koanf/v2 v2.1.1/go.mod h1:4mnTRbZCK+ALuBXHZMjDfG9y714L7TykVnZkXbMU3Es=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
+github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
+github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
@@ -77,104 +52,90 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
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/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
+github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU=
+github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k=
+github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
+github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
+github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE=
+github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc=
+github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
+github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
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/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-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.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/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/confmap v0.89.0 h1:N5Vg1+FXEFBHHlGIPg4OSlM9uTHjCI7RlWWrKjtOzWQ=
-go.opentelemetry.io/collector/confmap v0.89.0/go.mod h1:D8FMPvuihtVxwXaz/qp5q9X2lq9l97QyjfsdZD1spmc=
-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/extension v0.89.0 h1:iiaWIPPFqP4T0FSgl6+D1xRUhVnhsk88uk2BxCFqt7E=
-go.opentelemetry.io/collector/extension v0.89.0/go.mod h1:tBh5wD4AZ3xFO6M1CjkEEx2urexTqcAcgi9cJSPME3E=
-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/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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-go.opentelemetry.io/otel/exporters/prometheus v0.43.0 h1:Skkl6akzvdWweXX6LLAY29tyFSO6hWZ26uDbVGTDXe8=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk/metric v1.20.0 h1:5eD40l/H2CqdKmbSV7iht2KMK0faAIL2pVYzJOWobGk=
-go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A=
+go.opentelemetry.io/collector v0.98.0 h1:O7bpARGWzNfFQEYevLl4iigDrpGTJY3vV/kKqNZzMOk=
+go.opentelemetry.io/collector v0.98.0/go.mod h1:fvPM+tBML07uvAP1MV2msYPSYJ9U/lgE1jDb3AFBaMM=
+go.opentelemetry.io/collector/component v0.98.0 h1:0TMaBOyCdABiVLFdGOgG8zd/1IeGldCinYonbY08xWk=
+go.opentelemetry.io/collector/component v0.98.0/go.mod h1:F6zyQLsoExl6r2q6WWZm8rmSSALbwG2zwIHLrMzZVio=
+go.opentelemetry.io/collector/config/configopaque v1.5.0 h1:WJzgmsFU2v63BypPBNGL31ACwWn6PwumPJNpLZplcdE=
+go.opentelemetry.io/collector/config/configopaque v1.5.0/go.mod h1:/otnfj2E8r5EfaAdNV4qHkTclmiBCZXaahV5EcLwT7k=
+go.opentelemetry.io/collector/config/configretry v0.98.0 h1:gZRenX9oMLJmQ/CD8YwFNl9YYl68RtcD0RYSCJhrMAk=
+go.opentelemetry.io/collector/config/configretry v0.98.0/go.mod h1:uRdmPeCkrW9Zsadh2WEbQ1AGXGYJ02vCfmmT+0g69nY=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0 h1:f8RNZ1l/kYPPoxFmKKvTUli8iON7CMsm85KM38PVNts=
+go.opentelemetry.io/collector/config/configtelemetry v0.98.0/go.mod h1:YV5PaOdtnU1xRomPcYqoHmyCr48tnaAREeGO96EZw8o=
+go.opentelemetry.io/collector/config/configtls v0.98.0 h1:g+MADy01ge8iGC6v2tbJ5G27CWNG1BaJtmYdmpvm8e4=
+go.opentelemetry.io/collector/config/configtls v0.98.0/go.mod h1:9RHArziz0mNEEkti0kz5LIdvbQGT7/Unu/0whKKazHQ=
+go.opentelemetry.io/collector/confmap v0.98.0 h1:qQreBlrqio1y7uhrAvr+W86YbQ6fw7StgkbYpvJ2vVc=
+go.opentelemetry.io/collector/confmap v0.98.0/go.mod h1:BWKPIpYeUzSG6ZgCJMjF7xsLvyrvJCfYURl57E5vhiQ=
+go.opentelemetry.io/collector/consumer v0.98.0 h1:47zJ5HFKXVA0RciuwkZnPU5W8j0TYUxToB1/zzzgEhs=
+go.opentelemetry.io/collector/consumer v0.98.0/go.mod h1:c2edTq38uVJET/NE6VV7/Qpyznnlz8b6VE7J6TXD57c=
+go.opentelemetry.io/collector/exporter v0.98.0 h1:eN2qtkiwpeX9gBu9JZw1k/CZ3N9wZE1aGJ1A0EvwJ7w=
+go.opentelemetry.io/collector/exporter v0.98.0/go.mod h1:GCW46a0VAuW7nljlW//GgFXI+8mSrJjrdEKVO9icExE=
+go.opentelemetry.io/collector/extension v0.98.0 h1:08B5ipEsoNmPHY96j5EUsUrFre01GOZ4zgttUDtPUkY=
+go.opentelemetry.io/collector/extension v0.98.0/go.mod h1:fZ1Hnnahszl5j3xcW2sMRJ0FLWDOFkFMQeVDP0Se7i8=
+go.opentelemetry.io/collector/pdata v1.5.0 h1:1fKTmUpr0xCOhP/B0VEvtz7bYPQ45luQ8XFyA07j8LE=
+go.opentelemetry.io/collector/pdata v1.5.0/go.mod h1:TYj8aKRWZyT/KuKQXKyqSEvK/GV+slFaDMEI+Ke64Yw=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0 h1:8gohV+LFXqMzuDwfOOQy9GcZBOX0C9xGoQkoeXFTzmI=
+go.opentelemetry.io/collector/pdata/testdata v0.98.0/go.mod h1:B/IaHcf6+RtxI292CZu9TjfYQdi1n4+v6b8rHEonpKs=
+go.opentelemetry.io/collector/receiver v0.98.0 h1:qw6JYwm+sHcZvM1DByo3QlGe6yGHuwd0yW4hEPVqYKU=
+go.opentelemetry.io/collector/receiver v0.98.0/go.mod h1:AwIWn+KnquTR+kbhXQrMH+i2PvTCFldSIJznBWFYs0s=
+go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k=
+go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0 h1:OL6yk1Z/pEGdDnrBbxSsH+t4FY1zXfBRGd7bjwhlMLU=
+go.opentelemetry.io/otel/exporters/prometheus v0.47.0/go.mod h1:xF3N4OSICZDVbbYZydz9MHFro1RjmkPUKEvar2utG+Q=
+go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA=
+go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s=
+go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo=
+go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0 h1:7CiHOy08LbrxMAp4vWpbiPcklunUshVpAvGBrdDRlGw=
+go.opentelemetry.io/otel/sdk/metric v1.25.0/go.mod h1:LzwoKptdbBBdYfvtGCzGwk6GWMA3aUzBOwtQpR6Nz7o=
+go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM=
+go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I=
+go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
+go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
+go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
+go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.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/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/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
+golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-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/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
+golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
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/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
@@ -182,38 +143,16 @@ golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d h1:uvYuEyMHKNt+lT4K3bN6fGswmK8qSvcreM3BwjDh+y4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20230822172742-b8732ec3820d/go.mod h1:+Bk1OCOj40wS2hwAMA+aCW9ypzm63QTBBHp6lQ3p+9M=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-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.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s=
+google.golang.org/grpc v1.62.1 h1:B4n+nfKzOICUXMgyrNd19h/I9oH0L1pizfk1d4zSgTk=
+google.golang.org/grpc v1.62.1/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
+google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI=
+google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff --git a/exporter/syslogexporter/internal/metadata/generated_status.go b/exporter/syslogexporter/internal/metadata/generated_status.go
index 7b226c8c8706..4d8055eb7c1f 100644
--- a/exporter/syslogexporter/internal/metadata/generated_status.go
+++ b/exporter/syslogexporter/internal/metadata/generated_status.go
@@ -4,9 +4,22 @@ package metadata
import (
"go.opentelemetry.io/collector/component"
+ "go.opentelemetry.io/otel/metric"
+ "go.opentelemetry.io/otel/trace"
+)
+
+var (
+ Type = component.MustNewType("syslog")
)
const (
- Type = "syslog"
LogsStability = component.StabilityLevelAlpha
)
+
+func Meter(settings component.TelemetrySettings) metric.Meter {
+ return settings.MeterProvider.Meter("otelcol/syslog")
+}
+
+func Tracer(settings component.TelemetrySettings) trace.Tracer {
+ return settings.TracerProvider.Tracer("otelcol/syslog")
+}
diff --git a/exporter/syslogexporter/metadata.yaml b/exporter/syslogexporter/metadata.yaml
index 35ac5f4da970..8c0c3204e25f 100644
--- a/exporter/syslogexporter/metadata.yaml
+++ b/exporter/syslogexporter/metadata.yaml
@@ -1,8 +1,14 @@
type: syslog
+scope_name: otelcol/syslog
status:
class: exporter
stability:
alpha: [logs]
+ distributions: [contrib]
codeowners:
active: [kkujawa-sumo, rnishtala-sumo, astencel-sumo]
+
+# TODO: Update the exporter to pass the tests
+tests:
+ skip_lifecycle: true
diff --git a/exporter/syslogexporter/package_test.go b/exporter/syslogexporter/package_test.go
new file mode 100644
index 000000000000..70ac459041ec
--- /dev/null
+++ b/exporter/syslogexporter/package_test.go
@@ -0,0 +1,14 @@
+// Copyright The OpenTelemetry Authors
+// SPDX-License-Identifier: Apache-2.0
+
+package syslogexporter
+
+import (
+ "testing"
+
+ "go.uber.org/goleak"
+)
+
+func TestMain(m *testing.M) {
+ goleak.VerifyTestMain(m)
+}
diff --git a/exporter/syslogexporter/rfc5424_formatter.go b/exporter/syslogexporter/rfc5424_formatter.go
index 53e1bb872cc1..f13398f84703 100644
--- a/exporter/syslogexporter/rfc5424_formatter.go
+++ b/exporter/syslogexporter/rfc5424_formatter.go
@@ -13,10 +13,13 @@ import (
)
type rfc5424Formatter struct {
+ octetCounting bool
}
-func newRFC5424Formatter() *rfc5424Formatter {
- return &rfc5424Formatter{}
+func newRFC5424Formatter(octetCounting bool) *rfc5424Formatter {
+ return &rfc5424Formatter{
+ octetCounting: octetCounting,
+ }
}
func (f *rfc5424Formatter) format(logRecord plog.LogRecord) string {
@@ -30,6 +33,11 @@ func (f *rfc5424Formatter) format(logRecord plog.LogRecord) string {
structuredData := f.formatStructuredData(logRecord)
messageString := f.formatMessage(logRecord)
formatted := fmt.Sprintf("<%s>%s %s %s %s %s %s %s%s\n", priorityString, versionString, timestampString, hostnameString, appnameString, pidString, messageIDString, structuredData, messageString)
+
+ if f.octetCounting {
+ formatted = fmt.Sprintf("%d %s", len(formatted), formatted)
+ }
+
return formatted
}
diff --git a/exporter/syslogexporter/rfc5424_formatter_test.go b/exporter/syslogexporter/rfc5424_formatter_test.go
index d88fb9f53a88..e74a052e2e13 100644
--- a/exporter/syslogexporter/rfc5424_formatter_test.go
+++ b/exporter/syslogexporter/rfc5424_formatter_test.go
@@ -29,8 +29,10 @@ func TestRFC5424Formatter(t *testing.T) {
require.NoError(t, err)
logRecord.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
- actual := newRFC5424Formatter().format(logRecord)
+ actual := newRFC5424Formatter(false).format(logRecord)
assert.Equal(t, expected, actual)
+ octetCounting := newRFC5424Formatter(true).format(logRecord)
+ assert.Equal(t, fmt.Sprintf("%d %s", len(expected), expected), octetCounting)
expected = "<165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog 111 ID47 - BOMAn application event log entry...\n"
logRecord = plog.NewLogRecord()
@@ -45,8 +47,10 @@ func TestRFC5424Formatter(t *testing.T) {
require.NoError(t, err)
logRecord.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
- actual = newRFC5424Formatter().format(logRecord)
+ actual = newRFC5424Formatter(false).format(logRecord)
assert.Equal(t, expected, actual)
+ octetCounting = newRFC5424Formatter(true).format(logRecord)
+ assert.Equal(t, fmt.Sprintf("%d %s", len(expected), expected), octetCounting)
// Test structured data
expectedRegex := "\\<165\\>1 2003-08-24T12:14:15.000003Z 192\\.0\\.2\\.1 myproc 8710 - " +
@@ -72,7 +76,7 @@ func TestRFC5424Formatter(t *testing.T) {
require.NoError(t, err)
logRecord.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
- actual = newRFC5424Formatter().format(logRecord)
+ actual = newRFC5424Formatter(false).format(logRecord)
assert.NoError(t, err)
matched, err := regexp.MatchString(expectedRegex, actual)
assert.NoError(t, err)
@@ -89,6 +93,6 @@ func TestRFC5424Formatter(t *testing.T) {
require.NoError(t, err)
logRecord.SetTimestamp(pcommon.NewTimestampFromTime(timestamp))
- actual = newRFC5424Formatter().format(logRecord)
+ actual = newRFC5424Formatter(false).format(logRecord)
assert.Equal(t, expected, actual)
}
diff --git a/exporter/syslogexporter/sender.go b/exporter/syslogexporter/sender.go
index cd3d5d700963..cd70b2ed8163 100644
--- a/exporter/syslogexporter/sender.go
+++ b/exporter/syslogexporter/sender.go
@@ -78,8 +78,8 @@ func (s *sender) dial() error {
s.conn = nil
}
var err error
- if s.tlsConfig != nil {
- s.conn, err = tls.Dial("tcp", s.addr, s.tlsConfig)
+ if s.tlsConfig != nil && s.network == "tcp" {
+ s.conn, err = tls.Dial(s.network, s.addr, s.tlsConfig)
} else {
s.conn, err = net.Dial(s.network, s.addr)
}
diff --git a/exporter/tanzuobservabilityexporter/README.md b/exporter/tanzuobservabilityexporter/README.md
deleted file mode 100644
index 65016f80d9e5..000000000000
--- a/exporter/tanzuobservabilityexporter/README.md
+++ /dev/null
@@ -1,264 +0,0 @@
-# Deprecated Tanzu Observability (Wavefront) Exporter
-
-> [!WARNING]
-> Tanzu Observability (Wavefront) Proxy v11.3 supports native OpenTelemetry protocol (OTLP) ingestion of traces and metrics, released in June 2022.
-> This vendor specific exporter is deprecated and will become unavailable after the end of 2023.
->
-> Refer to our [documentation](https://docs.wavefront.com/opentelemetry_overview.html) for configuring the Proxy to receive traces and metrics via OTLP gRPC or OTLP HTTP.
->
-
-
-
-| Status | |
-| ------------- |-----------|
-| Stability | [deprecated]: traces, metrics |
-| Distributions | [contrib] |
-| Issues | [![Open issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aopen%20label%3Aexporter%2Ftanzuobservability%20&label=open&color=orange&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aopen+is%3Aissue+label%3Aexporter%2Ftanzuobservability) [![Closed issues](https://img.shields.io/github/issues-search/open-telemetry/opentelemetry-collector-contrib?query=is%3Aissue%20is%3Aclosed%20label%3Aexporter%2Ftanzuobservability%20&label=closed&color=blue&logo=opentelemetry)](https://github.com/open-telemetry/opentelemetry-collector-contrib/issues?q=is%3Aclosed+is%3Aissue+label%3Aexporter%2Ftanzuobservability) |
-| [Code Owners](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/CONTRIBUTING.md#becoming-a-code-owner) | [@oppegard](https://www.github.com/oppegard), [@thepeterstone](https://www.github.com/thepeterstone), [@keep94](https://www.github.com/keep94) |
-
-[deprecated]: https://github.com/open-telemetry/opentelemetry-collector#deprecated
-[contrib]: https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
-
-
-
-This exporter supports sending metrics and traces to [Tanzu Observability](https://tanzu.vmware.com/observability).
-
-## Prerequisites
-
-- [Obtain the Tanzu Observability by Wavefront API token.](https://docs.wavefront.com/wavefront_api.html#generating-an-api-token)
-- [Set up and start a Tanzu Observability by Wavefront proxy](https://docs.wavefront.com/proxies_installing.html) and
- configure it with the API token you obtained.
-- To have the proxy generate [span RED metrics](https://docs.wavefront.com/trace_data_details.html#red-metrics) from
- trace data, [configure](https://docs.wavefront.com/proxies_configuring.html) the proxy to receive traces by
- setting `customTracingListenerPorts=30001`. For metrics, the proxy listens on port 2878 by default.
-
-## Configuration
-
-Given a Wavefront proxy at 10.10.10.10 configured with `customTracingListenerPorts=30001`, a basic configuration of
-the Tanzu Observability exporter follows:
-
-```yaml
-receivers:
- examplereceiver:
-
-processors:
- batch:
- timeout: 10s
-
-exporters:
- tanzuobservability:
- traces:
- endpoint: "http://10.10.10.10:30001"
- metrics:
- endpoint: "http://10.10.10.10:2878"
-
-service:
- pipelines:
- traces:
- receivers: [ examplereceiver ]
- processors: [ batch ]
- exporters: [ tanzuobservability ]
- metrics:
- receivers: [ examplereceiver ]
- processors: [ batch ]
- exporters: [ tanzuobservability ]
-```
-
-## Advanced Configuration
-
-### Resource Attributes on Metrics
-
-Client programs using an OpenTelemetry SDK can be configured to wrap all emitted telemetry (metrics, spans, logs) with
-a set of global key-value pairs,
-called [resource attributes](https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/resource/sdk.md)
-.
-By default, the Tanzu Observability Exporter includes resource attributes on spans but _excludes_ them on metrics. To
-include resource attributes as tags on metrics, set the flag `resource_attrs_included` to `true` as per the example
-below.
-
-**Note:** Tanzu Observability has a 254-character limit on tag key-value pairs. If a resource attribute exceeds this
-limit, the metric will not show up in Tanzu Observability.
-
-### Application Resource Attributes on Metrics
-
-The Tanzu Observability Exporter will
-include [application resource attributes](https://docs.wavefront.com/trace_data_details.html#application-tags) on
-metrics (`application`, `service.name`
-, `cluster`, and `shard`). To exclude these resource
-attributes as tags on metrics, set the flag `app_tags_excluded` to `true` as per the example
-below.
-
-**Note:** A tag `service.name`(if provided) becomes `service` on the transformed wavefront metric. However, if both the
-tags (`service` & `service.name`) are provided then the `service` tag will be included.
-
-### Queuing and Retries
-
-This exporter uses OpenTelemetry Collector helpers to queue data and retry on failures.
-
-* `retry_on_failure` [Details and defaults here](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md#configuration)
- .
-* `sending_queue` [Details and defaults here](https://github.com/open-telemetry/opentelemetry-collector/blob/main/exporter/exporterhelper/README.md#configuration)
-
-### Recommended Pipeline Processors
-
-The memory_limiter processor is recommended to prevent out of memory situations on the collector. It allows performing
-periodic checks of memory usage – if it exceeds defined limits it will begin dropping data and forcing garbage
-collection to reduce memory
-consumption. [Details and defaults here](https://github.com/open-telemetry/opentelemetry-collector/blob/main/processor/memorylimiterprocessor/README.md)
-.
-
-**Note:** The order matters when enabling multiple processors in a pipeline (e.g. the memory limiter and batch
-processors in the example config below). Please refer to the
-processors' [documentation](https://github.com/open-telemetry/opentelemetry-collector/tree/main/processor)
-for more information.
-
-### Example Advanced Configuration
-
-```yaml
-receivers:
- examplereceiver:
-
-processors:
- memory_limiter:
- check_interval: 1s
- limit_percentage: 50
- spike_limit_percentage: 30
- batch:
- timeout: 10s
-
-exporters:
- tanzuobservability:
- traces:
- endpoint: "http://10.10.10.10:30001"
- metrics:
- endpoint: "http://10.10.10.10:2878"
- resource_attrs_included: true
- app_tags_excluded: true
- retry_on_failure:
- max_elapsed_time: 3m
- sending_queue:
- queue_size: 10000
-
-service:
- pipelines:
- traces:
- receivers: [ examplereceiver ]
- processors: [ memory_limiter, batch ]
- exporters: [ tanzuobservability ]
- metrics:
- receivers: [ examplereceiver ]
- processors: [ memory_limiter, batch ]
- exporters: [ tanzuobservability ]
-```
-
-## Attributes Required by Tanzu Observability
-
-### Source
-
-A `source` field is required in Tanzu
-Observability [spans](https://docs.wavefront.com/trace_data_details.html#span-fields)
-and [metrics](https://docs.wavefront.com/wavefront_data_format.html#wavefront-data-format-fields). The source is set to
-the
-first matching OpenTelemetry Resource Attribute:
-
-1. `source`
-2. `host.name`
-3. `hostname`
-4. `host.id`
-
-To reduce duplicate data, the matched attribute is excluded from the tags on the exported Tanzu Observability span or
-metric.
-If none of the above resource attributes exist, the OpenTelemetry Collector's hostname is used as a fallback for source.
-
-### Application Identity Tags on Spans
-
-[Application identity tags](https://docs.wavefront.com/trace_data_details.html#how-wavefront-uses-application-tags) of
-`application` and `service` are required for all spans in Tanzu Observability.
-
-- `application` is set to the value of the attribute `application` on the OpenTelemetry Span or Resource. Default is "
- defaultApp".
-- `service` is set the value of the attribute `service` or `service.name` on the OpenTelemetry Span or Resource. Default
- is "defaultService".
-
-## Data Conversion for Traces
-
-- Trace IDs and Span IDs are converted to UUIDs. For example, span IDs are left-padded with zeros to fit the correct
- size.
-- Events are converted to [Span Logs](https://docs.wavefront.com/trace_data_details.html#span-logs).
-- Kind is converted to the `span.kind` tag.
-- If a Span's status code is error, a tag of `error=true` is added. If the status also has a description, it's set
- to `otel.status_description`.
-- TraceState is converted to the `w3c.tracestate` tag.
-
-## Data Conversion for Metrics
-
-This section describes the process used by the Exporter when converting from
-[OpenTelemetry Metrics](https://opentelemetry.io/docs/reference/specification/metrics/datamodel) to
-[Tanzu Observability by Wavefront Metrics](https://docs.wavefront.com/metric_types.html).
-
-| OpenTelemetry Metric Type | Wavefront Metric Type | Notes |
-| ------ | ------ | ------ |
-| Gauge | Gauge |
-| Cumulative Sum | Cumulative Counter |
-| Delta Sum | Delta Counter |
-| Cumulative Histogram (incl. Exponential) | Cumulative Counters | [Details below](#cumulative-histogram-conversion-incl-exponential). |
-| Delta Histogram (incl. Exponential) | Histogram |
-| Summary | Gauges | [Details below](#summary-conversion).
-
-### Cumulative Histogram Conversion (incl. Exponential)
-
-A cumulative histogram is converted to multiple counter metrics: one counter per bucket in the histogram. Each counter
-has a special "le" tag that matches the upper bound of the corresponding bucket. The value of the counter metric is the
-sum of the histogram's corresponding bucket and all the buckets before it.
-
-When working with OpenTelemetry Cumulative Histograms that have been converted to Wavefront Counters, these functions
-will be of use:
-
-- [cumulativeHisto()](https://docs.wavefront.com/ts_cumulativeHisto.html)
-- [cumulativePercentile()](https://docs.wavefront.com/ts_cumulativePercentile.html)
-
-#### Example
-
-Suppose a cumulative histogram named "http.response_times" has
-the following buckets and values:
-
-| Bucket | Value |
-| ------ | ----- |
-| ≤ 100ms | 5 |
-| > 100ms to ≤ 200ms | 20 |
-| > 200ms | 100 |
-
-The exporter sends the following metrics to tanzuobservability:
-
-| Name | Tags | Value |
-| ---- | ---- | ----- |
-| http.response_times | le="100" | 5 |
-| http.response_times | le="200" | 25 |
-| http.response_times | le="+Inf" | 125 |
-
-#### Example WQL Query on a Cumulative Histogram
-
-Using the cumulative histogram from the section above, this WQL query will produce a graph showing
-the 95th percentile of http response times in the last 15 minutes.
-
-```
-cumulativePercentile(95, mavg(15m, deriv(sum(ts(http.reponse_times), le))))
-```
-
-The sum function aggregates the http response times and groups them by the le tag. Since
-http.response_times has three buckets, the sum() function will graph three lines, one for each bucket.
-deriv() shows the per second rate of change in the three lines from sum. The mavg function averages
-the rates of change of the three lines over the last 15 minutes. Since the rates of change are per
-second, if you multiply the average rate of change for a bucket by 900, you get the number of new
-http requests falling into that bucket in the last 15 minutes. Finally, cumulativePercentile
-uses the values of the `le` tags, which are http response times, and linear interpolation of the
-bucket counts to estimate the 95th percentile of http.response_times over the last 15 minutes.
-
-### Summary Conversion
-
-A summary is converted to multiple gauge metrics: one gauge for every quantile in the summary. A special "quantile" tag
-contains avalue between 0 and 1 indicating the quantile for which the value belongs.
-
-[beta]:https://github.com/open-telemetry/opentelemetry-collector#beta
-
-[contrib]:https://github.com/open-telemetry/opentelemetry-collector-releases/tree/main/distributions/otelcol-contrib
diff --git a/exporter/tanzuobservabilityexporter/config.go b/exporter/tanzuobservabilityexporter/config.go
deleted file mode 100644
index cbf01377cbc2..000000000000
--- a/exporter/tanzuobservabilityexporter/config.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter"
-
-import (
- "errors"
- "fmt"
- "net/url"
- "strconv"
-
- "go.opentelemetry.io/collector/config/confighttp"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
-)
-
-type TracesConfig struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct.
-}
-
-type MetricsConfig struct {
- confighttp.HTTPClientSettings `mapstructure:",squash"`
- ResourceAttrsIncluded bool `mapstructure:"resource_attrs_included"`
- // AppTagsExcluded will exclude the Resource Attributes `application`, `service.name` -> (service),
- // `cluster`, and `shard` from the transformed TObs metric if set to true.
- AppTagsExcluded bool `mapstructure:"app_tags_excluded"`
-}
-
-// Config defines configuration options for the exporter.
-type Config struct {
- exporterhelper.QueueSettings `mapstructure:"sending_queue"`
- exporterhelper.RetrySettings `mapstructure:"retry_on_failure"`
-
- // Traces defines the Traces exporter specific configuration
- Traces TracesConfig `mapstructure:"traces"`
- Metrics MetricsConfig `mapstructure:"metrics"`
-}
-
-func (c *Config) hasMetricsEndpoint() bool {
- return c.Metrics.Endpoint != ""
-}
-
-func (c *Config) hasTracesEndpoint() bool {
- return c.Traces.Endpoint != ""
-}
-
-func (c *Config) parseMetricsEndpoint() (hostName string, port int, err error) {
- return parseEndpoint(c.Metrics.Endpoint)
-}
-
-func (c *Config) parseTracesEndpoint() (hostName string, port int, err error) {
- return parseEndpoint(c.Traces.Endpoint)
-}
-
-func (c *Config) Validate() error {
- var tracesHostName, metricsHostName string
- var err error
- if c.hasTracesEndpoint() {
- tracesHostName, _, err = c.parseTracesEndpoint()
- if err != nil {
- return fmt.Errorf("failed to parse traces.endpoint: %w", err)
- }
- }
- if c.hasMetricsEndpoint() {
- metricsHostName, _, err = c.parseMetricsEndpoint()
- if err != nil {
- return fmt.Errorf("failed to parse metrics.endpoint: %w", err)
- }
- }
- if c.hasTracesEndpoint() && c.hasMetricsEndpoint() && tracesHostName != metricsHostName {
- return errors.New("host for metrics and traces must be the same")
- }
- return nil
-}
-
-func parseEndpoint(endpoint string) (hostName string, port int, err error) {
- if endpoint == "" {
- return "", 0, errors.New("a non-empty endpoint is required")
- }
- u, err := url.Parse(endpoint)
- if err != nil {
- return "", 0, err
- }
- port, err = strconv.Atoi(u.Port())
- if err != nil {
- return "", 0, errors.New("valid port required")
- }
- hostName = u.Hostname()
- return hostName, port, nil
-}
diff --git a/exporter/tanzuobservabilityexporter/config_test.go b/exporter/tanzuobservabilityexporter/config_test.go
deleted file mode 100644
index 6e31d90a97cf..000000000000
--- a/exporter/tanzuobservabilityexporter/config_test.go
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter
-
-import (
- "path/filepath"
- "testing"
- "time"
-
- "github.com/cenkalti/backoff/v4"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/config/confighttp"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
- "go.opentelemetry.io/collector/otelcol/otelcoltest"
-)
-
-func TestLoadConfig(t *testing.T) {
- factories, err := otelcoltest.NopFactories()
- require.NoError(t, err)
-
- factory := NewFactory()
- factories.Exporters[exporterType] = factory
- cfg, err := otelcoltest.LoadConfigAndValidate(filepath.Join("testdata", "config.yaml"), factories)
-
- require.NoError(t, err)
- require.NotNil(t, cfg)
-
- actual, ok := cfg.Exporters[component.NewID("tanzuobservability")]
- require.True(t, ok)
- expected := &Config{
- Traces: TracesConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http://localhost:40001"},
- },
- Metrics: MetricsConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http://localhost:2916"},
- ResourceAttrsIncluded: true,
- AppTagsExcluded: true,
- },
- QueueSettings: exporterhelper.QueueSettings{
- Enabled: true,
- NumConsumers: 2,
- QueueSize: 10,
- },
- RetrySettings: exporterhelper.RetrySettings{
- Enabled: true,
- InitialInterval: 10 * time.Second,
- MaxInterval: 60 * time.Second,
- MaxElapsedTime: 10 * time.Minute,
- RandomizationFactor: backoff.DefaultRandomizationFactor,
- Multiplier: backoff.DefaultMultiplier,
- },
- }
- assert.Equal(t, expected, actual)
-}
-
-func TestConfigRequiresValidEndpointUrl(t *testing.T) {
- c := &Config{
- Traces: TracesConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http#$%^$%"},
- },
- }
- assert.Error(t, c.Validate())
-}
-
-func TestMetricsConfigRequiresValidEndpointUrl(t *testing.T) {
- c := &Config{
- Metrics: MetricsConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http#$%^$%"},
- },
- }
-
- assert.Error(t, c.Validate())
-}
-
-func TestDifferentHostNames(t *testing.T) {
- c := &Config{
- Traces: TracesConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http://localhost:30001"},
- },
- Metrics: MetricsConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http://foo.com:2878"},
- },
- }
- assert.Error(t, c.Validate())
-}
-
-func TestConfigNormal(t *testing.T) {
- c := &Config{
- Traces: TracesConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http://localhost:40001"},
- },
- Metrics: MetricsConfig{
- HTTPClientSettings: confighttp.HTTPClientSettings{Endpoint: "http://localhost:2916"},
- },
- }
- assert.NoError(t, c.Validate())
-}
-
-func TestMetricConfig(t *testing.T) {
- c := &Config{
- Metrics: MetricsConfig{},
- }
- assert.NoError(t, c.Validate())
- assert.False(t, c.Metrics.ResourceAttrsIncluded)
- assert.False(t, c.Metrics.AppTagsExcluded)
-
- c = &Config{
- Metrics: MetricsConfig{
- ResourceAttrsIncluded: true,
- AppTagsExcluded: true,
- },
- }
- assert.NoError(t, c.Validate())
- assert.True(t, c.Metrics.ResourceAttrsIncluded)
- assert.True(t, c.Metrics.AppTagsExcluded)
-}
diff --git a/exporter/tanzuobservabilityexporter/factory.go b/exporter/tanzuobservabilityexporter/factory.go
deleted file mode 100644
index a978899cb28a..000000000000
--- a/exporter/tanzuobservabilityexporter/factory.go
+++ /dev/null
@@ -1,96 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-//go:generate mdatagen metadata.yaml
-
-package tanzuobservabilityexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter"
-
-import (
- "context"
- "fmt"
-
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/exporter"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
-
- "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter/internal/metadata"
-)
-
-const (
- exporterType = "tanzuobservability"
-)
-
-// NewFactory creates a factory for the exporter.
-func NewFactory() exporter.Factory {
- return exporter.NewFactory(
- exporterType,
- createDefaultConfig,
- exporter.WithTraces(createTracesExporter, metadata.TracesStability),
- exporter.WithMetrics(createMetricsExporter, metadata.MetricsStability),
- )
-}
-
-func createDefaultConfig() component.Config {
- return &Config{
- QueueSettings: exporterhelper.NewDefaultQueueSettings(),
- RetrySettings: exporterhelper.NewDefaultRetrySettings(),
- }
-}
-
-// createTracesExporter implements exporterhelper.CreateTracesExporter and creates
-// an exporter for traces using this configuration
-func createTracesExporter(
- ctx context.Context,
- set exporter.CreateSettings,
- cfg component.Config,
-) (exporter.Traces, error) {
- exp, err := newTracesExporter(set, cfg)
- if err != nil {
- return nil, err
- }
-
- tobsCfg, ok := cfg.(*Config)
- if !ok {
- return nil, fmt.Errorf("invalid config: %#v", cfg)
- }
-
- return exporterhelper.NewTracesExporter(
- ctx,
- set,
- cfg,
- exp.pushTraceData,
- exporterhelper.WithQueue(tobsCfg.QueueSettings),
- exporterhelper.WithRetry(tobsCfg.RetrySettings),
- exporterhelper.WithShutdown(exp.shutdown),
- )
-}
-
-func createMetricsExporter(
- ctx context.Context,
- set exporter.CreateSettings,
- cfg component.Config,
-) (exporter.Metrics, error) {
- tobsCfg, ok := cfg.(*Config)
- if !ok {
- return nil, fmt.Errorf("invalid config: %#v", cfg)
- }
- exp, err := newMetricsExporter(set, tobsCfg, createMetricsConsumer)
- if err != nil {
- return nil, err
- }
-
- exporter, err := exporterhelper.NewMetricsExporter(
- ctx,
- set,
- cfg,
- exp.pushMetricsData,
- exporterhelper.WithQueue(tobsCfg.QueueSettings),
- exporterhelper.WithRetry(tobsCfg.RetrySettings),
- exporterhelper.WithShutdown(exp.shutdown),
- )
- if err != nil {
- return nil, err
- }
-
- return exporter, nil
-}
diff --git a/exporter/tanzuobservabilityexporter/factory_test.go b/exporter/tanzuobservabilityexporter/factory_test.go
deleted file mode 100644
index ea3f7e175ff1..000000000000
--- a/exporter/tanzuobservabilityexporter/factory_test.go
+++ /dev/null
@@ -1,113 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter
-
-import (
- "context"
- "testing"
-
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "go.opentelemetry.io/collector/component/componenttest"
- "go.opentelemetry.io/collector/exporter/exportertest"
-)
-
-func TestCreateDefaultConfig(t *testing.T) {
- cfg := createDefaultConfig()
- assert.NotNil(t, cfg, "failed to create default config")
- require.NoError(t, componenttest.CheckConfigStruct(cfg))
-
- actual, ok := cfg.(*Config)
- require.True(t, ok, "invalid Config: %#v", cfg)
- assert.False(t, actual.hasMetricsEndpoint())
- assert.False(t, actual.hasTracesEndpoint())
- assert.False(t, actual.Metrics.ResourceAttrsIncluded)
- assert.False(t, actual.Metrics.AppTagsExcluded)
-}
-
-func TestCreateExporter(t *testing.T) {
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- params := exportertest.NewNopCreateSettings()
- cfg.Traces.Endpoint = "http://localhost:30001"
- te, err := createTracesExporter(context.Background(), params, cfg)
- assert.Nil(t, err)
- assert.NotNil(t, te, "failed to create trace exporter")
-}
-
-func TestCreateMetricsExporter(t *testing.T) {
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- params := exportertest.NewNopCreateSettings()
- cfg.Metrics.Endpoint = "http://localhost:2878"
- te, err := createMetricsExporter(context.Background(), params, cfg)
- assert.NoError(t, err)
- assert.NotNil(t, te, "failed to create metrics exporter")
-}
-
-func TestCreateTraceExporterNilConfigError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- _, err := createTracesExporter(context.Background(), params, nil)
- assert.Error(t, err)
-}
-
-func TestCreateMetricsExporterNilConfigError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- _, err := createMetricsExporter(context.Background(), params, nil)
- assert.Error(t, err)
-}
-
-func TestCreateTraceExporterInvalidEndpointError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- cfg.Traces.Endpoint = "http:#$%^$%"
- _, err := createTracesExporter(context.Background(), params, cfg)
- assert.Error(t, err)
-}
-
-func TestCreateMetricsExporterInvalidEndpointError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- cfg.Metrics.Endpoint = "http:#$%^$%"
- _, err := createMetricsExporter(context.Background(), params, cfg)
- assert.Error(t, err)
-}
-
-func TestCreateTraceExporterMissingPortError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- cfg.Traces.Endpoint = "http://localhost"
- _, err := createTracesExporter(context.Background(), params, cfg)
- assert.Error(t, err)
-}
-
-func TestCreateMetricsExporterMissingPortError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- cfg.Metrics.Endpoint = "http://localhost"
- _, err := createMetricsExporter(context.Background(), params, cfg)
- assert.Error(t, err)
-}
-
-func TestCreateTraceExporterInvalidPortError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- cfg.Traces.Endpoint = "http://localhost:c42a"
- _, err := createTracesExporter(context.Background(), params, cfg)
- assert.Error(t, err)
-}
-
-func TestCreateMetricsExporterInvalidPortError(t *testing.T) {
- params := exportertest.NewNopCreateSettings()
- defaultConfig := createDefaultConfig()
- cfg := defaultConfig.(*Config)
- cfg.Metrics.Endpoint = "http://localhost:c42a"
- _, err := createMetricsExporter(context.Background(), params, cfg)
- assert.Error(t, err)
-}
diff --git a/exporter/tanzuobservabilityexporter/go.mod b/exporter/tanzuobservabilityexporter/go.mod
deleted file mode 100644
index e3fa1a173767..000000000000
--- a/exporter/tanzuobservabilityexporter/go.mod
+++ /dev/null
@@ -1,127 +0,0 @@
-// Deprecated: the Tanzu Observability Exporter is deprecated and will be removed in future versions. Please see the README for more information.
-module github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter
-
-go 1.20
-
-require (
- github.com/cenkalti/backoff/v4 v4.2.1
- github.com/google/uuid v1.4.0
- github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal v0.89.0
- github.com/stretchr/testify v1.8.4
- github.com/wavefronthq/wavefront-sdk-go v0.15.0
- go.opentelemetry.io/collector/component v0.89.0
- go.opentelemetry.io/collector/config/confighttp v0.89.0
- go.opentelemetry.io/collector/exporter v0.89.0
- go.opentelemetry.io/collector/otelcol v0.89.0
- go.opentelemetry.io/collector/pdata v1.0.0-rcv0018
- go.opentelemetry.io/collector/semconv v0.89.0
- go.uber.org/multierr v1.11.0
- go.uber.org/zap v1.26.0
-)
-
-require (
- contrib.go.opencensus.io/exporter/prometheus v0.4.2 // indirect
- github.com/beorn7/perks v1.0.1 // indirect
- github.com/caio/go-tdigest/v4 v4.0.1 // indirect
- github.com/cespare/xxhash/v2 v2.2.0 // indirect
- github.com/davecgh/go-spew v1.1.1 // indirect
- github.com/felixge/httpsnoop v1.0.4 // indirect
- github.com/fsnotify/fsnotify v1.7.0 // indirect
- github.com/go-kit/log v0.2.1 // indirect
- github.com/go-logfmt/logfmt v0.5.1 // indirect
- github.com/go-logr/logr v1.3.0 // indirect
- github.com/go-logr/stdr v1.2.2 // indirect
- github.com/go-ole/go-ole v1.2.6 // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
- github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
- github.com/golang/protobuf v1.5.3 // indirect
- github.com/golang/snappy v0.0.4 // indirect
- github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 // indirect
- github.com/hashicorp/go-version v1.6.0 // indirect
- github.com/inconshreveable/mousetrap v1.1.0 // indirect
- github.com/json-iterator/go v1.1.12 // indirect
- github.com/klauspost/compress v1.17.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/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
- github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect
- github.com/mitchellh/copystructure v1.2.0 // indirect
- github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 // indirect
- github.com/mitchellh/reflectwalk v1.0.2 // indirect
- github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
- github.com/modern-go/reflect2 v1.0.2 // indirect
- github.com/pmezard/go-difflib v1.0.0 // indirect
- github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
- github.com/prometheus/client_golang v1.17.0 // indirect
- github.com/prometheus/client_model v0.5.0 // indirect
- github.com/prometheus/common v0.45.0 // indirect
- github.com/prometheus/procfs v0.12.0 // indirect
- github.com/prometheus/statsd_exporter v0.22.7 // indirect
- github.com/rs/cors v1.10.1 // indirect
- github.com/shirou/gopsutil/v3 v3.23.10 // indirect
- github.com/shoenig/go-m1cpu v0.1.6 // indirect
- github.com/spf13/cobra v1.8.0 // indirect
- github.com/spf13/pflag v1.0.5 // indirect
- github.com/tklauser/go-sysconf v0.3.12 // indirect
- github.com/tklauser/numcpus v0.6.1 // indirect
- github.com/yusufpapurcu/wmi v1.2.3 // indirect
- go.opencensus.io v0.24.0 // indirect
- go.opentelemetry.io/collector v0.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/configopaque v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtelemetry v0.89.0 // indirect
- go.opentelemetry.io/collector/config/configtls 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/connector v0.89.0 // indirect
- go.opentelemetry.io/collector/consumer v0.89.0 // indirect
- go.opentelemetry.io/collector/extension 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/processor v0.89.0 // indirect
- go.opentelemetry.io/collector/receiver v0.89.0 // indirect
- go.opentelemetry.io/collector/service v0.89.0 // indirect
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0 // indirect
- go.opentelemetry.io/contrib/propagators/b3 v1.20.0 // indirect
- go.opentelemetry.io/otel v1.20.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/otlp/otlptrace v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 // indirect
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.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/exporters/stdout/stdouttrace v1.20.0 // indirect
- go.opentelemetry.io/otel/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk v1.20.0 // indirect
- go.opentelemetry.io/otel/sdk/metric v1.20.0 // indirect
- go.opentelemetry.io/otel/trace v1.20.0 // indirect
- go.opentelemetry.io/proto/otlp v1.0.0 // indirect
- golang.org/x/net v0.18.0 // indirect
- golang.org/x/sys v0.14.0 // indirect
- golang.org/x/text v0.14.0 // indirect
- gonum.org/v1/gonum v0.14.0 // indirect
- google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect
- google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect
- google.golang.org/grpc v1.59.0 // indirect
- google.golang.org/protobuf v1.31.0 // indirect
- gopkg.in/yaml.v2 v2.4.0 // indirect
- gopkg.in/yaml.v3 v3.0.1 // indirect
-)
-
-replace github.com/open-telemetry/opentelemetry-collector-contrib/internal/coreinternal => ../../internal/coreinternal
-
-retract (
- v0.76.2
- v0.76.1
- v0.65.0
-)
-
-replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatautil => ../../pkg/pdatautil
-
-replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/pdatatest => ../../pkg/pdatatest
-
-replace github.com/open-telemetry/opentelemetry-collector-contrib/pkg/golden => ../../pkg/golden
diff --git a/exporter/tanzuobservabilityexporter/go.sum b/exporter/tanzuobservabilityexporter/go.sum
deleted file mode 100644
index e31a80359be5..000000000000
--- a/exporter/tanzuobservabilityexporter/go.sum
+++ /dev/null
@@ -1,713 +0,0 @@
-cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
-cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
-cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
-cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
-cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
-cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
-cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
-cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
-cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
-cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
-cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
-cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
-cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
-cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
-cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
-cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
-cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
-cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
-cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
-cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
-cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
-cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
-cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
-cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
-cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
-cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
-cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
-cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
-cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
-cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2 h1:sqfsYl5GIY/L570iT+l93ehxaWJs2/OwXtiWwew3oAg=
-contrib.go.opencensus.io/exporter/prometheus v0.4.2/go.mod h1:dvEHbiKmgvbr5pjaF9fpw1KeYcjrnC1J8B+JKjsZyRQ=
-dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
-github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
-github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
-github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
-github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE=
-github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
-github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
-github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
-github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
-github.com/caio/go-tdigest/v4 v4.0.1 h1:sx4ZxjmIEcLROUPs2j1BGe2WhOtHD6VSe6NNbBdKYh4=
-github.com/caio/go-tdigest/v4 v4.0.1/go.mod h1:Wsa+f0EZnV2gShdj1adgl0tQSoXRxtM0QioTgukFw8U=
-github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM=
-github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
-github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
-github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
-github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
-github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
-github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
-github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
-github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
-github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
-github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
-github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
-github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
-github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
-github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
-github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY=
-github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU=
-github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0=
-github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
-github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
-github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
-github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA=
-github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs=
-github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY=
-github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
-github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
-github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
-github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
-github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
-github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
-github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE=
-github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
-github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
-github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
-github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
-github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
-github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
-github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
-github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
-github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
-github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
-github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
-github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
-github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
-github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
-github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg=
-github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
-github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM=
-github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
-github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
-github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
-github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
-github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
-github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
-github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
-github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
-github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
-github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
-github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4=
-github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
-github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
-github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1 h1:6UKoz5ujsI55KNpsJH3UwCq3T8kKbZwNZBNPuTTje8U=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.1/go.mod h1:YvJ2f6MplWDhfxiUC3KpyTy76kYUZA4W3pTv/wdKQ9Y=
-github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek=
-github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA=
-github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
-github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
-github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
-github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
-github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
-github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
-github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
-github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
-github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
-github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.17.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.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
-github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
-github.com/leesper/go_rng v0.0.0-20190531154944-a612b043e353 h1:X/79QL0b4YJVO5+OsPH9rF2u428CIrGL/jLmPsoOQQ4=
-github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
-github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
-github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg=
-github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k=
-github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
-github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4 h1:BpfhmLKZf+SjVanKKhCgf3bg+511DmU9eDQTen7LLbY=
-github.com/mitchellh/mapstructure v1.5.1-0.20220423185008-bf980b35cac4/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
-github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
-github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
-github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
-github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
-github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
-github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
-github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
-github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
-github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw=
-github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
-github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
-github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
-github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
-github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
-github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY=
-github.com/prometheus/client_golang v1.13.0/go.mod h1:vTeo+zgvILHsnnj/39Ou/1fPN5nJFOEMgftOUOmlvYQ=
-github.com/prometheus/client_golang v1.17.0 h1:rl2sfwZMtSthVU752MqfjQozy7blglC+1SOtjMAMh+Q=
-github.com/prometheus/client_golang v1.17.0/go.mod h1:VeL+gMmOAxkS2IqfCq0ZmHSL+LjWfWDUmp1mBz9JgUY=
-github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
-github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
-github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw=
-github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI=
-github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
-github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo=
-github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc=
-github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
-github.com/prometheus/common v0.35.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA=
-github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM=
-github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY=
-github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
-github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
-github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
-github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
-github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4=
-github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo=
-github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo=
-github.com/prometheus/statsd_exporter v0.22.7 h1:7Pji/i2GuhK6Lu7DHrtTkFmNBCudCPT1pX2CziuyQR0=
-github.com/prometheus/statsd_exporter v0.22.7/go.mod h1:N/TevpjkIh9ccs6nuzY3jQn9dFqnUakOjnEuMPJJJnI=
-github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
-github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M=
-github.com/rs/cors v1.10.1 h1:L0uuZVXIKlI1SShY2nhFfo44TYvDPQ1w4oFkUJNfhyo=
-github.com/rs/cors v1.10.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU=
-github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
-github.com/shirou/gopsutil/v3 v3.23.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/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
-github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
-github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
-github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
-github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
-github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
-github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
-github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
-github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
-github.com/stvp/go-udp-testing v0.0.0-20201019212854-469649b16807/go.mod h1:7jxmlfBCDBXRzr0eAQJ48XC1hBu1np4CS5+cHEYfwpc=
-github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU=
-github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI=
-github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
-github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
-github.com/wavefronthq/wavefront-sdk-go v0.15.0 h1:po9E3vh/0y7kOx8D9EtFp7kbSLLLKbmu/w/s1xGJAQU=
-github.com/wavefronthq/wavefront-sdk-go v0.15.0/go.mod h1:V72c8e+bXuLK8HpA6ioW0ll5mK9IPD+4IHNNDY75ksA=
-github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
-go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
-go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
-go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
-go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0=
-go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo=
-go.opentelemetry.io/collector v0.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/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/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/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/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/zpagesextension v0.89.0 h1:opvHcGANx+dS4HJwGTPtRMd6dZdOmmGn6c3PfW/bihQ=
-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/receiver v0.89.0 h1:wC/FB8e2Ej06jjNW2OiuZoyiSyB8TQNIzYyPlh9oRqI=
-go.opentelemetry.io/collector/receiver v0.89.0/go.mod h1:Rk7Bkz45fVdrcJaVDsPTnHa97ZfSs1ULO76LXc4kLN0=
-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/net/http/otelhttp v0.46.0 h1:1eHu3/pUSWaOgltNK3WJFaywKsTIr/PwvHyDmi0lQA0=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.0/go.mod h1:HyABWq60Uy1kjJSa2BVOxUVao8Cdick5AWSKPutqy6U=
-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/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc=
-go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs=
-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.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0 h1:CsBiKCiQPdSjS+MlRiqeTI9JDDpSuk0Hb6QTRfwer8k=
-go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.20.0/go.mod h1:CMJYNAfooOwSZSAmAeMUV1M+TXld3BiK++z9fqIm2xk=
-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.20.0 h1:4s9HxB4azeeQkhY0GE5wZlMj4/pz8tE5gx2OQpGUw58=
-go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.20.0/go.mod h1:djVA3TUJ2fSdMX0JE5XxFBOaZzprElJoP7fD4vnV2SU=
-go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA=
-go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM=
-go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM=
-go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0=
-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.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ=
-go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU=
-go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I=
-go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM=
-go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
-go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
-go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
-go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo=
-go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
-golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
-golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
-golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
-golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
-golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
-golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
-golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
-golang.org/x/exp v0.0.0-20230711023510-fffb14384f22 h1:FqrVOBQxQ8r/UwwXibI0KMolVhvFiGobSfdE33deHJM=
-golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
-golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
-golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
-golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
-golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
-golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
-golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
-golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
-golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
-golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
-golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
-golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
-golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
-golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
-golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.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=
-golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
-golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
-golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220708085239-5a0f0661e09d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.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/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
-golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.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=
-golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
-golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
-golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
-golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
-golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
-golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
-golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
-golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
-golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-gonum.org/v1/gonum v0.14.0 h1:2NiG67LD1tEH0D7kM+ps2V+fXmsAnpUeec7n8tcr4S0=
-gonum.org/v1/gonum v0.14.0/go.mod h1:AoWeoz0becf9QMWtE8iWXNXc27fK4fNeHNf/oMejGfU=
-google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
-google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
-google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
-google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
-google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
-google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
-google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
-google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
-google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
-google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
-google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
-google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
-google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
-google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
-google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
-google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
-google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
-google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
-google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
-google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
-google.golang.org/genproto v0.0.0-20231030173426-d783a09b4405 h1:I6WNifs6pF9tNdSob2W24JtyxIYjzFB9qDlpUC76q+U=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo=
-google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE=
-google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
-google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
-google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
-google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
-google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
-google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
-google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
-google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk=
-google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98=
-google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
-google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
-google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
-google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
-google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
-google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
-google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
-google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
-google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
-google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
-google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8=
-google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
-gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
-gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
-gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
-gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
-gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
-gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
-honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
-honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
-rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
-rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
diff --git a/exporter/tanzuobservabilityexporter/internal/metadata/generated_status.go b/exporter/tanzuobservabilityexporter/internal/metadata/generated_status.go
deleted file mode 100644
index a5a6b8f99230..000000000000
--- a/exporter/tanzuobservabilityexporter/internal/metadata/generated_status.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// Code generated by mdatagen. DO NOT EDIT.
-
-package metadata
-
-import (
- "go.opentelemetry.io/collector/component"
-)
-
-const (
- Type = "tanzuobservability"
- TracesStability = component.StabilityLevelDeprecated
- MetricsStability = component.StabilityLevelDeprecated
-)
diff --git a/exporter/tanzuobservabilityexporter/metadata.yaml b/exporter/tanzuobservabilityexporter/metadata.yaml
deleted file mode 100644
index c934fb5585b1..000000000000
--- a/exporter/tanzuobservabilityexporter/metadata.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-type: tanzuobservability
-
-status:
- class: exporter
- stability:
- deprecated: [traces, metrics]
- distributions: [contrib]
- codeowners:
- active: [oppegard, thepeterstone, keep94]
diff --git a/exporter/tanzuobservabilityexporter/metrics.go b/exporter/tanzuobservabilityexporter/metrics.go
deleted file mode 100644
index f406f9fbb0be..000000000000
--- a/exporter/tanzuobservabilityexporter/metrics.go
+++ /dev/null
@@ -1,867 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter"
-
-import (
- "context"
- "errors"
- "fmt"
- "math"
- "strconv"
- "sync/atomic"
-
- "github.com/wavefronthq/wavefront-sdk-go/histogram"
- "github.com/wavefronthq/wavefront-sdk-go/senders"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/pmetric"
- "go.uber.org/multierr"
- "go.uber.org/zap"
-)
-
-const (
- missingValueMetricName = "~sdk.otel.collector.missing_values"
- metricNameString = "metric name"
- metricTypeString = "metric type"
- malformedHistogramMetricName = "~sdk.otel.collector.malformed_histogram"
- noAggregationTemporalityMetricName = "~sdk.otel.collector.no_aggregation_temporality"
-)
-
-const (
- histogramDataPointInvalid = "Histogram data point invalid"
-)
-
-var (
- typeIsGaugeTags = map[string]string{"type": "gauge"}
- typeIsSumTags = map[string]string{"type": "sum"}
- typeIsHistogramTags = map[string]string{"type": "histogram"}
-)
-
-var (
- allGranularity = map[histogram.Granularity]bool{histogram.DAY: true, histogram.HOUR: true, histogram.MINUTE: true}
-)
-
-var (
- regularHistogram histogramSpecification = regularHistogramSpecification{}
- exponentialHistogram histogramSpecification = exponentialHistogramSpecification{}
-)
-
-// metricsConsumer instances consume OTEL metrics
-type metricsConsumer struct {
- consumerMap map[pmetric.MetricType]typedMetricConsumer
- sender flushCloser
- reportInternalMetrics bool
- config MetricsConfig
-}
-
-type metricInfo struct {
- pmetric.Metric
- Source string
- SourceKey string
- ResourceAttrs map[string]string
-}
-
-// newMetricsConsumer returns a new metricsConsumer. consumers are the
-// consumers responsible for consuming each type of metric. The Consume method
-// of returned consumer calls the Flush method on sender after consuming
-// all the metrics. Calling Close on the returned metricsConsumer calls Close
-// on sender. sender can be nil. reportInternalMetrics controls whether
-// returned metricsConsumer reports internal metrics.
-func newMetricsConsumer(
- consumers []typedMetricConsumer,
- sender flushCloser,
- reportInternalMetrics bool,
- config MetricsConfig,
-) *metricsConsumer {
- consumerMap := make(map[pmetric.MetricType]typedMetricConsumer, len(consumers))
- for _, consumer := range consumers {
- if consumerMap[consumer.Type()] != nil {
- panic("duplicate consumer type detected: " + consumer.Type().String())
- }
- consumerMap[consumer.Type()] = consumer
- }
- return &metricsConsumer{
- consumerMap: consumerMap,
- sender: sender,
- reportInternalMetrics: reportInternalMetrics,
- config: config,
- }
-}
-
-// Consume consumes OTEL metrics. For each metric in md, it delegates to the
-// typedMetricConsumer that consumes that type of metric. Once Consume consumes
-// all the metrics, it calls Flush() on the sender passed to
-// newMetricsConsumer.
-func (c *metricsConsumer) Consume(ctx context.Context, md pmetric.Metrics) error {
- var errs []error
- rms := md.ResourceMetrics()
- for i := 0; i < rms.Len(); i++ {
- resAttrs := rms.At(i).Resource().Attributes()
- source, sourceKey := getSourceAndKey(resAttrs)
- ilms := rms.At(i).ScopeMetrics()
- for j := 0; j < ilms.Len(); j++ {
- ms := ilms.At(j).Metrics()
- for k := 0; k < ms.Len(); k++ {
- m := ms.At(k)
- var resAttrsMap map[string]string
- if c.config.ResourceAttrsIncluded {
- resAttrsMap = attributesToTags(resAttrs)
- } else if !c.config.AppTagsExcluded {
- resAttrsMap = appAttributesToTags(resAttrs)
- }
- mi := metricInfo{Metric: m, Source: source, SourceKey: sourceKey, ResourceAttrs: resAttrsMap}
- select {
- case <-ctx.Done():
- return multierr.Combine(append(errs, errors.New("context canceled"))...)
- default:
- c.pushSingleMetric(mi, &errs)
- }
- }
- }
- }
- if c.reportInternalMetrics {
- c.pushInternalMetrics(&errs)
- }
- if c.sender != nil {
- if err := c.sender.Flush(); err != nil {
- errs = append(errs, err)
- }
- }
- return multierr.Combine(errs...)
-}
-
-// Close closes this metricsConsumer by calling Close on the sender passed
-// to newMetricsConsumer.
-func (c *metricsConsumer) Close() {
- if c.sender != nil {
- c.sender.Close()
- }
-}
-
-func (c *metricsConsumer) pushInternalMetrics(errs *[]error) {
- for _, consumer := range c.consumerMap {
- consumer.PushInternalMetrics(errs)
- }
-}
-
-func (c *metricsConsumer) pushSingleMetric(mi metricInfo, errs *[]error) {
- dataType := mi.Type()
- consumer := c.consumerMap[dataType]
- if consumer == nil {
- *errs = append(
- *errs, fmt.Errorf("no support for metric type %v", dataType))
-
- } else {
- consumer.Consume(mi, errs)
- }
-}
-
-// typedMetricConsumer consumes one specific type of OTEL metric
-type typedMetricConsumer interface {
-
- // Type returns the type of metric this consumer consumes. For example
- // Gauge, Sum, or Histogram
- Type() pmetric.MetricType
-
- // Consume consumes the metric from the metricInfo and appends any errors encountered to errs
- Consume(mi metricInfo, errs *[]error)
-
- // PushInternalMetrics sends internal metrics for this consumer to tanzu observability
- // and appends any errors encountered to errs. The Consume method of metricsConsumer calls
- // PushInternalMetrics on each registered typedMetricConsumer after it has consumed all the
- // metrics but before it calls Flush on the sender.
- PushInternalMetrics(errs *[]error)
-}
-
-// flushCloser is the interface for the Flush and Close method
-type flushCloser interface {
- Flush() error
- Close()
-}
-
-// report the counter to tanzu observability. name is the name of
-// the metric to be reported. tags is the tags for the metric. sender is what
-// sends the metric to tanzu observability. Any errors get added to errs.
-func report(count *atomic.Int64, name string, tags map[string]string, sender gaugeSender, errs *[]error) {
- err := sender.SendMetric(name, float64(count.Load()), 0, "", tags)
- if err != nil {
- *errs = append(*errs, err)
- }
-}
-
-// logMissingValue keeps track of metrics with missing values. metric is the
-// metric with the missing value. settings logs the missing value. count counts
-// metrics with missing values.
-func logMissingValue(metric pmetric.Metric, settings component.TelemetrySettings, count *atomic.Int64) {
- namef := zap.String(metricNameString, metric.Name())
- typef := zap.String(metricTypeString, metric.Type().String())
- settings.Logger.Debug("Metric missing value", namef, typef)
- count.Add(1)
-}
-
-// getValue gets the floating point value out of a NumberDataPoint
-func getValue(numberDataPoint pmetric.NumberDataPoint) (float64, error) {
- switch numberDataPoint.ValueType() {
- case pmetric.NumberDataPointValueTypeInt:
- return float64(numberDataPoint.IntValue()), nil
- case pmetric.NumberDataPointValueTypeDouble:
- return numberDataPoint.DoubleValue(), nil
- default:
- return 0.0, errors.New("unsupported metric value type")
- }
-}
-
-// pushGaugeNumberDataPoint sends a metric as a gauge metric to tanzu
-// observability. metric is the metric to send. numberDataPoint is the value
-// of the metric. Any errors get appended to errs. sender is what sends the
-// gauge metric to tanzu observability. settings logs problems. missingValues
-// keeps track of metrics with missing values.
-func pushGaugeNumberDataPoint(
- mi metricInfo,
- numberDataPoint pmetric.NumberDataPoint,
- errs *[]error,
- sender gaugeSender,
- settings component.TelemetrySettings,
- missingValues *atomic.Int64,
-) {
- tags := pointAndResAttrsToTagsAndFixSource(mi.SourceKey, numberDataPoint.Attributes(), newMap(mi.ResourceAttrs))
- ts := numberDataPoint.Timestamp().AsTime().Unix()
- value, err := getValue(numberDataPoint)
- if err != nil {
- logMissingValue(mi.Metric, settings, missingValues)
- return
- }
- err = sender.SendMetric(mi.Name(), value, ts, mi.Source, tags)
- if err != nil {
- *errs = append(*errs, err)
- }
-}
-
-// gaugeSender sends gauge metrics to tanzu observability
-type gaugeSender interface {
- SendMetric(name string, value float64, ts int64, source string, tags map[string]string) error
-}
-
-type gaugeConsumer struct {
- sender gaugeSender
- settings component.TelemetrySettings
- missingValues *atomic.Int64
-}
-
-// newGaugeConsumer returns a typedMetricConsumer that consumes gauge metrics
-// by sending them to tanzu observability.
-func newGaugeConsumer(
- sender gaugeSender, settings component.TelemetrySettings) typedMetricConsumer {
- return &gaugeConsumer{
- sender: sender,
- settings: settings,
- missingValues: &atomic.Int64{},
- }
-}
-
-func (g *gaugeConsumer) Type() pmetric.MetricType {
- return pmetric.MetricTypeGauge
-}
-
-func (g *gaugeConsumer) Consume(mi metricInfo, errs *[]error) {
- gauge := mi.Gauge()
- numberDataPoints := gauge.DataPoints()
- for i := 0; i < numberDataPoints.Len(); i++ {
- pushGaugeNumberDataPoint(
- mi,
- numberDataPoints.At(i),
- errs,
- g.sender,
- g.settings,
- g.missingValues)
- }
-}
-
-func (g *gaugeConsumer) PushInternalMetrics(errs *[]error) {
- report(g.missingValues, missingValueMetricName, typeIsGaugeTags, g.sender, errs)
-}
-
-type sumConsumer struct {
- sender senders.MetricSender
- settings component.TelemetrySettings
- missingValues *atomic.Int64
-}
-
-// newSumConsumer returns a typedMetricConsumer that consumes sum metrics
-// by sending them to tanzu observability.
-func newSumConsumer(
- sender senders.MetricSender, settings component.TelemetrySettings) typedMetricConsumer {
- return &sumConsumer{
- sender: sender,
- settings: settings,
- missingValues: &atomic.Int64{},
- }
-}
-
-func (s *sumConsumer) Type() pmetric.MetricType {
- return pmetric.MetricTypeSum
-}
-
-func (s *sumConsumer) Consume(mi metricInfo, errs *[]error) {
- sum := mi.Sum()
- isDelta := sum.AggregationTemporality() == pmetric.AggregationTemporalityDelta
- numberDataPoints := sum.DataPoints()
- for i := 0; i < numberDataPoints.Len(); i++ {
- // If sum is a delta type, send it to tanzu observability as a
- // delta counter. Otherwise, send it to tanzu observability as a gauge
- // metric.
- if isDelta {
- s.pushNumberDataPoint(mi, numberDataPoints.At(i), errs)
- } else {
- pushGaugeNumberDataPoint(
- mi, numberDataPoints.At(i), errs, s.sender, s.settings, s.missingValues)
- }
- }
-}
-
-func (s *sumConsumer) PushInternalMetrics(errs *[]error) {
- report(s.missingValues, missingValueMetricName, typeIsSumTags, s.sender, errs)
-}
-
-func (s *sumConsumer) pushNumberDataPoint(mi metricInfo, numberDataPoint pmetric.NumberDataPoint, errs *[]error) {
- tags := pointAndResAttrsToTagsAndFixSource(mi.SourceKey, numberDataPoint.Attributes(), newMap(mi.ResourceAttrs))
- value, err := getValue(numberDataPoint)
- if err != nil {
- logMissingValue(mi.Metric, s.settings, s.missingValues)
- return
- }
- err = s.sender.SendDeltaCounter(mi.Name(), value, mi.Source, tags)
- if err != nil {
- *errs = append(*errs, err)
- }
-}
-
-// histogramReporting takes care of logging and internal metrics for histograms
-type histogramReporting struct {
- settings component.TelemetrySettings
- malformedHistograms *atomic.Int64
- noAggregationTemporality *atomic.Int64
-}
-
-// newHistogramReporting returns a new histogramReporting instance.
-func newHistogramReporting(settings component.TelemetrySettings) *histogramReporting {
- return &histogramReporting{
- settings: settings,
- malformedHistograms: &atomic.Int64{},
- noAggregationTemporality: &atomic.Int64{},
- }
-}
-
-// Malformed returns the number of malformed histogram data points.
-func (r *histogramReporting) Malformed() int64 {
- return r.malformedHistograms.Load()
-}
-
-// NoAggregationTemporality returns the number of histogram metrics that have no
-// aggregation temporality.
-func (r *histogramReporting) NoAggregationTemporality() int64 {
- return r.noAggregationTemporality.Load()
-}
-
-// LogMalformed logs seeing one malformed data point.
-func (r *histogramReporting) LogMalformed(metric pmetric.Metric) {
- namef := zap.String(metricNameString, metric.Name())
- r.settings.Logger.Debug("Malformed histogram", namef)
- r.malformedHistograms.Add(1)
-}
-
-// LogNoAggregationTemporality logs seeing a histogram metric with no aggregation temporality
-func (r *histogramReporting) LogNoAggregationTemporality(metric pmetric.Metric) {
- namef := zap.String(metricNameString, metric.Name())
- r.settings.Logger.Debug("histogram metric missing aggregation temporality", namef)
- r.noAggregationTemporality.Add(1)
-}
-
-// Report sends the counts in this instance to wavefront.
-// sender is what sends to wavefront. Any errors sending get added to errs.
-func (r *histogramReporting) Report(sender gaugeSender, errs *[]error) {
- report(r.malformedHistograms, malformedHistogramMetricName, nil, sender, errs)
- report(r.noAggregationTemporality, noAggregationTemporalityMetricName, typeIsHistogramTags, sender, errs)
-}
-
-type histogramConsumer struct {
- cumulative histogramDataPointConsumer
- delta histogramDataPointConsumer
- sender gaugeSender
- reporting *histogramReporting
- spec histogramSpecification
-}
-
-// newHistogramConsumer returns a metricConsumer that consumes histograms.
-// cumulative and delta handle cumulative and delta histograms respectively.
-// sender sends internal metrics to wavefront.
-func newHistogramConsumer(
- cumulative, delta histogramDataPointConsumer,
- sender gaugeSender,
- spec histogramSpecification,
- settings component.TelemetrySettings,
-) typedMetricConsumer {
- return &histogramConsumer{
- cumulative: cumulative,
- delta: delta,
- sender: sender,
- reporting: newHistogramReporting(settings),
- spec: spec,
- }
-}
-
-func (h *histogramConsumer) Type() pmetric.MetricType {
- return h.spec.Type()
-}
-
-func (h *histogramConsumer) Consume(mi metricInfo, errs *[]error) {
- aggregationTemporality := h.spec.AggregationTemporality(mi.Metric)
- var consumer histogramDataPointConsumer
- switch aggregationTemporality {
- case pmetric.AggregationTemporalityDelta:
- consumer = h.delta
- case pmetric.AggregationTemporalityCumulative:
- consumer = h.cumulative
- default:
- h.reporting.LogNoAggregationTemporality(mi.Metric)
- return
- }
- points := h.spec.DataPoints(mi.Metric)
- for _, point := range points {
- consumer.Consume(mi, point, errs, h.reporting)
- }
-}
-
-func (h *histogramConsumer) PushInternalMetrics(errs *[]error) {
- h.reporting.Report(h.sender, errs)
-}
-
-// histogramDataPointConsumer consumes one histogram data point. There is one
-// implementation for delta histograms and one for cumulative histograms.
-type histogramDataPointConsumer interface {
-
- // Consume consumes a BucketHistogramDataPoint.
- // mi is the metricInfo which encloses metric; point is the BucketHistogramDataPoint;
- // errors get appended to errs; reporting keeps track of special situations
- Consume(
- mi metricInfo,
- point bucketHistogramDataPoint,
- errs *[]error,
- reporting *histogramReporting,
- )
-}
-
-type cumulativeHistogramDataPointConsumer struct {
- sender gaugeSender
-}
-
-// newCumulativeHistogramDataPointConsumer returns a consumer for cumulative
-// histogram data points.
-func newCumulativeHistogramDataPointConsumer(sender gaugeSender) histogramDataPointConsumer {
- return &cumulativeHistogramDataPointConsumer{sender: sender}
-}
-
-func (c *cumulativeHistogramDataPointConsumer) Consume(
- mi metricInfo,
- point bucketHistogramDataPoint,
- errs *[]error,
- reporting *histogramReporting,
-) {
- if !point.Valid() {
- reporting.LogMalformed(mi.Metric)
- return
- }
- name := mi.Name()
- tags := pointAndResAttrsToTagsAndFixSource(mi.SourceKey, point.Attributes, newMap(mi.ResourceAttrs))
- if leTag, ok := tags["le"]; ok {
- tags["_le"] = leTag
- }
- buckets := point.AsCumulative()
- for _, bucket := range buckets {
- tags["le"] = bucket.Tag
- err := c.sender.SendMetric(
- name, float64(bucket.Count), point.SecondsSinceEpoch, mi.Source, tags)
- if err != nil {
- *errs = append(*errs, err)
- }
- }
-}
-
-type deltaHistogramDataPointConsumer struct {
- sender senders.DistributionSender
-}
-
-// newDeltaHistogramDataPointConsumer returns a consumer for delta
-// histogram data points.
-func newDeltaHistogramDataPointConsumer(
- sender senders.DistributionSender) histogramDataPointConsumer {
- return &deltaHistogramDataPointConsumer{sender: sender}
-}
-
-func (d *deltaHistogramDataPointConsumer) Consume(
- mi metricInfo,
- point bucketHistogramDataPoint,
- errs *[]error,
- reporting *histogramReporting) {
- if !point.Valid() {
- reporting.LogMalformed(mi.Metric)
- return
- }
- name := mi.Name()
- tags := pointAndResAttrsToTagsAndFixSource(mi.SourceKey, point.Attributes, newMap(mi.ResourceAttrs))
- err := d.sender.SendDistribution(
- name, point.AsDelta(), allGranularity, point.SecondsSinceEpoch, mi.Source, tags)
- if err != nil {
- *errs = append(*errs, err)
- }
-}
-
-type summaryConsumer struct {
- sender gaugeSender
- settings component.TelemetrySettings
-}
-
-// newSummaryConsumer returns a typedMetricConsumer that consumes summary metrics
-// by sending them to tanzu observability.
-func newSummaryConsumer(
- sender gaugeSender, settings component.TelemetrySettings,
-) typedMetricConsumer {
- return &summaryConsumer{sender: sender, settings: settings}
-}
-
-func (s *summaryConsumer) Type() pmetric.MetricType {
- return pmetric.MetricTypeSummary
-}
-
-func (s *summaryConsumer) Consume(mi metricInfo, errs *[]error) {
- summary := mi.Summary()
- summaryDataPoints := summary.DataPoints()
- for i := 0; i < summaryDataPoints.Len(); i++ {
- s.sendSummaryDataPoint(mi, summaryDataPoints.At(i), errs)
- }
-}
-
-// PushInternalMetrics is here so that summaryConsumer implements typedMetricConsumer
-func (*summaryConsumer) PushInternalMetrics(*[]error) {
- // Do nothing
-}
-
-func (s *summaryConsumer) sendSummaryDataPoint(
- mi metricInfo, summaryDataPoint pmetric.SummaryDataPoint, errs *[]error,
-) {
- name := mi.Name()
- ts := summaryDataPoint.Timestamp().AsTime().Unix()
- tags := pointAndResAttrsToTagsAndFixSource(mi.SourceKey, summaryDataPoint.Attributes(), newMap(mi.ResourceAttrs))
- count := summaryDataPoint.Count()
- sum := summaryDataPoint.Sum()
-
- if quantileTag, ok := tags["quantile"]; ok {
- tags["_quantile"] = quantileTag
- delete(tags, "quantile")
- }
- s.sendMetric(name+"_count", float64(count), ts, tags, errs, mi.Source)
- s.sendMetric(name+"_sum", sum, ts, tags, errs, mi.Source)
- quantileValues := summaryDataPoint.QuantileValues()
- for i := 0; i < quantileValues.Len(); i++ {
- quantileValue := quantileValues.At(i)
- tags["quantile"] = quantileTagValue(quantileValue.Quantile())
- s.sendMetric(name, quantileValue.Value(), ts, tags, errs, mi.Source)
- }
-}
-
-func (s *summaryConsumer) sendMetric(
- name string,
- value float64,
- ts int64,
- tags map[string]string,
- errs *[]error,
- source string) {
- err := s.sender.SendMetric(name, value, ts, source, tags)
- if err != nil {
- *errs = append(*errs, err)
- }
-}
-
-func quantileTagValue(quantile float64) string {
- return strconv.FormatFloat(quantile, 'f', -1, 64)
-}
-
-// cumulativeBucket represents a cumulative histogram bucket
-type cumulativeBucket struct {
-
- // The value of the "le" tag
- Tag string
-
- // The count of values less than or equal to the "le" tag
- Count uint64
-}
-
-// bucketHistogramDataPoint represents a single histogram data point
-type bucketHistogramDataPoint struct {
- Attributes pcommon.Map
- SecondsSinceEpoch int64
-
- // The bucket counts. For exponential histograms, the first and last element of bucketCounts
- // are always 0.
- bucketCounts []uint64
-
- // The explicit bounds len(explicitBounds) + 1 == len(bucketCounts)
- // If explicitBounds = {10, 20} and bucketCounts = {1, 2, 3} it means that 1 value is <= 10;
- // 2 values are between 10 and 20; and 3 values are > 20
- explicitBounds []float64
-
- // true if data point came from an exponential histogram.
- exponential bool
-}
-
-// Valid returns true if this is a valid data point.
-func (b *bucketHistogramDataPoint) Valid() bool {
- return len(b.bucketCounts) == len(b.explicitBounds)+1
-}
-
-// AsCumulative returns the buckets for a cumulative histogram
-func (b *bucketHistogramDataPoint) AsCumulative() []cumulativeBucket {
- if !b.Valid() {
- panic(histogramDataPointInvalid)
- }
-
- // For exponential histograms, we ignore the first bucket which always has count 0
- // but include the last bucket for +Inf.
- if b.exponential {
- return b.asCumulative(1, len(b.bucketCounts))
- }
- return b.asCumulative(0, len(b.bucketCounts))
-}
-
-// AsDelta returns the centroids for a delta histogram
-func (b *bucketHistogramDataPoint) AsDelta() []histogram.Centroid {
- if !b.Valid() {
- panic(histogramDataPointInvalid)
- }
-
- // For exponential histograms, we ignore the first and last centroids which always have a
- // count of 0.
- if b.exponential {
- return b.asDelta(1, len(b.bucketCounts)-1)
- }
- return b.asDelta(0, len(b.bucketCounts))
-}
-
-func (b *bucketHistogramDataPoint) asCumulative(
- startBucketIndex, endBucketIndex int) []cumulativeBucket {
- result := make([]cumulativeBucket, 0, endBucketIndex-startBucketIndex)
- var leCount uint64
- for i := startBucketIndex; i < endBucketIndex; i++ {
- leCount += b.bucketCounts[i]
- result = append(result, cumulativeBucket{Tag: b.leTagValue(i), Count: leCount})
- }
- return result
-}
-
-func (b *bucketHistogramDataPoint) asDelta(
- startBucketIndex, endBucketIndex int) []histogram.Centroid {
- result := make([]histogram.Centroid, 0, endBucketIndex-startBucketIndex)
- for i := startBucketIndex; i < endBucketIndex; i++ {
- result = append(
- result,
- histogram.Centroid{Value: b.centroidValue(i), Count: int(b.bucketCounts[i])})
- }
- return result
-}
-
-func (b *bucketHistogramDataPoint) leTagValue(bucketIndex int) string {
- if bucketIndex == len(b.explicitBounds) {
- return "+Inf"
- }
- return strconv.FormatFloat(b.explicitBounds[bucketIndex], 'f', -1, 64)
-}
-
-func (b *bucketHistogramDataPoint) centroidValue(index int) float64 {
- length := len(b.explicitBounds)
- if length == 0 {
- // This is the best we can do.
- return 0.0
- }
- if index == 0 {
- return b.explicitBounds[0]
- }
- if index == length {
- return b.explicitBounds[length-1]
- }
- return (b.explicitBounds[index-1] + b.explicitBounds[index]) / 2.0
-}
-
-type histogramSpecification interface {
- Type() pmetric.MetricType
- AggregationTemporality(metric pmetric.Metric) pmetric.AggregationTemporality
- DataPoints(metric pmetric.Metric) []bucketHistogramDataPoint
-}
-
-type regularHistogramSpecification struct {
-}
-
-func (regularHistogramSpecification) Type() pmetric.MetricType {
- return pmetric.MetricTypeHistogram
-}
-
-func (regularHistogramSpecification) AggregationTemporality(
- metric pmetric.Metric) pmetric.AggregationTemporality {
- return metric.Histogram().AggregationTemporality()
-}
-
-func (regularHistogramSpecification) DataPoints(metric pmetric.Metric) []bucketHistogramDataPoint {
- return fromOtelHistogram(metric.Histogram().DataPoints())
-}
-
-type exponentialHistogramSpecification struct {
-}
-
-func (exponentialHistogramSpecification) Type() pmetric.MetricType {
- return pmetric.MetricTypeExponentialHistogram
-}
-
-func (exponentialHistogramSpecification) AggregationTemporality(
- metric pmetric.Metric) pmetric.AggregationTemporality {
- return metric.ExponentialHistogram().AggregationTemporality()
-}
-
-func (exponentialHistogramSpecification) DataPoints(
- metric pmetric.Metric) []bucketHistogramDataPoint {
- return fromOtelExponentialHistogram(metric.ExponentialHistogram().DataPoints())
-}
-
-// fromOtelHistogram converts a regular histogram metric into a slice of data points.
-func fromOtelHistogram(points pmetric.HistogramDataPointSlice) []bucketHistogramDataPoint {
- result := make([]bucketHistogramDataPoint, points.Len())
- for i := 0; i < points.Len(); i++ {
- result[i] = fromOtelHistogramDataPoint(points.At(i))
- }
- return result
-}
-
-// fromOtelExponentialHistogram converts an exponential histogram into a slice of data points.
-func fromOtelExponentialHistogram(
- points pmetric.ExponentialHistogramDataPointSlice) []bucketHistogramDataPoint {
- result := make([]bucketHistogramDataPoint, points.Len())
- for i := 0; i < points.Len(); i++ {
- result[i] = fromOtelExponentialHistogramDataPoint(points.At(i))
- }
- return result
-}
-
-func fromOtelHistogramDataPoint(point pmetric.HistogramDataPoint) bucketHistogramDataPoint {
- return bucketHistogramDataPoint{
- Attributes: point.Attributes(),
- SecondsSinceEpoch: point.Timestamp().AsTime().Unix(),
- bucketCounts: point.BucketCounts().AsRaw(),
- explicitBounds: point.ExplicitBounds().AsRaw(),
- }
-}
-
-func fromOtelExponentialHistogramDataPoint(
- point pmetric.ExponentialHistogramDataPoint) bucketHistogramDataPoint {
-
- // Base is the factor by which the explicit bounds increase from bucket to bucket.
- // This formula comes from the documentation here:
- // https://github.com/open-telemetry/opentelemetry-proto/blob/8ba33cceb4a6704af68a4022d17868a7ac1d94f4/opentelemetry/proto/metrics/v1/metrics.proto#L487
- base := math.Pow(2.0, math.Pow(2.0, -float64(point.Scale())))
-
- // ExponentialHistogramDataPoints have buckets with negative explicit bounds, buckets with
- // positive explicit bounds, and a "zero" bucket. Our job is to merge these bucket groups into
- // a single list of buckets and explicit bounds.
- negativeBucketCounts := point.Negative().BucketCounts().AsRaw()
- positiveBucketCounts := point.Positive().BucketCounts().AsRaw()
-
- // The total number of buckets is the number of negative buckets + the number of positive
- // buckets + 1 for the zero bucket + 1 bucket for negative infinity up to the smallest negative explicit bound
- // + 1 bucket for the largest positive explicit bound up to positive infinity.
- numBucketCounts := 1 + len(negativeBucketCounts) + 1 + len(positiveBucketCounts) + 1
-
- // We pre-allocate the slice setting its length to 0 so that GO doesn't have to keep
- // re-allocating the slice as it grows.
- bucketCounts := make([]uint64, 0, numBucketCounts)
-
- // The number of explicit bounds is always 1 less than the number of buckets. This is how
- // explicit bounds work. If you have 2 explicit bounds say {2.0, 5.0} then you have 3 buckets:
- // one for values less than 2.0; one for values between 2.0 and 5.0; and one for values greater
- // than 5.0.
- explicitBounds := make([]float64, 0, numBucketCounts-1)
-
- appendNegativeBucketsAndExplicitBounds(
- point.Negative().Offset(), base, negativeBucketCounts, &bucketCounts, &explicitBounds)
- appendZeroBucketAndExplicitBound(
- point.Positive().Offset(), base, point.ZeroCount(), &bucketCounts, &explicitBounds)
- appendPositiveBucketsAndExplicitBounds(
- point.Positive().Offset(), base, positiveBucketCounts, &bucketCounts, &explicitBounds)
- return bucketHistogramDataPoint{
- Attributes: point.Attributes(),
- SecondsSinceEpoch: point.Timestamp().AsTime().Unix(),
- bucketCounts: bucketCounts,
- explicitBounds: explicitBounds,
- exponential: true,
- }
-}
-
-// appendNegativeBucketsAndExplicitBounds appends negative buckets and explicit bounds to
-// bucketCounts and explicitBounds respectively. The largest negative explicit bound (the one
-// with the smallest magnitude) is -1*base^negativeOffset
-func appendNegativeBucketsAndExplicitBounds(
- negativeOffset int32,
- base float64,
- negativeBucketCounts []uint64,
- bucketCounts *[]uint64,
- explicitBounds *[]float64,
-) {
- // The count in the first bucket which includes negative infinity is always 0.
- *bucketCounts = append(*bucketCounts, 0)
-
- // The smallest negative explicit bound.
- le := -math.Pow(base, float64(negativeOffset)+float64(len(negativeBucketCounts)))
- *explicitBounds = append(*explicitBounds, le)
-
- // The first negativeBucketCount has a negative explicit bound with the smallest magnitude;
- // the last negativeBucketCount has a negative explicit bound with the largest magnitude.
- // Therefore, to go in order from smallest to largest explicit bound, we have to start with
- // the last element in the negativeBucketCounts array.
- for i := len(negativeBucketCounts) - 1; i >= 0; i-- {
- *bucketCounts = append(*bucketCounts, negativeBucketCounts[i])
- le /= base // We divide by base because our explicit bounds are getting larger as we go
- *explicitBounds = append(*explicitBounds, le)
- }
-}
-
-// appendZeroBucketAndExplicitBound appends the "zero" bucket and explicit bound to bucketCounts
-// and explicitBounds respectively. The smallest positive explicit bound is base^positiveOffset.
-func appendZeroBucketAndExplicitBound(
- positiveOffset int32,
- base float64,
- zeroBucketCount uint64,
- bucketCounts *[]uint64,
- explicitBounds *[]float64,
-) {
- *bucketCounts = append(*bucketCounts, zeroBucketCount)
-
- // The explicit bound of the zeroBucketCount is the smallest positive explicit bound
- *explicitBounds = append(*explicitBounds, math.Pow(base, float64(positiveOffset)))
-}
-
-// appendPositiveBucketsAndExplicitBounds appends positive buckets and explicit bounds to
-// bucketCounts and explicitBounds respectively. The smallest positive explicit bound is
-// base^positiveOffset.
-func appendPositiveBucketsAndExplicitBounds(
- positiveOffset int32,
- base float64,
- positiveBucketCounts []uint64,
- bucketCounts *[]uint64,
- explicitBounds *[]float64,
-) {
- le := math.Pow(base, float64(positiveOffset))
- for _, bucketCount := range positiveBucketCounts {
- *bucketCounts = append(*bucketCounts, bucketCount)
- le *= base
- *explicitBounds = append(*explicitBounds, le)
- }
- // Last bucket count for positive infinity is always 0.
- *bucketCounts = append(*bucketCounts, 0)
-}
diff --git a/exporter/tanzuobservabilityexporter/metrics_exporter.go b/exporter/tanzuobservabilityexporter/metrics_exporter.go
deleted file mode 100644
index ba2f248f5f20..000000000000
--- a/exporter/tanzuobservabilityexporter/metrics_exporter.go
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter"
-
-import (
- "context"
- "fmt"
-
- "github.com/wavefronthq/wavefront-sdk-go/senders"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/exporter"
- "go.opentelemetry.io/collector/pdata/pmetric"
-)
-
-type metricsExporter struct {
- consumer *metricsConsumer
-}
-
-func createMetricsConsumer(config MetricsConfig, settings component.TelemetrySettings, otelVersion string) (*metricsConsumer, error) {
- s, err := senders.NewSender(config.Endpoint,
- senders.FlushIntervalSeconds(60),
- senders.SDKMetricsTags(map[string]string{"otel.metrics.collector_version": otelVersion}),
- )
- if err != nil {
- return nil, fmt.Errorf("failed to create proxy sender: %w", err)
- }
- cumulative := newCumulativeHistogramDataPointConsumer(s)
- delta := newDeltaHistogramDataPointConsumer(s)
- return newMetricsConsumer(
- []typedMetricConsumer{
- newGaugeConsumer(s, settings),
- newSumConsumer(s, settings),
- newHistogramConsumer(cumulative, delta, s, regularHistogram, settings),
- newHistogramConsumer(cumulative, delta, s, exponentialHistogram, settings),
- newSummaryConsumer(s, settings),
- },
- s,
- true, config), nil
-}
-
-type metricsConsumerCreator func(config MetricsConfig, settings component.TelemetrySettings, otelVersion string) (
- *metricsConsumer, error)
-
-func newMetricsExporter(settings exporter.CreateSettings, c component.Config, creator metricsConsumerCreator) (*metricsExporter, error) {
- cfg, ok := c.(*Config)
- if !ok {
- return nil, fmt.Errorf("invalid config: %#v", c)
- }
- if !cfg.hasMetricsEndpoint() {
- return nil, fmt.Errorf("metrics.endpoint required")
- }
- if _, _, err := cfg.parseMetricsEndpoint(); err != nil {
- return nil, fmt.Errorf("failed to parse metrics.endpoint: %w", err)
- }
- consumer, err := creator(cfg.Metrics, settings.TelemetrySettings, settings.BuildInfo.Version)
- if err != nil {
- return nil, err
- }
- return &metricsExporter{
- consumer: consumer,
- }, nil
-}
-
-func (e *metricsExporter) pushMetricsData(ctx context.Context, md pmetric.Metrics) error {
- return e.consumer.Consume(ctx, md)
-}
-
-func (e *metricsExporter) shutdown(_ context.Context) error {
- e.consumer.Close()
- return nil
-}
diff --git a/exporter/tanzuobservabilityexporter/metrics_exporter_test.go b/exporter/tanzuobservabilityexporter/metrics_exporter_test.go
deleted file mode 100644
index 77eca0a5c020..000000000000
--- a/exporter/tanzuobservabilityexporter/metrics_exporter_test.go
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter
-
-import (
- "context"
- "errors"
- "log"
- "testing"
-
- "github.com/stretchr/testify/assert"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/exporter"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
- "go.opentelemetry.io/collector/exporter/exportertest"
- "go.opentelemetry.io/collector/pdata/pmetric"
-)
-
-func TestPushMetricsData(t *testing.T) {
- assert.NoError(t, verifyPushMetricsData(t, false))
-}
-
-func TestPushMetricsDataErrorOnSend(t *testing.T) {
- assert.Error(t, verifyPushMetricsData(t, true))
-}
-
-func verifyPushMetricsData(t *testing.T, errorOnSend bool) error {
- metric := newMetric("test.metric", pmetric.MetricTypeGauge)
- dataPoints := metric.Gauge().DataPoints()
- dataPoints.EnsureCapacity(1)
- addDataPoint(
- 7,
- 1631205001,
- map[string]any{
- "env": "prod",
- "bucket": 73,
- },
- dataPoints,
- )
- metrics := constructMetrics(metric)
- sender := &mockMetricSender{errorOnSend: errorOnSend}
- result := consumeMetrics(metrics, sender)
- assert.Equal(t, 1, sender.numFlushCalls)
- assert.Equal(t, 1, sender.numCloseCalls)
- assert.Equal(t, 1, sender.numSendMetricCalls)
- return result
-}
-
-func createMockMetricsExporter(
- sender *mockMetricSender) (exporter.Metrics, error) {
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
- tobsConfig.Metrics.Endpoint = "http://localhost:2878"
- creator := func(
- metricsConfig MetricsConfig, settings component.TelemetrySettings, otelVersion string) (*metricsConsumer, error) {
- return newMetricsConsumer(
- []typedMetricConsumer{
- newGaugeConsumer(sender, settings),
- },
- sender,
- false,
- tobsConfig.Metrics,
- ), nil
- }
-
- exp, err := newMetricsExporter(exportertest.NewNopCreateSettings(), exporterConfig, creator)
- if err != nil {
- return nil, err
- }
- return exporterhelper.NewMetricsExporter(
- context.Background(),
- exportertest.NewNopCreateSettings(),
- exporterConfig,
- exp.pushMetricsData,
- exporterhelper.WithShutdown(exp.shutdown),
- )
-}
-
-func consumeMetrics(metrics pmetric.Metrics, sender *mockMetricSender) error {
- ctx := context.Background()
- mockOTelMetricsExporter, err := createMockMetricsExporter(sender)
- if err != nil {
- return err
- }
- defer func() {
- if err := mockOTelMetricsExporter.Shutdown(ctx); err != nil {
- log.Fatalln(err)
- }
- }()
- return mockOTelMetricsExporter.ConsumeMetrics(ctx, metrics)
-}
-
-type mockMetricSender struct {
- errorOnSend bool
- numFlushCalls int
- numCloseCalls int
- numSendMetricCalls int
-}
-
-func (m *mockMetricSender) SendMetric(
- _ string, _ float64, _ int64, _ string, _ map[string]string) error {
- m.numSendMetricCalls++
- if m.errorOnSend {
- return errors.New("error sending")
- }
- return nil
-}
-
-func (m *mockMetricSender) Flush() error {
- m.numFlushCalls++
- return nil
-}
-
-func (m *mockMetricSender) Close() { m.numCloseCalls++ }
diff --git a/exporter/tanzuobservabilityexporter/metrics_test.go b/exporter/tanzuobservabilityexporter/metrics_test.go
deleted file mode 100644
index d37f85942894..000000000000
--- a/exporter/tanzuobservabilityexporter/metrics_test.go
+++ /dev/null
@@ -1,1688 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter
-
-import (
- "context"
- "errors"
- "math"
- "strconv"
- "testing"
- "time"
-
- "github.com/stretchr/testify/assert"
- "github.com/wavefronthq/wavefront-sdk-go/histogram"
- "go.opentelemetry.io/collector/component/componenttest"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/pmetric"
- "go.uber.org/zap"
- "go.uber.org/zap/zaptest/observer"
-)
-
-func TestEndToEndGaugeConsumer(t *testing.T) {
- gauge := newMetric("gauge", pmetric.MetricTypeGauge)
- dataPoints := gauge.Gauge().DataPoints()
- dataPoints.EnsureCapacity(1)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
- // Here we test what happens with default config. ResourceAttrsIncluded = false AppTagsExcluded = false
- addDataPoint(
- 432.25,
- 1640123456,
- map[string]any{"source": "renamed", "host.name": "my_source", "env": "prod"},
- dataPoints,
- )
- // test if service.name gets converted to service
- resourceAttributes := map[string]string{"host.name": "my_source", "res_attr_key": "res_attr_value", "application": "test_app", "service.name": "test_service", "shard": "test_shard", "cluster": "test_cluster"}
- metrics := constructMetricsWithTags(resourceAttributes, gauge)
- sender := &mockGaugeSender{}
- gaugeConsumer := newGaugeConsumer(sender, componenttest.NewNopTelemetrySettings())
- consumer := newMetricsConsumer(
- []typedMetricConsumer{gaugeConsumer}, &mockFlushCloser{}, true, tobsConfig.Metrics)
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
-
- // The "host.name" tag gets filtered out as it contains our source, and the "source"
- // tag gets renamed to "_source"
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: "gauge",
- Ts: 1640123456,
- Value: 432.25,
- Tags: map[string]string{"_source": "renamed", "env": "prod", "application": "test_app", "service": "test_service", "shard": "test_shard", "cluster": "test_cluster"},
- Source: "my_source",
- },
- )
-
- // Since internal metrics are coming from the exporter itself, we send
- // them with an empty source which defaults to the host name of the
- // exporter.
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: missingValueMetricName,
- Ts: 0,
- Value: 0.0,
- Tags: typeIsGaugeTags,
- Source: "",
- },
- )
-}
-
-func TestEndToEndGaugeConsumerWithResAttrsIncluded(t *testing.T) {
- gauge := newMetric("gauge", pmetric.MetricTypeGauge)
- dataPoints := gauge.Gauge().DataPoints()
- dataPoints.EnsureCapacity(1)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
- tobsConfig.Metrics.ResourceAttrsIncluded = true
- // Here we test what happens if ResourceAttrsIncluded = true
- addDataPoint(
- 432.25,
- 1640123456,
- map[string]any{"source": "renamed", "host.name": "my_source", "env": "prod"},
- dataPoints,
- )
- // test if service.name gets converted to service
- resourceAttributes := map[string]string{"host.name": "my_source", "res_attr_key": "res_attr_value", "service.name": "test_service"}
- metrics := constructMetricsWithTags(resourceAttributes, gauge)
- sender := &mockGaugeSender{}
- gaugeConsumer := newGaugeConsumer(sender, componenttest.NewNopTelemetrySettings())
- consumer := newMetricsConsumer(
- []typedMetricConsumer{gaugeConsumer}, &mockFlushCloser{}, true, tobsConfig.Metrics)
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
-
- // The "host.name" tag gets filtered out as it contains our source, and the "source"
- // tag gets renamed to "_source"
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: "gauge",
- Ts: 1640123456,
- Value: 432.25,
- Tags: map[string]string{"_source": "renamed", "env": "prod", "res_attr_key": "res_attr_value", "service": "test_service"},
- Source: "my_source",
- },
- )
-
- // Since internal metrics are coming from the exporter itself, we send
- // them with an empty source which defaults to the host name of the
- // exporter.
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: missingValueMetricName,
- Ts: 0,
- Value: 0.0,
- Tags: typeIsGaugeTags,
- Source: "",
- },
- )
-}
-
-func TestEndToEndGaugeConsumerWithAppResAttrsExcluded(t *testing.T) {
- gauge := newMetric("gauge", pmetric.MetricTypeGauge)
- dataPoints := gauge.Gauge().DataPoints()
- dataPoints.EnsureCapacity(1)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
- tobsConfig.Metrics.AppTagsExcluded = true
- // Here we test what happens if ResourceAttrsIncluded = false AppTagsExcluded = true
- addDataPoint(
- 432.25,
- 1640123456,
- map[string]any{"source": "renamed", "host.name": "my_source", "env": "prod"},
- dataPoints,
- )
- // test if service.name gets converted to service
- resourceAttributes := map[string]string{"host.name": "my_source", "res_attr_key": "res_attr_value", "application": "test_app", "service": "test_service", "service.name": "test_service.name", "shard": "test_shard", "cluster": "test_cluster"}
- metrics := constructMetricsWithTags(resourceAttributes, gauge)
- sender := &mockGaugeSender{}
- gaugeConsumer := newGaugeConsumer(sender, componenttest.NewNopTelemetrySettings())
- consumer := newMetricsConsumer(
- []typedMetricConsumer{gaugeConsumer}, &mockFlushCloser{}, true, tobsConfig.Metrics)
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
-
- // The "host.name" tag gets filtered out as it contains our source, and the "source"
- // tag gets renamed to "_source"
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: "gauge",
- Ts: 1640123456,
- Value: 432.25,
- Tags: map[string]string{"_source": "renamed", "env": "prod"},
- Source: "my_source",
- },
- )
-
- // Since internal metrics are coming from the exporter itself, we send
- // them with an empty source which defaults to the host name of the
- // exporter.
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: missingValueMetricName,
- Ts: 0,
- Value: 0.0,
- Tags: typeIsGaugeTags,
- Source: "",
- },
- )
-}
-
-func TestMetricsConsumerNormal(t *testing.T) {
- gauge1 := newMetric("gauge1", pmetric.MetricTypeGauge)
- sum1 := newMetric("sum1", pmetric.MetricTypeSum)
- gauge2 := newMetric("gauge2", pmetric.MetricTypeGauge)
- sum2 := newMetric("sum2", pmetric.MetricTypeSum)
- mockGaugeConsumer := &mockTypedMetricConsumer{typ: pmetric.MetricTypeGauge}
- mockSumConsumer := &mockTypedMetricConsumer{typ: pmetric.MetricTypeSum}
- sender := &mockFlushCloser{}
- metrics := constructMetrics(gauge1, sum1, gauge2, sum2)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(
- []typedMetricConsumer{mockGaugeConsumer, mockSumConsumer}, sender, true, tobsConfig.Metrics)
-
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
-
- assert.ElementsMatch(t, []string{"gauge1", "gauge2"}, mockGaugeConsumer.names)
- assert.ElementsMatch(t, []string{"sum1", "sum2"}, mockSumConsumer.names)
- assert.Equal(t, 1, mockGaugeConsumer.pushInternalMetricsCallCount)
- assert.Equal(t, 1, mockSumConsumer.pushInternalMetricsCallCount)
- assert.Equal(t, 1, sender.numFlushCalls)
- assert.Equal(t, 0, sender.numCloseCalls)
-
- consumer.Close()
- assert.Equal(t, 1, sender.numCloseCalls)
-}
-
-func TestMetricsConsumerNormalWithSourceTag(t *testing.T) {
- sum := newMetric("sum", pmetric.MetricTypeSum)
- mockSumConsumer := &mockTypedMetricConsumer{typ: pmetric.MetricTypeSum}
- sender := &mockFlushCloser{}
- tags := map[string]string{"source": "test_source", "test_key": "test_value"}
- metrics := constructMetricsWithTags(tags, sum)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(
- []typedMetricConsumer{mockSumConsumer}, sender, true, tobsConfig.Metrics)
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
-
- assert.ElementsMatch(t, []string{"sum"}, mockSumConsumer.names)
- assert.ElementsMatch(t, []string{"test_source"}, mockSumConsumer.sources)
- assert.ElementsMatch(t, []string{"source"}, mockSumConsumer.sourceKeys)
-
- assert.Equal(t, 1, mockSumConsumer.pushInternalMetricsCallCount)
- assert.Equal(t, 1, sender.numFlushCalls)
- assert.Equal(t, 0, sender.numCloseCalls)
-
- consumer.Close()
- assert.Equal(t, 1, sender.numCloseCalls)
-}
-
-func TestMetricsConsumerNormalWithHostnameTag(t *testing.T) {
- sum := newMetric("sum", pmetric.MetricTypeSum)
- mockSumConsumer := &mockTypedMetricConsumer{typ: pmetric.MetricTypeSum}
- sender := &mockFlushCloser{}
- tags := map[string]string{"host.name": "test_host.name", "hostname": "test_hostname"}
- metrics := constructMetricsWithTags(tags, sum)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(
- []typedMetricConsumer{mockSumConsumer}, sender, true, tobsConfig.Metrics)
-
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
-
- assert.ElementsMatch(t, []string{"sum"}, mockSumConsumer.names)
- assert.ElementsMatch(t, []string{"test_host.name"}, mockSumConsumer.sources)
- assert.ElementsMatch(t, []string{"host.name"}, mockSumConsumer.sourceKeys)
-
- assert.Equal(t, 1, mockSumConsumer.pushInternalMetricsCallCount)
- assert.Equal(t, 1, sender.numFlushCalls)
- assert.Equal(t, 0, sender.numCloseCalls)
-
- consumer.Close()
- assert.Equal(t, 1, sender.numCloseCalls)
-}
-
-func TestMetricsConsumerNone(t *testing.T) {
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(nil, nil, true, tobsConfig.Metrics)
- metrics := constructMetrics()
-
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
-
- consumer.Close()
-}
-
-func TestNewMetricsConsumerPanicsWithDuplicateMetricType(t *testing.T) {
- mockGaugeConsumer1 := &mockTypedMetricConsumer{typ: pmetric.MetricTypeGauge}
- mockGaugeConsumer2 := &mockTypedMetricConsumer{typ: pmetric.MetricTypeGauge}
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- assert.Panics(t, func() {
- newMetricsConsumer(
- []typedMetricConsumer{mockGaugeConsumer1, mockGaugeConsumer2},
- nil,
- true, tobsConfig.Metrics)
- })
-}
-
-func TestMetricsConsumerPropagatesErrorsOnFlush(t *testing.T) {
- sender := &mockFlushCloser{errorOnFlush: true}
- metrics := constructMetrics()
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(nil, sender, true, tobsConfig.Metrics)
-
- assert.Error(t, consumer.Consume(context.Background(), metrics))
- assert.Equal(t, 1, sender.numFlushCalls)
-}
-
-func TestMetricsConsumerErrorsWithUnregisteredMetricType(t *testing.T) {
- gauge1 := newMetric("gauge1", pmetric.MetricTypeGauge)
- metrics := constructMetrics(gauge1)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(nil, nil, true, tobsConfig.Metrics)
-
- assert.Error(t, consumer.Consume(context.Background(), metrics))
-}
-
-func TestMetricsConsumerErrorConsuming(t *testing.T) {
- gauge1 := newMetric("gauge1", pmetric.MetricTypeGauge)
- mockGaugeConsumer := &mockTypedMetricConsumer{
- typ: pmetric.MetricTypeGauge,
- errorOnConsume: true}
- metrics := constructMetrics(gauge1)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(
- []typedMetricConsumer{mockGaugeConsumer}, nil, true, tobsConfig.Metrics)
-
- assert.Error(t, consumer.Consume(context.Background(), metrics))
- assert.Len(t, mockGaugeConsumer.names, 1)
- assert.Equal(t, 1, mockGaugeConsumer.pushInternalMetricsCallCount)
-}
-
-func TestMetricsConsumerNoReportingInternalMetrics(t *testing.T) {
- gauge1 := newMetric("gauge1", pmetric.MetricTypeGauge)
- mockGaugeConsumer := &mockTypedMetricConsumer{typ: pmetric.MetricTypeGauge}
- metrics := constructMetrics(gauge1)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(
- []typedMetricConsumer{mockGaugeConsumer}, nil, false, tobsConfig.Metrics)
- assert.NoError(t, consumer.Consume(context.Background(), metrics))
- assert.Len(t, mockGaugeConsumer.names, 1)
- assert.Equal(t, 0, mockGaugeConsumer.pushInternalMetricsCallCount)
-}
-
-func TestMetricsConsumerErrorConsumingInternal(t *testing.T) {
- gauge1 := newMetric("gauge1", pmetric.MetricTypeGauge)
- mockGaugeConsumer := &mockTypedMetricConsumer{
- typ: pmetric.MetricTypeGauge, errorOnPushInternalMetrics: true}
- metrics := constructMetrics(gauge1)
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(
- []typedMetricConsumer{mockGaugeConsumer}, nil, true, tobsConfig.Metrics)
-
- assert.Error(t, consumer.Consume(context.Background(), metrics))
- assert.Len(t, mockGaugeConsumer.names, 1)
- assert.Equal(t, 1, mockGaugeConsumer.pushInternalMetricsCallCount)
-}
-
-func TestMetricsConsumerRespectContext(t *testing.T) {
- sender := &mockFlushCloser{}
- gauge1 := newMetric("gauge1", pmetric.MetricTypeGauge)
- mockGaugeConsumer := &mockTypedMetricConsumer{typ: pmetric.MetricTypeGauge}
- exporterConfig := createDefaultConfig()
- tobsConfig := exporterConfig.(*Config)
-
- consumer := newMetricsConsumer(
- []typedMetricConsumer{mockGaugeConsumer}, sender, true, tobsConfig.Metrics)
- ctx, cancel := context.WithCancel(context.Background())
-
- cancel()
- assert.Error(t, consumer.Consume(ctx, constructMetrics(gauge1)))
-
- assert.Zero(t, sender.numFlushCalls)
- assert.Empty(t, mockGaugeConsumer.names)
- assert.Zero(t, mockGaugeConsumer.pushInternalMetricsCallCount)
-}
-
-func TestGaugeConsumerNormal(t *testing.T) {
- verifyGaugeConsumer(t, false)
-}
-
-func TestGaugeConsumerErrorSending(t *testing.T) {
- verifyGaugeConsumer(t, true)
-}
-
-func TestGaugeConsumerMissingValue(t *testing.T) {
- metric := newMetric("missing.value.metric", pmetric.MetricTypeGauge)
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name"}
- dataPoints := metric.Gauge().DataPoints()
- dataPoints.EnsureCapacity(1)
- addDataPoint(
- nil,
- 1633123456,
- nil,
- dataPoints,
- )
- // Sending to tanzu observability should fail
- sender := &mockGaugeSender{errorOnSend: true}
- observedZapCore, observedLogs := observer.New(zap.DebugLevel)
- settings := componenttest.NewNopTelemetrySettings()
- settings.Logger = zap.New(observedZapCore)
- consumer := newGaugeConsumer(sender, settings)
- var errs []error
- expectedMissingValueCount := 2
- for i := 0; i < expectedMissingValueCount; i++ {
- // This call to Consume does not emit any metrics to tanzuobservability
- // because the metric is missing its value.
- consumer.Consume(mi, &errs)
- }
- assert.Empty(t, errs)
-
- // This call adds one error to errs because it emits a metric to
- // tanzu observability and emitting there is set up to fail.
- consumer.PushInternalMetrics(&errs)
-
- // One error from emitting the internal metric
- assert.Len(t, errs, 1)
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: missingValueMetricName,
- Value: float64(expectedMissingValueCount),
- Tags: map[string]string{"type": "gauge"},
- },
- )
- allLogs := observedLogs.All()
- assert.Len(t, allLogs, expectedMissingValueCount)
-}
-
-func TestSumConsumerDelta(t *testing.T) {
- deltaMetric := newMetric(
- "test.delta.metric", pmetric.MetricTypeSum)
- sum := deltaMetric.Sum()
- mi := metricInfo{Metric: deltaMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- sum.SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
- dataPoints := sum.DataPoints()
- dataPoints.EnsureCapacity(2)
- addDataPoint(
- 35,
- 1635205001,
- map[string]any{
- "env": "dev",
- },
- dataPoints,
- )
- addDataPoint(
- 52.375,
- 1635205002,
- map[string]any{
- "env": "prod",
- },
- dataPoints,
- )
-
- sender := &mockSumSender{}
- consumer := newSumConsumer(sender, componenttest.NewNopTelemetrySettings())
- assert.Equal(t, pmetric.MetricTypeSum, consumer.Type())
- var errs []error
-
- // delta sums get treated as delta counters
- consumer.Consume(mi, &errs)
-
- expected := []tobsMetric{
- {
- Name: "test.delta.metric",
- Value: 35.0,
- Source: "test_source",
- Tags: map[string]string{"env": "dev", "res_attr_key": "res_attr_value"},
- },
- {
- Name: "test.delta.metric",
- Value: 52.375,
- Source: "test_source",
- Tags: map[string]string{"env": "prod", "res_attr_key": "res_attr_value"},
- },
- }
- assert.ElementsMatch(t, expected, sender.deltaMetrics)
- assert.Empty(t, sender.metrics)
- assert.Empty(t, errs)
-}
-
-func TestSumConsumerErrorOnSend(t *testing.T) {
- deltaMetric := newMetric(
- "test.delta.metric", pmetric.MetricTypeSum)
- sum := deltaMetric.Sum()
- mi := metricInfo{Metric: deltaMetric, Source: "test_source", SourceKey: "host.name"}
- sum.SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
- dataPoints := sum.DataPoints()
- dataPoints.EnsureCapacity(2)
- addDataPoint(
- 35,
- 1635205001,
- map[string]any{
- "env": "dev",
- },
- dataPoints,
- )
- addDataPoint(
- 52.375,
- 1635205002,
- map[string]any{
- "env": "prod",
- },
- dataPoints,
- )
-
- sender := &mockSumSender{errorOnSend: true}
- consumer := newSumConsumer(sender, componenttest.NewNopTelemetrySettings())
- assert.Equal(t, pmetric.MetricTypeSum, consumer.Type())
- var errs []error
-
- // delta sums get treated as delta counters
- consumer.Consume(mi, &errs)
-
- assert.Len(t, errs, 2)
-}
-
-func TestSumConsumerCumulative(t *testing.T) {
- cumulativeMetric := newMetric(
- "test.cumulative.metric", pmetric.MetricTypeSum)
- sum := cumulativeMetric.Sum()
- mi := metricInfo{Metric: cumulativeMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- sum.SetAggregationTemporality(pmetric.AggregationTemporalityCumulative)
- dataPoints := sum.DataPoints()
- dataPoints.EnsureCapacity(1)
- addDataPoint(
- 62.25,
- 1634205001,
- map[string]any{
- "env": "dev",
- },
- dataPoints,
- )
- sender := &mockSumSender{}
- consumer := newSumConsumer(sender, componenttest.NewNopTelemetrySettings())
- assert.Equal(t, pmetric.MetricTypeSum, consumer.Type())
- var errs []error
-
- // cumulative sums get treated as regular wavefront metrics
- consumer.Consume(mi, &errs)
-
- expected := []tobsMetric{
- {
- Name: "test.cumulative.metric",
- Value: 62.25,
- Ts: 1634205001,
- Source: "test_source",
- Tags: map[string]string{"env": "dev", "res_attr_key": "res_attr_value"},
- },
- }
- assert.ElementsMatch(t, expected, sender.metrics)
- assert.Empty(t, sender.deltaMetrics)
- assert.Empty(t, errs)
-}
-
-func TestSumConsumerUnspecified(t *testing.T) {
- cumulativeMetric := newMetric(
- "test.unspecified.metric", pmetric.MetricTypeSum)
- sum := cumulativeMetric.Sum()
- mi := metricInfo{Metric: cumulativeMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- sum.SetAggregationTemporality(pmetric.AggregationTemporalityUnspecified)
- dataPoints := sum.DataPoints()
- dataPoints.EnsureCapacity(1)
- addDataPoint(
- 72.25,
- 1634206001,
- map[string]any{
- "env": "qa",
- },
- dataPoints,
- )
- sender := &mockSumSender{}
- consumer := newSumConsumer(sender, componenttest.NewNopTelemetrySettings())
- assert.Equal(t, pmetric.MetricTypeSum, consumer.Type())
- var errs []error
-
- // unspecified sums get treated as regular wavefront metrics
- consumer.Consume(mi, &errs)
-
- expected := []tobsMetric{
- {
- Name: "test.unspecified.metric",
- Value: 72.25,
- Ts: 1634206001,
- Source: "test_source",
- Tags: map[string]string{"env": "qa", "res_attr_key": "res_attr_value"},
- },
- }
- assert.ElementsMatch(t, expected, sender.metrics)
- assert.Empty(t, sender.deltaMetrics)
- assert.Empty(t, errs)
-}
-
-func TestSumConsumerMissingValue(t *testing.T) {
- metric := newMetric("missing.value.metric", pmetric.MetricTypeSum)
- sum := metric.Sum()
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- sum.SetAggregationTemporality(pmetric.AggregationTemporalityDelta)
- dataPoints := sum.DataPoints()
- dataPoints.EnsureCapacity(1)
- addDataPoint(
- nil,
- 1633123456,
- nil,
- dataPoints,
- )
- sender := &mockSumSender{}
- observedZapCore, observedLogs := observer.New(zap.DebugLevel)
- settings := componenttest.NewNopTelemetrySettings()
- settings.Logger = zap.New(observedZapCore)
- consumer := newSumConsumer(sender, settings)
- var errs []error
-
- expectedMissingValueCount := 2
- for i := 0; i < expectedMissingValueCount; i++ {
- consumer.Consume(mi, &errs)
- }
- consumer.PushInternalMetrics(&errs)
-
- assert.Len(t, errs, 0)
- assert.Empty(t, sender.deltaMetrics)
- assert.Contains(t, sender.metrics, tobsMetric{
- Name: missingValueMetricName,
- Value: float64(expectedMissingValueCount),
- Tags: map[string]string{"type": "sum"},
- })
- allLogs := observedLogs.All()
- assert.Len(t, allLogs, expectedMissingValueCount)
-}
-
-// Tests that the histogramConsumer correctly delegates to its
-// histogramDataPointConsumers. This tests delta histograms
-func TestHistogramConsumerDeltaAggregation(t *testing.T) {
- numBucketCountsForEachDataPoint := []int{2, 5, 10}
- deltaMetric := newHistogramMetricWithDataPoints(
- "delta.metric",
- pmetric.AggregationTemporalityDelta,
- numBucketCountsForEachDataPoint)
- mi := metricInfo{Metric: deltaMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- sender := &mockGaugeSender{}
- cumulativeConsumer := &mockHistogramDataPointConsumer{}
- deltaConsumer := &mockHistogramDataPointConsumer{}
- consumer := newHistogramConsumer(
- cumulativeConsumer,
- deltaConsumer,
- sender,
- regularHistogram,
- componenttest.NewNopTelemetrySettings())
- var errs []error
- consumer.Consume(mi, &errs)
-
- assert.Empty(t, errs)
-
- // We had three datapoints. Our mock just captures the metric name of
- // each data point consumed.
- assert.Equal(
- t, []string{"delta.metric", "delta.metric", "delta.metric"}, deltaConsumer.names)
- assert.Equal(t, numBucketCountsForEachDataPoint, deltaConsumer.counts)
- assert.Empty(t, cumulativeConsumer.names)
- assert.Empty(t, cumulativeConsumer.counts)
-}
-
-// Tests that the histogramConsumer correctly delegates to its
-// histogramDataPointConsumers. This tests cumulative histograms
-func TestHistogramConsumerCumulativeAggregation(t *testing.T) {
- numBucketCountsForEachDataPoint := []int{2, 5, 10}
- cumulativeMetric := newHistogramMetricWithDataPoints(
- "cumulative.metric",
- pmetric.AggregationTemporalityCumulative,
- numBucketCountsForEachDataPoint)
- mi := metricInfo{Metric: cumulativeMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- sender := &mockGaugeSender{}
- cumulativeConsumer := &mockHistogramDataPointConsumer{}
- deltaConsumer := &mockHistogramDataPointConsumer{}
- consumer := newHistogramConsumer(
- cumulativeConsumer,
- deltaConsumer,
- sender,
- regularHistogram,
- componenttest.NewNopTelemetrySettings())
- var errs []error
-
- consumer.Consume(mi, &errs)
-
- assert.Empty(t, errs)
-
- // We had three datapoints. Our mock just captures the metric name of
- // each data point consumed.
- assert.Equal(
- t,
- []string{"cumulative.metric", "cumulative.metric", "cumulative.metric"},
- cumulativeConsumer.names)
- assert.Equal(t, numBucketCountsForEachDataPoint, cumulativeConsumer.counts)
- assert.Empty(t, deltaConsumer.names)
- assert.Empty(t, deltaConsumer.counts)
-}
-
-// This tests that the histogram consumer correctly counts and logs
-// histogram metrics with missing aggregation attribute.
-func TestHistogramConsumerNoAggregation(t *testing.T) {
-
- // Create a histogram metric with missing aggregation attribute
- metric := newHistogramMetricWithDataPoints(
- "missing.aggregation.metric",
- pmetric.AggregationTemporalityUnspecified,
- nil)
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- sender := &mockGaugeSender{}
- observedZapCore, observedLogs := observer.New(zap.DebugLevel)
- settings := componenttest.NewNopTelemetrySettings()
- settings.Logger = zap.New(observedZapCore)
- consumer := newHistogramConsumer(
- &mockHistogramDataPointConsumer{},
- &mockHistogramDataPointConsumer{},
- sender,
- regularHistogram,
- settings,
- )
- assert.Equal(t, pmetric.MetricTypeHistogram, consumer.Type())
- var errs []error
- expectedNoAggregationCount := 3
- for i := 0; i < expectedNoAggregationCount; i++ {
- consumer.Consume(mi, &errs)
- }
- consumer.PushInternalMetrics(&errs)
-
- assert.Len(t, errs, 0)
- assert.Contains(t, sender.metrics, tobsMetric{
- Name: noAggregationTemporalityMetricName,
- Value: float64(expectedNoAggregationCount),
- Tags: map[string]string{"type": "histogram"},
- })
- allLogs := observedLogs.All()
- assert.Len(t, allLogs, expectedNoAggregationCount)
-}
-
-func TestHistogramReporting(t *testing.T) {
- observedZapCore, observedLogs := observer.New(zap.DebugLevel)
- settings := componenttest.NewNopTelemetrySettings()
- settings.Logger = zap.New(observedZapCore)
- report := newHistogramReporting(settings)
- metric := newMetric("a.metric", pmetric.MetricTypeHistogram)
- malformedCount := 3
- for i := 0; i < malformedCount; i++ {
- report.LogMalformed(metric)
- }
- noAggregationTemporalityCount := 5
- for i := 0; i < noAggregationTemporalityCount; i++ {
- report.LogNoAggregationTemporality(metric)
- }
-
- assert.Equal(t, int64(malformedCount), report.Malformed())
- assert.Equal(t, int64(noAggregationTemporalityCount), report.NoAggregationTemporality())
- assert.Equal(
- t,
- malformedCount+noAggregationTemporalityCount,
- observedLogs.Len())
-
- sender := &mockGaugeSender{}
- var errs []error
-
- report.Report(sender, &errs)
-
- assert.Empty(t, errs)
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: malformedHistogramMetricName,
- Value: float64(malformedCount),
- })
- assert.Contains(
- t,
- sender.metrics,
- tobsMetric{
- Name: noAggregationTemporalityMetricName,
- Value: float64(noAggregationTemporalityCount),
- Tags: typeIsHistogramTags,
- })
-}
-
-func TestHistogramReportingError(t *testing.T) {
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- sender := &mockGaugeSender{errorOnSend: true}
- var errs []error
-
- report.Report(sender, &errs)
-
- assert.NotEmpty(t, errs)
-}
-
-func TestCumulativeHistogramDataPointConsumer(t *testing.T) {
- metric := newMetric("a.metric", pmetric.MetricTypeHistogram)
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- // Creates bounds of -Inf to <=2.0; >2.0 to <=5.0; >5.0 to <=10.0; >10.0 to +Inf
- histogramDataPoint.ExplicitBounds().FromRaw([]float64{2.0, 5.0, 10.0})
- histogramDataPoint.BucketCounts().FromRaw([]uint64{5, 1, 3, 2})
- histogramDataPoint.Attributes().PutStr("foo", "bar")
- sender := &mockGaugeSender{}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newCumulativeHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- assert.Empty(t, errs)
- assert.Equal(
- t,
- []tobsMetric{
- {
- Name: "a.metric",
- Value: 5.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "le": "2", "res_attr_key": "res_attr_value"},
- },
- {
- Name: "a.metric",
- Value: 6.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "le": "5", "res_attr_key": "res_attr_value"},
- },
- {
- Name: "a.metric",
- Value: 9.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "le": "10", "res_attr_key": "res_attr_value"},
- },
- {
- Name: "a.metric",
- Value: 11.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "le": "+Inf", "res_attr_key": "res_attr_value"},
- },
- },
- sender.metrics,
- )
-}
-
-func TestCumulativeHistogramDataPointConsumerError(t *testing.T) {
- metric := newMetric("a.metric", pmetric.MetricTypeHistogram)
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- // Creates bounds of -Inf to <=2.0; >2.0 to <=5.0; >5.0 to <=10.0; >10.0 to +Inf
- histogramDataPoint.ExplicitBounds().FromRaw([]float64{2.0, 5.0, 10.0})
- histogramDataPoint.BucketCounts().FromRaw([]uint64{5, 1, 3, 2})
- sender := &mockGaugeSender{errorOnSend: true}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newCumulativeHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- // We tried to send 4 metrics. We get 4 errors.
- assert.Len(t, errs, 4)
-}
-
-func TestCumulativeHistogramDataPointConsumerLeInUse(t *testing.T) {
- metric := newMetric("a.metric", pmetric.MetricTypeHistogram)
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- histogramDataPoint.ExplicitBounds().FromRaw([]float64{10.0})
- histogramDataPoint.BucketCounts().FromRaw([]uint64{4, 12})
- histogramDataPoint.Attributes().PutInt("le", 8)
- sender := &mockGaugeSender{}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newCumulativeHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- assert.Empty(t, errs)
- assert.Equal(
- t,
- []tobsMetric{
- {
- Name: "a.metric",
- Value: 4.0,
- Source: "test_source",
- Tags: map[string]string{"_le": "8", "le": "10", "res_attr_key": "res_attr_value"},
- },
- {
- Name: "a.metric",
- Value: 16.0,
- Source: "test_source",
- Tags: map[string]string{"_le": "8", "le": "+Inf", "res_attr_key": "res_attr_value"},
- },
- },
- sender.metrics,
- )
-}
-
-func TestCumulativeHistogramDataPointConsumerMissingBuckets(t *testing.T) {
- metric := newMetric("a.metric", pmetric.MetricTypeHistogram)
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- sender := &mockGaugeSender{}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newCumulativeHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- assert.Empty(t, errs)
- assert.Empty(t, sender.metrics)
- assert.Equal(t, int64(1), report.Malformed())
-}
-
-func TestDeltaHistogramDataPointConsumer(t *testing.T) {
- metric := newMetric("a.delta.histogram", pmetric.MetricTypeHistogram)
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- // Creates bounds of -Inf to <=2.0; >2.0 to <=5.0; >5.0 to <=10.0; >10.0 to +Inf
- histogramDataPoint.ExplicitBounds().FromRaw([]float64{2.0, 5.0, 10.0})
- histogramDataPoint.BucketCounts().FromRaw([]uint64{5, 1, 3, 2})
- setDataPointTimestamp(1631234567, histogramDataPoint)
- histogramDataPoint.Attributes().PutStr("bar", "baz")
- sender := &mockDistributionSender{}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newDeltaHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- assert.Empty(t, errs)
-
- assert.Equal(
- t,
- []tobsDistribution{
- {
- Name: "a.delta.histogram",
- Centroids: []histogram.Centroid{
- {Value: 2.0, Count: 5},
- {Value: 3.5, Count: 1},
- {Value: 7.5, Count: 3},
- {Value: 10.0, Count: 2}},
- Granularity: allGranularity,
- Ts: 1631234567,
- Source: "test_source",
- Tags: map[string]string{"bar": "baz", "res_attr_key": "res_attr_value"},
- },
- },
- sender.distributions,
- )
- assert.Equal(t, int64(0), report.Malformed())
-}
-
-func TestDeltaHistogramDataPointConsumer_OneBucket(t *testing.T) {
- metric := newMetric("one.bucket.delta.histogram", pmetric.MetricTypeHistogram)
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- // Creates bounds of -Inf to <=2.0; >2.0 to <=5.0; >5.0 to <=10.0; >10.0 to +Inf
- histogramDataPoint.ExplicitBounds().FromRaw([]float64{})
- histogramDataPoint.BucketCounts().FromRaw([]uint64{17})
- setDataPointTimestamp(1641234567, histogramDataPoint)
- sender := &mockDistributionSender{}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newDeltaHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- assert.Empty(t, errs)
-
- assert.Equal(
- t,
- []tobsDistribution{
- {
- Name: "one.bucket.delta.histogram",
- Centroids: []histogram.Centroid{{Value: 0.0, Count: 17}},
- Granularity: allGranularity,
- Ts: 1641234567,
- Source: "test_source",
- Tags: map[string]string{"res_attr_key": "res_attr_value"},
- },
- },
- sender.distributions,
- )
- assert.Equal(t, int64(0), report.Malformed())
-}
-
-func TestDeltaHistogramDataPointConsumerError(t *testing.T) {
- metric := newMetric("a.delta.histogram", pmetric.MetricTypeHistogram)
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- // Creates bounds of -Inf to <=2.0; >2.0 to <=5.0; >5.0 to <=10.0; >10.0 to +Inf
- histogramDataPoint.ExplicitBounds().FromRaw([]float64{2.0, 5.0, 10.0})
- histogramDataPoint.BucketCounts().FromRaw([]uint64{5, 1, 3, 2})
- sender := &mockDistributionSender{errorOnSend: true}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newDeltaHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- assert.Len(t, errs, 1)
-}
-
-func TestDeltaHistogramDataPointConsumerMissingBuckets(t *testing.T) {
- metric := newMetric("a.metric", pmetric.MetricTypeHistogram)
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- histogramDataPoint := pmetric.NewHistogramDataPoint()
- sender := &mockDistributionSender{}
- report := newHistogramReporting(componenttest.NewNopTelemetrySettings())
- consumer := newDeltaHistogramDataPointConsumer(sender)
- var errs []error
-
- consumer.Consume(mi, fromOtelHistogramDataPoint(histogramDataPoint), &errs, report)
-
- assert.Empty(t, errs)
- assert.Empty(t, sender.distributions)
- assert.Equal(t, int64(1), report.Malformed())
-}
-
-func TestSummaries(t *testing.T) {
- summaryMetric := newMetric("test.summary", pmetric.MetricTypeSummary)
- summary := summaryMetric.Summary()
- dataPoints := summary.DataPoints()
- dataPoints.EnsureCapacity(2)
-
- mi := metricInfo{Metric: summaryMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- dataPoint := dataPoints.AppendEmpty()
- setQuantileValues(dataPoint, 0.1, 100.0, 0.5, 200.0, 0.9, 300.0, 0.99, 400.0)
- dataPoint.Attributes().PutStr("foo", "bar")
- dataPoint.SetCount(10)
- dataPoint.SetSum(5000.0)
- setDataPointTimestamp(1645123456, dataPoint)
-
- dataPoint = dataPoints.AppendEmpty()
- setQuantileValues(dataPoint, 0.2, 75.0, 0.5, 125.0, 0.8, 175.0, 0.95, 225.0)
- dataPoint.Attributes().PutStr("bar", "baz")
- dataPoint.SetCount(15)
- dataPoint.SetSum(3000.0)
- setDataPointTimestamp(1645123556, dataPoint)
-
- sender := &mockGaugeSender{}
- consumer := newSummaryConsumer(sender, componenttest.NewNopTelemetrySettings())
-
- assert.Equal(t, pmetric.MetricTypeSummary, consumer.Type())
-
- var errs []error
- consumer.Consume(mi, &errs)
-
- assert.Empty(t, errs)
-
- expected := []tobsMetric{
- {
- Name: "test.summary",
- Value: 100.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "quantile": "0.1", "res_attr_key": "res_attr_value"},
- Ts: 1645123456,
- },
- {
- Name: "test.summary",
- Value: 200.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "quantile": "0.5", "res_attr_key": "res_attr_value"},
- Ts: 1645123456,
- },
- {
- Name: "test.summary",
- Value: 300.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "quantile": "0.9", "res_attr_key": "res_attr_value"},
- Ts: 1645123456,
- },
- {
- Name: "test.summary",
- Value: 400.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "quantile": "0.99", "res_attr_key": "res_attr_value"},
- Ts: 1645123456,
- },
- {
- Name: "test.summary_count",
- Value: 10.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "res_attr_key": "res_attr_value"},
- Ts: 1645123456,
- },
- {
- Name: "test.summary_sum",
- Value: 5000.0,
- Source: "test_source",
- Tags: map[string]string{"foo": "bar", "res_attr_key": "res_attr_value"},
- Ts: 1645123456,
- },
- {
- Name: "test.summary",
- Value: 75.0,
- Source: "test_source",
- Tags: map[string]string{"bar": "baz", "quantile": "0.2", "res_attr_key": "res_attr_value"},
- Ts: 1645123556,
- },
- {
- Name: "test.summary",
- Value: 125.0,
- Source: "test_source",
- Tags: map[string]string{"bar": "baz", "quantile": "0.5", "res_attr_key": "res_attr_value"},
- Ts: 1645123556,
- },
- {
- Name: "test.summary",
- Value: 175.0,
- Source: "test_source",
- Tags: map[string]string{"bar": "baz", "quantile": "0.8", "res_attr_key": "res_attr_value"},
- Ts: 1645123556,
- },
- {
- Name: "test.summary",
- Value: 225.0,
- Source: "test_source",
- Tags: map[string]string{"bar": "baz", "quantile": "0.95", "res_attr_key": "res_attr_value"},
- Ts: 1645123556,
- },
- {
- Name: "test.summary_count",
- Value: 15.0,
- Source: "test_source",
- Tags: map[string]string{"bar": "baz", "res_attr_key": "res_attr_value"},
- Ts: 1645123556,
- },
- {
- Name: "test.summary_sum",
- Value: 3000.0,
- Source: "test_source",
- Tags: map[string]string{"bar": "baz", "res_attr_key": "res_attr_value"},
- Ts: 1645123556,
- },
- }
- assert.ElementsMatch(t, expected, sender.metrics)
-}
-
-func TestSummaries_QuantileTagExists(t *testing.T) {
- summaryMetric := newMetric("test.summary.quantile.tag", pmetric.MetricTypeSummary)
- summary := summaryMetric.Summary()
- dataPoints := summary.DataPoints()
- dataPoints.EnsureCapacity(1)
-
- mi := metricInfo{Metric: summaryMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- dataPoint := dataPoints.AppendEmpty()
- setQuantileValues(dataPoint, 0.5, 300.0)
- dataPoint.Attributes().PutStr("quantile", "exists")
- dataPoint.SetCount(12)
- dataPoint.SetSum(4000.0)
- setDataPointTimestamp(1650123456, dataPoint)
-
- sender := &mockGaugeSender{}
- consumer := newSummaryConsumer(sender, componenttest.NewNopTelemetrySettings())
- var errs []error
- consumer.Consume(mi, &errs)
- assert.Empty(t, errs)
-
- expected := []tobsMetric{
- {
- Name: "test.summary.quantile.tag",
- Value: 300.0,
- Source: "test_source",
- Tags: map[string]string{"_quantile": "exists", "quantile": "0.5", "res_attr_key": "res_attr_value"},
- Ts: 1650123456,
- },
- {
- Name: "test.summary.quantile.tag_count",
- Value: 12.0,
- Source: "test_source",
- Tags: map[string]string{"_quantile": "exists", "res_attr_key": "res_attr_value"},
- Ts: 1650123456,
- },
- {
- Name: "test.summary.quantile.tag_sum",
- Value: 4000.0,
- Source: "test_source",
- Tags: map[string]string{"_quantile": "exists", "res_attr_key": "res_attr_value"},
- Ts: 1650123456,
- },
- }
- assert.ElementsMatch(t, expected, sender.metrics)
-}
-
-func TestSummariesConsumer_ErrorSending(t *testing.T) {
- summaryMetric := newMetric("test.summary.error", pmetric.MetricTypeSummary)
- summary := summaryMetric.Summary()
- mi := metricInfo{Metric: summaryMetric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- dataPoints := summary.DataPoints()
- dataPoints.EnsureCapacity(1)
-
- dataPoint := dataPoints.AppendEmpty()
- dataPoint.SetCount(13)
- dataPoint.SetSum(3900.0)
-
- sender := &mockGaugeSender{errorOnSend: true}
- consumer := newSummaryConsumer(sender, componenttest.NewNopTelemetrySettings())
- var errs []error
- consumer.Consume(mi, &errs)
- assert.NotEmpty(t, errs)
-}
-
-// Sets quantile values for a summary data point
-func setQuantileValues(dataPoint pmetric.SummaryDataPoint, quantileValues ...float64) {
- if len(quantileValues)%2 != 0 {
- panic("quantileValues must be quantile, value, quantile, value, ...")
- }
- length := len(quantileValues) / 2
- quantileValuesSlice := dataPoint.QuantileValues()
- quantileValuesSlice.EnsureCapacity(length)
- for i := 0; i < length; i++ {
- quantileValueObj := quantileValuesSlice.AppendEmpty()
- quantileValueObj.SetQuantile(quantileValues[2*i])
- quantileValueObj.SetValue(quantileValues[2*i+1])
- }
-}
-
-func TestExponentialHistogramConsumerSpec(t *testing.T) {
- metric := newExponentialHistogramMetricWithDataPoints(
- "a.metric", pmetric.AggregationTemporalityDelta, []uint64{4, 7, 11})
- assert.Equal(t, pmetric.MetricTypeExponentialHistogram, exponentialHistogram.Type())
- assert.Equal(
- t,
- pmetric.AggregationTemporalityDelta,
- exponentialHistogram.AggregationTemporality(metric))
- points := exponentialHistogram.DataPoints(metric)
- assert.Len(t, points, 3)
-
- // 4 + 4 + 2
- assert.Len(t, points[0].AsCumulative(), 10)
-
- // 7 + 7 + 2
- assert.Len(t, points[1].AsCumulative(), 16)
-
- // 11 + 11 + 2
- assert.Len(t, points[2].AsCumulative(), 24)
-}
-
-func TestExponentialHistogramDataPoint(t *testing.T) {
- dataPoint := pmetric.NewExponentialHistogramDataPoint()
- dataPoint.SetScale(1)
- dataPoint.Negative().SetOffset(6)
- dataPoint.Negative().BucketCounts().FromRaw([]uint64{15, 16, 17})
- dataPoint.Positive().SetOffset(3)
- dataPoint.Positive().BucketCounts().FromRaw([]uint64{5, 6, 7, 8})
- dataPoint.SetZeroCount(2)
- dataPoint.Attributes().PutStr("foo", "bar")
- dataPoint.Attributes().PutStr("baz", "7")
- setDataPointTimestamp(1640198765, dataPoint)
- point := fromOtelExponentialHistogramDataPoint(dataPoint)
- assertBuckets(
- t,
- []cumulativeBucket{
- {Tag: "-16", Count: 17},
- {Tag: "-11.3137", Count: 33},
- {Tag: "-8", Count: 48},
- {Tag: "2.8284", Count: 50},
- {Tag: "4", Count: 55},
- {Tag: "5.6569", Count: 61},
- {Tag: "8", Count: 68},
- {Tag: "11.3137", Count: 76},
- {Tag: "+Inf", Count: 76},
- },
- point.AsCumulative())
- assertCentroids(
- t,
- []histogram.Centroid{
- {Value: -19.3137, Count: 17},
- {Value: -13.6569, Count: 16},
- {Value: -9.6569, Count: 15},
- {Value: -2.5858, Count: 2},
- {Value: 3.4142, Count: 5},
- {Value: 4.8284, Count: 6},
- {Value: 6.8284, Count: 7},
- {Value: 9.6569, Count: 8},
- },
- point.AsDelta())
- assert.Equal(t, map[string]string{"foo": "bar", "baz": "7"}, attributesToTags(point.Attributes))
- assert.Equal(t, int64(1640198765), point.SecondsSinceEpoch)
-}
-
-func TestExponentialHistogramDataPoint_ZeroOnly(t *testing.T) {
- dataPoint := pmetric.NewExponentialHistogramDataPoint()
- dataPoint.SetScale(0)
- dataPoint.Negative().SetOffset(2)
- dataPoint.Positive().SetOffset(1)
- dataPoint.SetZeroCount(5)
- point := fromOtelExponentialHistogramDataPoint(dataPoint)
- assertBuckets(
- t,
- []cumulativeBucket{
- {Tag: "2.0", Count: 5},
- {Tag: "+Inf", Count: 5},
- },
- point.AsCumulative())
- assertCentroids(
- t,
- []histogram.Centroid{
- {Value: -1.0, Count: 5},
- },
- point.AsDelta())
-}
-
-// Creates a histogram metric with len(numBucketCountsForEachDataPoint)
-// datapoints. name is the name of the histogram metric; temporality
-// is the temporality of the histogram metric;
-// numBucketCountsForEachDataPoint contains the number of buckets for each
-// data point.
-func newHistogramMetricWithDataPoints(
- name string,
- temporality pmetric.AggregationTemporality,
- numBucketCountsForEachDataPoint []int,
-) pmetric.Metric {
- result := newMetric(name, pmetric.MetricTypeHistogram)
- aHistogram := result.Histogram()
- aHistogram.SetAggregationTemporality(temporality)
- aHistogram.DataPoints().EnsureCapacity(len(numBucketCountsForEachDataPoint))
- for _, count := range numBucketCountsForEachDataPoint {
- point := aHistogram.DataPoints().AppendEmpty()
- point.BucketCounts().FromRaw(make([]uint64, count))
- point.ExplicitBounds().FromRaw(make([]float64, count-1))
- }
- return result
-}
-
-// Works like newHistogramMetricWithDataPoints but creates an exponential histogram metric
-func newExponentialHistogramMetricWithDataPoints(
- name string,
- temporality pmetric.AggregationTemporality,
- positiveAndNegativeBucketCountsForEachDataPoint []uint64,
-) pmetric.Metric {
- result := newMetric(name, pmetric.MetricTypeExponentialHistogram)
- aHistogram := result.ExponentialHistogram()
- aHistogram.SetAggregationTemporality(temporality)
- aHistogram.DataPoints().EnsureCapacity(len(positiveAndNegativeBucketCountsForEachDataPoint))
- for _, count := range positiveAndNegativeBucketCountsForEachDataPoint {
- point := aHistogram.DataPoints().AppendEmpty()
- point.Negative().BucketCounts().FromRaw(make([]uint64, count))
- point.Positive().BucketCounts().FromRaw(make([]uint64, count))
- }
- return result
-}
-
-func verifyGaugeConsumer(t *testing.T, errorOnSend bool) {
- metric := newMetric("test.metric", pmetric.MetricTypeGauge)
- mi := metricInfo{Metric: metric, Source: "test_source", SourceKey: "host.name", ResourceAttrs: map[string]string{"res_attr_key": "res_attr_value"}}
- dataPoints := metric.Gauge().DataPoints()
- dataPoints.EnsureCapacity(2)
- addDataPoint(
- 7,
- 1631205001,
- map[string]any{"env": "prod", "bucket": 73},
- dataPoints,
- )
- addDataPoint(
- 7.5,
- 1631205002,
- map[string]any{"env": "prod", "bucket": 73},
- dataPoints,
- )
- expected := []tobsMetric{
- {
- Name: "test.metric",
- Value: 7.0,
- Ts: 1631205001,
- Source: "test_source",
- Tags: map[string]string{"env": "prod", "bucket": "73", "res_attr_key": "res_attr_value"},
- },
- {
- Name: "test.metric",
- Value: 7.5,
- Ts: 1631205002,
- Source: "test_source",
- Tags: map[string]string{"env": "prod", "bucket": "73", "res_attr_key": "res_attr_value"},
- },
- }
- sender := &mockGaugeSender{errorOnSend: errorOnSend}
- consumer := newGaugeConsumer(sender, componenttest.NewNopTelemetrySettings())
-
- assert.Equal(t, pmetric.MetricTypeGauge, consumer.Type())
- var errs []error
- consumer.Consume(mi, &errs)
- assert.ElementsMatch(t, expected, sender.metrics)
- if errorOnSend {
- assert.Len(t, errs, len(expected))
- } else {
- assert.Empty(t, errs)
- }
-}
-
-func constructMetrics(metricList ...pmetric.Metric) pmetric.Metrics {
- result := pmetric.NewMetrics()
- result.ResourceMetrics().EnsureCapacity(1)
- rm := result.ResourceMetrics().AppendEmpty()
- rm.ScopeMetrics().EnsureCapacity(1)
- ilm := rm.ScopeMetrics().AppendEmpty()
- ilm.Metrics().EnsureCapacity(len(metricList))
- for _, metric := range metricList {
- metric.CopyTo(ilm.Metrics().AppendEmpty())
- }
- return result
-}
-
-func constructMetricsWithTags(tags map[string]string, metricList ...pmetric.Metric) pmetric.Metrics {
- result := pmetric.NewMetrics()
- result.ResourceMetrics().EnsureCapacity(1)
- rm := result.ResourceMetrics().AppendEmpty()
- for key, val := range tags {
- rm.Resource().Attributes().PutStr(key, val)
- }
- rm.ScopeMetrics().EnsureCapacity(1)
- ilm := rm.ScopeMetrics().AppendEmpty()
- ilm.Metrics().EnsureCapacity(len(metricList))
- for _, metric := range metricList {
- metric.CopyTo(ilm.Metrics().AppendEmpty())
- }
- return result
-}
-
-func newMetric(name string, typ pmetric.MetricType) pmetric.Metric {
- result := pmetric.NewMetric()
- result.SetName(name)
- switch typ {
- case pmetric.MetricTypeGauge:
- result.SetEmptyGauge()
- case pmetric.MetricTypeSum:
- result.SetEmptySum()
- case pmetric.MetricTypeHistogram:
- result.SetEmptyHistogram()
- case pmetric.MetricTypeExponentialHistogram:
- result.SetEmptyExponentialHistogram()
- case pmetric.MetricTypeSummary:
- result.SetEmptySummary()
- }
- return result
-}
-
-func addDataPoint(
- value any,
- ts int64,
- tags map[string]any,
- slice pmetric.NumberDataPointSlice,
-) {
- dataPoint := slice.AppendEmpty()
- if value != nil {
- setDataPointValue(value, dataPoint)
- }
- setDataPointTimestamp(ts, dataPoint)
- //nolint:errcheck
- dataPoint.Attributes().FromRaw(tags)
-}
-
-type dataPointWithTimestamp interface {
- SetTimestamp(v pcommon.Timestamp)
-}
-
-func setDataPointTimestamp(ts int64, dataPoint dataPointWithTimestamp) {
- dataPoint.SetTimestamp(
- pcommon.NewTimestampFromTime(time.Unix(ts, 0)))
-}
-
-func setDataPointValue(value any, dataPoint pmetric.NumberDataPoint) {
- switch v := value.(type) {
- case int:
- dataPoint.SetIntValue(int64(v))
- case int64:
- dataPoint.SetIntValue(v)
- case float64:
- dataPoint.SetDoubleValue(v)
- default:
- panic("Unsupported value type")
- }
-}
-
-type tobsMetric struct {
- Name string
- Value float64
- Ts int64
- Source string
- Tags map[string]string
-}
-
-type mockGaugeSender struct {
- errorOnSend bool
- metrics []tobsMetric
-}
-
-func (m *mockGaugeSender) SendMetric(
- name string, value float64, ts int64, source string, tags map[string]string,
-) error {
- m.metrics = append(m.metrics, tobsMetric{
- Name: name,
- Value: value,
- Ts: ts,
- Source: source,
- Tags: copyTags(tags),
- })
- if m.errorOnSend {
- return errors.New("error sending")
- }
- return nil
-}
-
-type tobsDistribution struct {
- Name string
- Centroids []histogram.Centroid
- Granularity map[histogram.Granularity]bool
- Ts int64
- Source string
- Tags map[string]string
-}
-
-type mockDistributionSender struct {
- errorOnSend bool
- distributions []tobsDistribution
-}
-
-func (m *mockDistributionSender) SendDistribution(
- name string,
- centroids []histogram.Centroid,
- granularity map[histogram.Granularity]bool,
- ts int64,
- source string,
- tags map[string]string,
-) error {
- m.distributions = append(m.distributions, tobsDistribution{
- Name: name,
- Centroids: copyCentroids(centroids),
- Granularity: copyGranularity(granularity),
- Ts: ts,
- Source: source,
- Tags: copyTags(tags),
- })
- if m.errorOnSend {
- return errors.New("error sending")
- }
- return nil
-}
-
-type mockTypedMetricConsumer struct {
- typ pmetric.MetricType
- errorOnConsume bool
- errorOnPushInternalMetrics bool
- names []string
- sources []string
- sourceKeys []string
- pushInternalMetricsCallCount int
-}
-
-func (m *mockTypedMetricConsumer) Type() pmetric.MetricType {
- return m.typ
-}
-
-func (m *mockTypedMetricConsumer) Consume(mi metricInfo, errs *[]error) {
- m.names = append(m.names, mi.Name())
- m.sources = append(m.sources, mi.Source)
- m.sourceKeys = append(m.sourceKeys, mi.SourceKey)
- if m.errorOnConsume {
- *errs = append(*errs, errors.New("error in consume"))
- }
-}
-
-func (m *mockTypedMetricConsumer) PushInternalMetrics(errs *[]error) {
- m.pushInternalMetricsCallCount++
- if m.errorOnPushInternalMetrics {
- *errs = append(*errs, errors.New("error in consume"))
- }
-}
-
-type mockFlushCloser struct {
- errorOnFlush bool
- numFlushCalls int
- numCloseCalls int
-}
-
-func (m *mockFlushCloser) Flush() error {
- m.numFlushCalls++
- if m.errorOnFlush {
- return errors.New("error flushing")
- }
- return nil
-}
-
-func (m *mockFlushCloser) Close() {
- m.numCloseCalls++
-}
-
-type mockHistogramDataPointConsumer struct {
- names []string
- counts []int
-}
-
-func (m *mockHistogramDataPointConsumer) Consume(
- mi metricInfo, point bucketHistogramDataPoint, _ *[]error, _ *histogramReporting) {
- m.names = append(m.names, mi.Name())
- m.counts = append(m.counts, len(point.AsCumulative()))
-}
-
-func copyTags(tags map[string]string) map[string]string {
- if len(tags) == 0 {
- return nil
- }
- tagsCopy := make(map[string]string, len(tags))
- for k, v := range tags {
- tagsCopy[k] = v
- }
- return tagsCopy
-}
-
-type mockSumSender struct {
- errorOnSend bool
- metrics []tobsMetric
- deltaMetrics []tobsMetric
-}
-
-func (m *mockSumSender) SendMetric(
- name string, value float64, ts int64, source string, tags map[string]string,
-) error {
- m.metrics = append(m.metrics, tobsMetric{
- Name: name,
- Value: value,
- Ts: ts,
- Source: source,
- Tags: copyTags(tags),
- })
- if m.errorOnSend {
- return errors.New("error sending")
- }
- return nil
-}
-
-func (m *mockSumSender) SendDeltaCounter(
- name string, value float64, source string, tags map[string]string,
-) error {
- m.deltaMetrics = append(m.deltaMetrics, tobsMetric{
- Name: name,
- Value: value,
- Source: source,
- Tags: copyTags(tags),
- })
- if m.errorOnSend {
- return errors.New("error sending")
- }
- return nil
-}
-
-func copyCentroids(centroids []histogram.Centroid) []histogram.Centroid {
- if centroids == nil {
- return nil
- }
- result := make([]histogram.Centroid, len(centroids))
- copy(result, centroids)
- return result
-}
-
-func copyGranularity(
- granularity map[histogram.Granularity]bool) map[histogram.Granularity]bool {
- if granularity == nil {
- return nil
- }
- result := make(map[histogram.Granularity]bool, len(granularity))
- for k, v := range granularity {
- result[k] = v
- }
- return result
-}
-
-func assertBuckets(t *testing.T, expected, actual []cumulativeBucket) {
- assert.Equal(t, len(expected), len(actual), "len")
- for i := range expected {
- assert.Equal(t, expected[i].Count, actual[i].Count, "count")
- assert.True(t, tagsEqual(expected[i].Tag, actual[i].Tag), "tag")
- }
-}
-
-func tagsEqual(expected, actual string) bool {
- if expected == actual {
- return true
- }
- expectedF, errE := strconv.ParseFloat(expected, 64)
- actualF, errF := strconv.ParseFloat(actual, 64)
- if errE != nil || errF != nil {
- return false
- }
- return math.Abs(expectedF-actualF) < 0.0001
-}
-
-func assertCentroids(t *testing.T, expected, actual []histogram.Centroid) {
- assert.Equal(t, len(expected), len(actual), "len")
- for i := range expected {
- assert.Equal(t, expected[i].Count, actual[i].Count, "count")
- assert.InDelta(t, expected[i].Value, actual[i].Value, 0.0001, "value")
- }
-}
diff --git a/exporter/tanzuobservabilityexporter/testdata/config.yaml b/exporter/tanzuobservabilityexporter/testdata/config.yaml
deleted file mode 100644
index d2893dd98b9e..000000000000
--- a/exporter/tanzuobservabilityexporter/testdata/config.yaml
+++ /dev/null
@@ -1,30 +0,0 @@
-receivers:
- nop:
-
-processors:
- nop:
-
-exporters:
- tanzuobservability:
- traces:
- endpoint: "http://localhost:40001"
- metrics:
- endpoint: "http://localhost:2916"
- resource_attrs_included: true
- app_tags_excluded: true
- retry_on_failure:
- enabled: true
- initial_interval: 10s
- max_interval: 60s
- max_elapsed_time: 10m
- sending_queue:
- enabled: true
- num_consumers: 2
- queue_size: 10
-
-service:
- pipelines:
- traces:
- receivers: [ nop ]
- processors: [ nop ]
- exporters: [ tanzuobservability ]
diff --git a/exporter/tanzuobservabilityexporter/trace_exporter.go b/exporter/tanzuobservabilityexporter/trace_exporter.go
deleted file mode 100644
index a8989b62374f..000000000000
--- a/exporter/tanzuobservabilityexporter/trace_exporter.go
+++ /dev/null
@@ -1,173 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter // import "github.com/open-telemetry/opentelemetry-collector-contrib/exporter/tanzuobservabilityexporter"
-
-import (
- "context"
- "errors"
- "fmt"
-
- "github.com/google/uuid"
- "github.com/wavefronthq/wavefront-sdk-go/senders"
- "go.opentelemetry.io/collector/component"
- "go.opentelemetry.io/collector/exporter"
- "go.opentelemetry.io/collector/pdata/ptrace"
- "go.uber.org/multierr"
- "go.uber.org/zap"
-)
-
-const (
- defaultApplicationName = "defaultApp"
- defaultServiceName = "defaultService"
- defaultMetricsPort = 2878
- labelApplication = "application"
- labelCluster = "cluster"
- labelShard = "shard"
- labelError = "error"
- labelEventName = "name"
- labelService = "service"
- labelSpanKind = "span.kind"
- labelSource = "source"
- labelDroppedEventsCount = "otel.dropped_events_count"
- labelDroppedLinksCount = "otel.dropped_links_count"
- labelDroppedAttrsCount = "otel.dropped_attributes_count"
- labelOtelScopeName = "otel.scope.name"
- labelOtelScopeVersion = "otel.scope.version"
-)
-
-// spanSender Interface for sending tracing spans to Tanzu Observability
-type spanSender interface {
- // SendSpan mirrors sender.SpanSender from wavefront-sdk-go.
- // traceId, spanId, parentIds and preceding spanIds are expected to be UUID strings.
- // parents and preceding spans can be empty for a root span.
- // span tag keys can be repeated (example: "user"="foo" and "user"="bar")
- SendSpan(name string, startMillis, durationMillis int64, source, traceID, spanID string, parents, followsFrom []string, tags []senders.SpanTag, spanLogs []senders.SpanLog) error
- Flush() error
- Close()
-}
-
-type tracesExporter struct {
- cfg *Config
- sender spanSender
- logger *zap.Logger
-}
-
-func newTracesExporter(settings exporter.CreateSettings, c component.Config) (*tracesExporter, error) {
- cfg, ok := c.(*Config)
- if !ok {
- return nil, fmt.Errorf("invalid config: %#v", c)
- }
- if !cfg.hasTracesEndpoint() {
- return nil, fmt.Errorf("traces.endpoint required")
- }
- _, _, err := cfg.parseTracesEndpoint()
- if err != nil {
- return nil, fmt.Errorf("failed to parse traces.endpoint: %w", err)
- }
- metricsPort := defaultMetricsPort
- if cfg.hasMetricsEndpoint() {
- _, metricsPort, err = cfg.parseMetricsEndpoint()
- if err != nil {
- return nil, fmt.Errorf("failed to parse metrics.endpoint: %w", err)
- }
- }
-
- // we specify a MetricsPort so the SDK can report its internal metrics
- // but don't currently export any metrics from the pipeline
- s, err := senders.NewSender(cfg.Traces.Endpoint,
- senders.MetricsPort(metricsPort),
- senders.FlushIntervalSeconds(60),
- senders.SDKMetricsTags(map[string]string{"otel.traces.collector_version": settings.BuildInfo.Version}),
- )
- if err != nil {
- return nil, fmt.Errorf("failed to create proxy sender: %w", err)
- }
-
- return &tracesExporter{
- cfg: cfg,
- sender: s,
- logger: settings.Logger,
- }, nil
-}
-
-func (e *tracesExporter) pushTraceData(ctx context.Context, td ptrace.Traces) error {
- var errs error
-
- for i := 0; i < td.ResourceSpans().Len(); i++ {
- rspans := td.ResourceSpans().At(i)
- resource := rspans.Resource()
- for j := 0; j < rspans.ScopeSpans().Len(); j++ {
- ispans := rspans.ScopeSpans().At(j)
- transform := newTraceTransformer(resource)
-
- libraryName := ispans.Scope().Name()
- libraryVersion := ispans.Scope().Version()
-
- for k := 0; k < ispans.Spans().Len(); k++ {
- select {
- case <-ctx.Done():
- return multierr.Append(errs, errors.New("context canceled"))
- default:
- transformedSpan, err := transform.Span(ispans.Spans().At(k))
- if err != nil {
- errs = multierr.Append(errs, err)
- continue
- }
-
- if libraryName != "" {
- transformedSpan.Tags[labelOtelScopeName] = libraryName
- }
-
- if libraryVersion != "" {
- transformedSpan.Tags[labelOtelScopeVersion] = libraryVersion
- }
-
- if err := e.recordSpan(transformedSpan); err != nil {
- errs = multierr.Append(errs, err)
- continue
- }
- }
- }
- }
- }
-
- errs = multierr.Append(errs, e.sender.Flush())
- return errs
-}
-
-func (e *tracesExporter) recordSpan(span span) error {
- var parents []string
- if span.ParentSpanID != uuid.Nil {
- parents = []string{span.ParentSpanID.String()}
- }
-
- return e.sender.SendSpan(
- span.Name,
- span.StartMillis,
- span.DurationMillis,
- span.Source,
- span.TraceID.String(),
- span.SpanID.String(),
- parents,
- nil,
- mapToSpanTags(span.Tags),
- span.SpanLogs,
- )
-}
-
-func (e *tracesExporter) shutdown(_ context.Context) error {
- e.sender.Close()
- return nil
-}
-
-func mapToSpanTags(tags map[string]string) []senders.SpanTag {
- spanTags := make([]senders.SpanTag, 0, len(tags))
- for k, v := range tags {
- spanTags = append(spanTags, senders.SpanTag{
- Key: k,
- Value: v,
- })
- }
- return spanTags
-}
diff --git a/exporter/tanzuobservabilityexporter/trace_exporter_test.go b/exporter/tanzuobservabilityexporter/trace_exporter_test.go
deleted file mode 100644
index ec85f5328b0e..000000000000
--- a/exporter/tanzuobservabilityexporter/trace_exporter_test.go
+++ /dev/null
@@ -1,331 +0,0 @@
-// Copyright The OpenTelemetry Authors
-// SPDX-License-Identifier: Apache-2.0
-
-package tanzuobservabilityexporter
-
-import (
- "context"
- "strings"
- "testing"
-
- "github.com/google/uuid"
- "github.com/stretchr/testify/assert"
- "github.com/stretchr/testify/require"
- "github.com/wavefronthq/wavefront-sdk-go/senders"
- "go.opentelemetry.io/collector/exporter/exporterhelper"
- "go.opentelemetry.io/collector/exporter/exportertest"
- "go.opentelemetry.io/collector/pdata/pcommon"
- "go.opentelemetry.io/collector/pdata/ptrace"
- conventions "go.opentelemetry.io/collector/semconv/v1.6.1"
- "go.uber.org/zap"
-)
-
-func TestSpansRequireTraceAndSpanIDs(t *testing.T) {
- spanWithNoTraceID := ptrace.NewSpan()
- spanWithNoTraceID.SetSpanID([8]byte{9, 9, 9, 9, 9, 9, 9, 9})
- spanWithNoSpanID := ptrace.NewSpan()
- spanWithNoSpanID.SetTraceID([16]byte{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1})
- traces := constructTraces([]ptrace.Span{spanWithNoTraceID, spanWithNoSpanID})
-
- _, err := consumeTraces(traces)
- require.Error(t, err)
- assert.True(t, strings.Contains(err.Error(), errInvalidSpanID.Error()))
- assert.True(t, strings.Contains(err.Error(), errInvalidTraceID.Error()))
-}
-
-func TestExportTraceDataMinimum(t *testing.T) {
- // source=